⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11. servlet note.txt

📁 在达内培训java笔记
💻 TXT
📖 第 1 页 / 共 5 页
字号:

"*"表示重要性,星号越多越重要

day1 
一、 Web应用基础
1.B-S架构(***) 
  架构的发展
  c/s vs. b/s
    c/s架构 (client客户端-server服务端) 
        (胖客户端:要求客户端运行业务;把业务放到服务器端,则是瘦客户端) 
        典型的c/s应用:ftp工具、QQ、邮件系统、杀毒软件...
        1.建立在tcp/ip协议之上,有自己的通信规则(建立业务) 
        2.需要相互配合才能完成一个完整业务逻辑
        3.允许多个客户端程序同时接入一个server程序(并发) 
        4.每一个client(机器)都必须安装客户软件
        5.修改了server程序,通常client程序都要修改(升级) 
        优点:利用客户端的计算能力,分担服务器的负荷(大型网络游戏就利用这点) 
        缺点:用户必须安装客户端程序;客户端需要升级(麻烦) 
    b/s架构 (browser - web server(cluster集群)) 
        (极瘦客户端:最低限度地减少客户端程序,只需要browser(浏览器)) 
        1.基于http协议(应用层) 
        2.几乎所有的业务逻辑处理都在server完成
        3.支持并发
        4.client要求很少,只需要安装browser(浏览器) 
        5.修改server之后,client不需要任何变化
        6.server端开发技术:html/js,xhtml,... php,asp,jsp,servlet
        缺点:所有业务都在服务器端完成,服务器负荷大。
        优点:支持高并发访问;不需另外安装软件(只需浏览器),免去更新的麻烦。

2.开发一个静态的Web应用(*) 
  1)下载一个tomcat服务器
  2)web服务器-Tomcat的启动和配置(熟练使用和配置) 
    先进入Tomcat主目录下的bin目录      // %catalina_home%/bin
    window平台:启动---startup.bat
               关闭---shutdown.bat
    Linux平台:启动---startup.sh 或 catalina.sh run //catalina单次启动;startup启动直至shutdown
              关闭---shutdown.sh 或 Ctrl+C
    测试: 打开浏览器,访问 Tomcat 首页:http://localhost:8080 或者 http://127.0.0.1:8080/
    获取进程Id强行杀死tomcat进程
       ps ef|grep tomcat ---查看tomcat的进程id
       kill -9 tomcat进程Id号 --- 强行杀死tomcat进程
  3)介绍Web应用的结构
      严格定义为两部分
    ① Web应用的根目录下有一个特定的子目录称为WEB-INF,其中包含不能被客户访问的专用Web应用程序软件,
       包括Servlet类文件、部署描述符web.xml、外部库以及其他任何由此应用程序使用的专用文件。
    ② 所有位于WEB-INF之外的文件都被看作是公共的,它们可以从客户端被访问。资源包括HTML页面、JSP页面和图像等。
    web.xml的模板(一个web.xml中可以配置多个Servlet):

        <?xml version="1.0" encoding="UTF-8"?>
        <web-app version="2.5" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
          <servlet>
            <servlet-name>servlet的名字1</servlet-name>   //servlet的逻辑名
            <servlet-class>servlet类全名1</servlet-class> //类的完全限定名
          </servlet>
          <servlet>
            <servlet-name>servlet的名字2</servlet-name>
            <servlet-class>servlet类全名2</servlet-class>
          </servlet>
         
          <servlet-mapping>
            <servlet-name>servlet的名字1</servlet-name> //要和servlet标签中的相同
            <url-pattern>指定servlet相对于应用目录的路径</url-pattern> //servlet的访问路径
          </servlet-mapping>
          <servlet-mapping>
            <servlet-name>servlet的名字2</servlet-name>
            <url-pattern>指定servlet相对于应用目录的路径</url-pattern>
          </servlet-mapping>
          <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>//指定默认的欢迎页面
          </welcome-file-list>
        </web-app>
  4)注意事项


3.介绍Web服务器的一些特点  
    什么是静态内容?什么是动态内容?
      静态:返回页面每个客户端都相同。  动态:各个客户端的页面各不相同。
    产生动态内容的Web辅助应用:CGI & Servlet
      CGI(Common Gateway Interface): 可以产生动态内容,跨语言(C/C++, Perl, python...) 
          1.本身是一个进程(数据共享,跨进程调用) --性能较差
          2.可移植性很差(本地语言) 
          3.安全性差--可以访问本地的操作系统,容易受黑客攻击
      web server / servlet container
          1.性能好 --多线程(而不是进程) 
          2.可移植性 --相对好
          3.安全性

4.Http基础(**) 
  HTTP(Hyper Text Transfer Protocol)是超文本传输协议的缩写,它用于传送 WWW 方式的数据。
  HTTP 协议采用了请求/响应模型。基于 TCP/IP 之上的协议,在 Web 上广泛使用。无状态。
  如果来自服务器的响应是 html 页面,那么 html 内容会嵌入到 Http 响应中。
  Http 会话:是一个简单的请求-响应序列。
  1)请求响应模型
    请求的关键要素:1.http方法(要完成的动作) 2.要访问的页面(URL请求) 3.表单参数
    响应的关键要素:1.状态码(请求是否成功) 2.内容类型(txt,img,html等) 3.返回内容(具体资源:html,图片等) 
  2)URL的分析
    URL(Uniform Resoure Locator)统一资源定位器。Web 上的每一个资源都有唯一的地址,采用的就是 url 格式
  3)使用Http Monitor截获http的请求与响应信息
    Http 请求方法包括:Get()方法;Post()方法; 其他方法:Head, Trace, Put, Delete, Connect 等
    Get()方法: Http 最简单的方法,其最主要的任务:从服务器上获取资源
    Post()方法:更强大的请求方法,不仅可以请求资源,还可以向服务器发送表单数据
  4)分析http请求的信息
    客户端向服务器发送一个请求,请求头包含:1.请求的方法; 2.URI; 3.协议版本; 4.以及包含请求修饰符;
                                    5.客户信息和内容的类似于 MIME 的消息结构
  5)分析http响应的信息
    截获内容:
        HTTP/1.1 200 OK      // HTTP/1.1 是web服务器使用的版本;200 是状态码;OK 是状态码的文本版本
        ETag: W/"472-1198101802343"
        Last-Modified: Wed, 19 Dec 2007 22:03:22 GMT
        Content-Type: text/html  // MIME类型:告诉浏览器所要接收的是哪一类型的数据。以供浏览器显示。
        Content-Length: 472
        Date: Wed, 19 Dec 2007 22:05:44 GMT
        Server: Apache-Coyote/1.1
        //以上是Http响应的首部
        //响应体中包含了Html以及其他要显示的内容
        <html><head><title>User Login</title></head>
        <body><center>……</center></body></html>
    Http 响应状态码分析(具体代码含义参看 http 代码对照表):
        1xx:信息响应类,表示接收到请求并且继续处理
        2xx:处理成功响应类,表示动作被成功接收、理解和接受
        3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
        4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
            如:404——无法找到,表示无法找到指定位置的资源。
        5xx:服务端错误,服务器不能正确执行一个正确的请求


二、Servlet基础
1.介绍Servlet的基本概念(***) 
    (Servlet、Servlet容器、Servlet vs. CGI)——————图示
  1)它是由 java 编写的、服务端的小程序。相对而言,Applet和javaScript是客户端小程序。
  2)基于Http协议的,运行在web服务器内的。Servlet和CGI都是运行在Web服务器上,用来生成Web页面。
  3)没有 main 方法。是接受来自网络的请求(form表单,以及其他的请求),并对不同请求作出不同的响应。
  4)由容器管理和调用。这个web容器可以控制Servlet对象的生命周期,控制请求由Servlet对象处理。
  5)Web 服务器的辅助应用,处理特定的用户请求,并返回响应。    web服务器,这里的服务器不是硬件概念,而是软件,常用的web服务器有 Tomcat,Jboss等    Tomcat是一个用java语言编写的web服务器,所以需要有相应的java运行环境,也就是JVM,还要配置tomcat的具体路径。
  6)继承 java 的优点,与协议、平台无关

2.开发第一个Servlet应用(**) 
    Web应用的结构 
    开发一个Servlet应用的步骤 
    1)建立 Web 应用目录(注意细节:各目录的位置、名称与包含的内容) 
    2)编写 Java 代码,如:HelloWorld.java
      把生成的.class 文件放置到 WebRoot/WEB-INF/classes 目录下
    3)编写配置文件:web.xml
      放置到 WebRoot/WEB-INF/  目录下
    4)把整个 web 应用放到 %catalina_home%/webapps  //放到 tomcat的 webapps目录下

3.分析Servlet应用(***) 
  1)Servlet的继承体系 
    javax.servlet.Servlet接口 --> GenericServlet抽象类 --> HttpServlet  -->  自定义类
    所有的servlet都必须实现该接口    处理各种协议(包括http)   专职处理http协议  也可继承GenericServlet
  2)Servlet接口;GenericServlet抽象类;HttpServlet类
    Servlet接口(位置:javax.servlet.Servlet) 定义了特定的生命周期方法:
        init(ServletConfig config) 
        service(HttpServletRequest request, HttpServletResponse response) 
        destroy() 
    GenericServlet implements Servlet
        实现了 init(ServletConfig config)、destroy()等方法;并提供了 init()方法。
        还实现了 ServletConfig 接口。由于这是抽象类,所以必须实现抽象方法:service() 
    HttpServlet extends GenericServlet   (位置:javax.servlet.http.HttpServlet) 
        具有父类 GenericServlet 类似的方法和对象,是使用 Servlet 编程常用的类
        支持 HTTP 的 post 和 get 等方法。
  3)容器如何找到指定的Servlet?(图示) 
    Servlet有 3 个"名字": url 名、 应用中的逻辑名、 实际的名字
    配置文件 web.xml 都把这几个名字一一对应起来了
  Servlet是受容器管理的
    request对象、response对象都是容器根据客户端请求而产生的。
    容器根据url请求,通过DD(web.xml)配置(url名,内部逻辑名,完全限定名)定位具体的servlet。
    容器根据客户请求创建/分配一个线程,并调用servlet的service()方法,把request对象、respone对象作为参数传过去
    service()方法会根据客户端请求的Http方法调用不同的HttpServlet的方法(doGet(),doPost(),...);
    Servlet使用response对象把处理完的结果响应到客户端。
    service()方法结束后,线程要么撤销,要么返回容器的线程池;request对象、response对象都被gc回收。

4.使用Servlet来发送用户输入的信息 
  1)开发用户登录的应用
  2)如何使用Form表单来提交数据
     <form action="login" method="POST" enctype="multipart/form-data">
     (1)action: 表单提交给服务器的哪个资源处理
       "login" 为在 web.xml 中配置的 url-pattern 或者是 jsp、html 文件等。
     (2)Get vs. Post方法的比较(使用Http Monitor) 
       GET---->通过 URL 提交表单信息,由于受到 URL 长度的限制,只能传递大约 1024(1K)字节。
          通过 http monitor 工具截获请求信息(下面仅写出请求行,请求首部略):
          GET /welcome/login.html?username=zhangsan&password=lisi HTTP/1.1 
          //GET是请求方式; /welcome/login.html是请求路径; ?号后面是参数列表,以&分隔; 最后是协议版本
       POST--->通过 Http Body 提交表单信息,传输的数据量大,可以达到 2M。
          由请求行、请求首部、消息体 三部分组成。
          参数放在消息体中,长度不再受限,更安全;而 GET 必须把参数放在请求行。
          通过 http monitor 工具截获请求信息(大略):
          POST /welcome/login.html HTTP/1.1     //请求行
          Accept: ...
          Accept-Language: zh-cn,en-us;q=0.5
          .....
          Host: 127.0.0.1
          .....                                 //从请求行以下到这行,都是请求首部
          username=zhangsan&password=zhangsan   //消息体(有效负载) 
       enctype: multipart/form-data :在form中设置此属性后,传输的就是二进制数据,常可用于上传文件

5.如何在服务器端获得表单提供的数据
  1)HttpServletRequest 对象
    由 Web Container 封装了用户的 Http 请求数据包而生成,可通过它获得所有跟用户请求数据报相关的信息。
    getProtocol():String                     ——返回对应的协议       (如:HTTP/1.1) 
    getMethod():String                       ——返回 http 对应的方法 (Get|Post) 
    getRemoteHost():String                   ——返回远程主机名       (如:127.0.0.1) 
    getRemotePort():int                      ——返回远程端口号       (如:55013) 
    getHeader(String config):String          ——返回http对应的首部信息(参数如Accept-Language) 
    getParameter(String name):String         ——返回指定参数(name)的值(value)   (如:zhangsan) 
    getParameterValues(String name):String[] ——返回指定输入参数(名为 name)的所有值(输入的参数列表) 
    getParameterNames():Enumeration          ——返回请求对象中全部输入参数的名称
                                               (如:java.util.Hashtable$Enumerator@1ff395a) 
  2)解决 Servlet 的中文乱码问题
    (1)响应输出静态页面时,处理中文信息乱码: response.setContentType("text/html; charset=utf-8");
    (2)获取数据过程中,处理中文输入乱码(3 种方法):
       方法一:设置字符编码来解决 post 方法提交表单中文乱码问题。
             request.setCharacterEncoding("gbk"); 
             response.setContentType("text/html;charset=utf-8");
             必须在第一个 request.getParameter("name"); 之前执行上面的语句。
       方法二:重新生成指定编码的字符串
             String name = new String(request.getParamete("name").getBytes("iso-8859-1"));
       方法三:修改服务器的编码设置——解决 get 方法提交表单中文乱码问题

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -