目录

 

Servlet

概念:

特点:

使用:

运行流程:

Servlet的生命周期

service()和doGet()和doPost()方法的区别

Servlet的常见错误:

Request对象学习:

 作用:

 使用:

Respone对象学习:

作用:

使用:

请求乱码问题解决:

Servlet流程总结:

请求转发学习:

Servlet请求转发路径:

request作用域:

重定向:

Servlet重定向路径总结:

Cookie学习:

作用:

使用:

特点:

session学习:

作用:

原理:

特点:

 使用:

session失效处理:

ServletContext对象学习:

作用:

特点:

作用域:

生命周期:

使用:

ServletConfig对象学习:

作用:

 使用:

Web.xml文件使用总结:

作用:

使用位置:

 区别:

内容(核心组件):

加载顺序:

加载时机:

Servler.xml文件

核心组件

热部署:


Servlet

概念:

        狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只是用来扩展基于HTTP协议的Web服务器(可以理解为Servlet是服务器与程序员之间的协议或规定,必须实现Servlet的类)

特点:

          运行在支持java的应用服务器上
          Servlet的实现遵循了服务器能够识别的规则,也就是服务器会自动根据请求调用对应的servlet进行请求处理。
          简单方便、可移植性强

使用:

eg:
      A:创建普通的java类并继承HttpServlet
      B:覆写service方法
      C:在service方法中书写逻辑代码即可
      D:在WEB-INF文件夹下的web.xml文件中配置servlet

运行流程:

       URL组成:服务器地址:端口号/虚拟项目名/servlet的别名
       URI:虚拟项目名/servlet的别名
       浏览器发送请求到服务器,服务器根据请求URL地址中的信息在webapps目录下找到对应的项目文件夹,然后在web.xml中检索对应的servlet,找到后调用并执行Servlet

Servlet的生命周期

          A:从第一次调用到服务器关闭
          B:如果Servlet在web.xml中配置了load-on-startup,生命周期为从服务器启动到服务器关闭
     注意:
            init()方法是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行
            destory()方法是在Servlet被销毁时执行,也就是服务器关闭时。

service()和doGet()和doPost()方法的区别

            service()方法:
                   不管是get方式还是post方式的请求,如果Servlet类中有service()方法,则优先调用service()方法。
            doGet()方法:         
                   在没有service()方法的情况下如果是get方式的请求所调用的处理请求的方法
            doPost()方法:
                   在没有service()方法的情况下如果是post方式的请求所调用的处理请求的方法
            注意:
                   如果在复写的service()方法中调用了父类的service()方法(super.service(arg0, arg1)),则service()方法处理完后,会再次根据请求方式响应的doGet()和doPost()方法执行。所以,一般情况下是不在覆写的service()方法中调用父类的service()方法的,避免出现405错误

Servlet的常见错误:

           404错误:资源未找到(URL书写错误)
                 原因一:在请求地址中的Servlet的别名书写错误。
                 原因二:虚拟项目名称拼写错误
           500错误:内部服务器错误
                 错误一:java.lang.ClassNotFoundException:  *******
                       解决:在web.xml中校验servlet类的全限定路径是否拼写错误
                 错误二:因为service()方法体中代码执行错误导致
                       解决:根据错误提示对service()方法中的代码进行错误更改。
            405错误:请求方式不支持
                  原因:请求方式和servlet中的方法不匹配所造成的。
                  解决:尽量使用service()方法进行请求处理,并且不要在service()方法中调用父类的service。 

Servlet在运行时服务器会调用service()方法,并创建了Request对象和Respone对象

Request对象学习:

 作用:

            Request对象中封存了当前请求的所有请求信息

 使用:

              获取请求行数据
                     req.getMethod();                                        //获取请求方式
                     req.getRequestURL();                                 //获取请求URL
                     req.getRequestURI();                                 //获取请求URI
                     req.getScheme();                                      //获取协议
              获取请求头数据
                     req.getHeaderNames();                           //获取所有请求头的键的枚举
                     req.getHeader("键名");                            //获取指定键的信息
              获取用户数据
                     req.getParameter("键名");                      //获取指定键的用户数据
                     req.getParameterValues("键名");            //获取同键不同值的用户数据(多选),返回的为数组   

       注意:

                  如果要获取的请求数据不存在,不会报错,返回为null.
                  Request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service()方法。

Respone对象学习:

作用:

           用来响应数据到浏览器的一个对象

使用:

                  设置响应头
                         setHeader(String name,  String value);                //在响应头中添加响应信息,但是同键会覆盖
                         addHeader(String name, String value);               //在响应头中添加响应信息,但是不会覆盖。
                  设置响应状态
                         sendError(int num, String msg);                          //自定义响应状态码。
                  设置响应实体
                         resp.getWrite().write(String str);                          //响应具体的数据给浏览器
                  设置响应编码格式
                         resp.setContentType("text/html;charset=utf-8");

      总结:

                  service请求处理代码流程:
                         设置响应编码格式
                         获取请求数据
                         处理请求数据
                                数据库操作(MVC思想)
                         响应处理结果

请求乱码问题解决:

      A:使用String进行数据重新编码
            uname=new String(uname.getBytes("iso8859-1"),"utf-8");
      B:使用公共配置
            get方式:
                     在tomcat的目录下的conf目录中修改server.xml文件:在Connector标签中增加属性useBodyEncodingForURI="true"
                     req.setCharacterEncoding("utf-8");
            post方式:
                     req.setCharacterEncoding("utf-8");

Servlet流程总结:

           浏览器发起请求到服务器(请求)
           服务器接受浏览器的请求,进行解析,创建request对象存储请求数据
           服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法
           servlet的方法执行进行请求处理
                         //设置请求编码格式
                         //设置响应编码格式
                         //获取请求信息
                         //处理请求信息
                                      //创建业务层对象
                                      //调用业务层对象的方法
                         //响应处理结果

请求转发学习:

          作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。
          使用:     req.getRequestDispatcher("要转发的地址").forward(req, resp);
                         地址:相对路径,直接书写servlet的别名即可。
          特点:一次请求,浏览器地址栏信息不改变。
          注意:请求转发后直接return结束即可。

Servlet请求转发路径:

           /表示项目根目录
           req.getRequestDispatcher("/资源路径").forward(req,resp);

request作用域:

             解决了一次请求内的servlet的数据共享问题

重定向:

          解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。
          使用:resp.sendRedirect(String uri);
          特点:两次请求,两个request对象。浏览器地址栏信息改变。
          时机:如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。
                    如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。

Servlet重定向路径总结:

          相对路径:从当前请求的路径查找资源的路径
                  相对路径如果servlet的别名中包含目录,会造成重定向资源查找失败。
          绝对路径:第一个/表示服务器根目录
                  /虚拟项目名/资源路径

Cookie学习:

作用:

            解决了发送的不同请求的数据共享问题

使用:

           Cookie的创建和存储
                 //创建Cookie对象
                          Cookie c = new Cookie(String name, String value);
                //设置cookie(可选)
                         //设置有效期
                               c.setMaxAge(int seconds);
                         //设置有效路径
                               c.setPath(String uri)
                        //响应Cookie信息给客户端
                               resp.addCookie(c);
               Cookie的获取
                       //获取Cookie信息数组
                              Cookie[] cks = req.getCookies();
                      //遍历数组获取Cookie信息,使用for循环遍历即可。
           注意:一个Cookie对象存储一条数据。多条数据可以多创建几个Cookie对象进行存储。

特点:

            浏览器端的数据存储技术。
            存储的数据声明在服务器端。
            临时存储:存储在浏览器的运行内存中,浏览器关闭即失效。
            定时存储:设置了Cookie的有效期,存储在客户端的硬盘中,在有效期内符合路径要求的请求都会附带该信息。
            默认cookie信息存储好之后,每次请求都会附带,除非设置有效路径

session学习:

作用:

            解决一个用户的不同请求处理的数据共享问题

原理:

            用户第一次访问服务器,服务器会创建一个session对象给此用户,并将该session对象的JSESSIONID使用Cookie技术存储到浏览器中,保证用户的其他请求获取到同一个session对象,也保证了不同请求能够获取到共享的数据。

特点:

            存储在服务器端,服务器进行创建,依赖Cookie技术,一次会话,默认存储时间是30分钟。

 使用:

             创建session对象/获取session对象
                     HttpSession  hs = req.getSession();
                     如果请求中拥有session的标识即JSESSIONID,则返回其对应的session对象
                     如果请求中没有session的表示JSESSIONID,则创建新的session对象,并将其JSESSIONID作为cookie数据存储在浏览器内存中。
                     如果 session对象失效了,也会重新创建一个session对象,并将其JSESSIONID存储在浏览器内存中。
             设置session存储时间
                    hs.setMaxInactiveInterval(int seconds);
                              注意:在指定的时间内session对象没有被使用则销毁,如果使用了则重新计时。
             设置session强制失效
                    hs.invalidate();
             存储和获取数据
                   存储:hs.setAttribute(String name, Object value);
                   获取:hs.getAttribute(String name) 返回的数据类型为Object
                   注意:存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行。
              使用时机:一般用户在登录web项目是会将用户的个人信息存储到Sesion中,供该用户的其他请求使用。
              总结:session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session对象不失效的情况下。
                          用户的任意请求在处理时都能获取到同一个session对象。
              作用域:一次会话,在JSESSIONID和session对象不失效的情况下为整个项目内。

session失效处理:

             将用户请求中的JSESSIONID和后台获取的session对象的JSESSIONID进行比对,如果一致则session没有失效,如果不一致则证明session失效了。重定向到登录页面,让用户重新登录。
注意:JSESSIONID存储在了Cookie的临时存储空间中,浏览器关闭即失效。

ServletContext对象学习:

作用:

            解决不同的用户使用相同的数据问题;

特点:

           服务器创建,用户共享;

作用域:

           整个项目内

生命周期:

          服务器启动到服务器关闭

使用:

           获取ServletContext对象
                   //第一种方式:
                            ServletContext sc = this.getServletContext();
                   //第二种方式:
                            ServletContext sc2 = this.getServletConfig().getServletContext();
                   //第三种方式:
                           ServletContext sc3 = req.getSession().getServletContext();
           使用ServletContext对象完成数据共享。
                   //数据存储
                           sc.setAttribute(String name, Object value);
                  //数据获取
                          sc.getAttribute("str")  返回的是Object类型
                  注意:不同的用户可以给ServletContext对象进行数据的存取。获取的数据不存在返回null
            获取项目中web.xml文件中的全局配置数据
                  sc.getInitParamter(String name); 根据键的名字返回web.xml中配置的全局数据的值,返回String类型。数据不存在返回null
                  sc.getInitParamterNames(); 返回键名的枚举
                  配置方式:注意一组<context-param>标签只能存储一组键值对数据,多组数据可以声明多个<context-param>进行存储。
            获取项目web下的资源的绝对路径。
                   String path = sc.getRealPath(String path);
                    获取的路径为项目根目录,path参数为项目根目录中的路径
            获取web下的资源流对象
                   InputStream is = sc.getResourceAsStream(String path);
                   注意:此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。

ServletConfig对象学习:

作用:

           解决获取在web.xml中给每个servlet单独配置的数据问题

 使用:

          获取ServletConfig对象

                 ServletConfig sc = this.getServletConfig();

         使用web.xml中的配置数据

                sc.getInitParmeter(String  name); 

Web.xml文件使用总结:

作用:

          存储项目相关的配置信息,保护Servlet。解耦一些数据对程序的依赖。

使用位置:

          每个Web项目中
          Tomcat服务器中(在服务器conf目录中)

 区别:

           Web项目下的web.xml文件为局部配置,针对本项目的位置。
           Tomcat下的web.xml文件为全局配置,配置公共信息。

内容(核心组件):

           全局上下文配置(全局配置参数)
           Servlet配置、过滤器配置、监听器配置 

加载顺序:

           Web容器会按ServletContext ->context-param ->listener ->filter ->servlet 这个顺序加载组件,这些元素可配置在web.xml文件中的任意位置。

加载时机:

          服务器启动时。 

Servler.xml文件

核心组件

            <Server>
                   <Service>
                          <Connector />
                          <Connector />
                           <Engine>
                                    <Host>
                                           <Connector />
                                    <Host>
                           <Engine>
                   <Service>
            <Server>


热部署:

         <Context   path =""   reloadable="true"   docBase = "项目路径"  />

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐