Javaweb03-Servlet技术1(Servlet,ServletConfig,ServletContext)

2024-06-15 1011阅读

Servlet技术(Servlet,ServletConfig,ServletContext)

1.Servlet的概述

Servlet是运行在Web服务器端的Java应用程序,它使用Java语言编写。与Java程序的区别是,Servlet 对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器(Tomcat)的支持。

  • Servlet接口的方法(javax.servlet.Servlet)
    Servlet,ServletConfig,ServletContext --> GenericServlet
    --> HttpServlet(实现Http请求) --> 自定义Servlet
    
    方法声明功能描述
    void init(ServletConfig config)Servlet实例化后,Servlet容器调用该方法完成初始化工作
    void service (ServletRequest req,ServletResponse resp)负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。在service()方法中,可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息
    void destroy()负责释放Servlet对象占用的资源。当服务器关闭或者Servlet对象被移除时,Servlet对象会被销毁,容器会调用此方法
    ServletConfig getServletConfig()用于获取Servlet对象的配置信息,返回Servlet的ServletConfig对象
    String getServletInfo()返回一个字符串,其中包含关于Servlet的信息,例如,作者、版本和版权等信息
    • 继承HttpServlet的自定义Servlet
      @WebServlet("/TextServlet01")
      public class TextServlet01 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          }
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doGet(request, response);
          }
      }
      
      • Servlet的配置

        1.web.xml配置Servlet

        :用来定义Servlet的名字

        :用来定义Servlet类的位置,包括包名和类名

        :用来定义Servlet的映射路径,它有两个属性表示要映射的Servlet的名字,表示要映射的路径,要映射的路径前要加"/",表示相对于Tomcat的位置

            TextServlet01
            com.tyut.TextServlet01
        
        
            TextServlet01
            /servlet/TextServlet01
        
        

        2.@WebServlet配置Servlet

        @WebServlet 注解用于代替web.xml文件中的等标签,该注解将会在项目部署时被容器处理,容器将根据具体的属性配置将相应的类部署为Servlet。可以标注在任意一个继承HttpServlet的类上

        属性声明功能描述
        String name指定Servlet的name属性,等价于。如果没有显式指定,则该 Servlet的取值即为类的全限定名。
        String[] value该属性等价于urlPatterns属性。urlPatterns和value属性不能同时使用,同时存在是忽略value的值。
        String[] urlPatterns指定一组Servlet的URL匹配模式。等价于标签。
        InitParam[]指定一组Servlet初始化参数,等价于标签。
        @WebServlet(name = "TextServlet01", urlPatterns = {"/TextServlet01", "/textServlet01"})
        
        • Servlet的生命周期

          Javaweb03-Servlet技术1(Servlet,ServletConfig,ServletContext)

          当客户端向Servlet容器发出HTTP请求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,如果有,直接使用该Servlet对象;如果没有,就创建Servlet实例对象,然后通过调用init()方法完成Servlet的初始化。需要注意的是,在Servlet的整个生命周期内,它的init()方法只被调用一次。之后访问Servlet,每一个请求作为一个线程,Servlet对象不会再次创建
          
          /**
           * Servlet的生命周期
           */
          @WebServlet(name = "TextServlet02", urlPatterns = "/textServlet02")
          public class TextServlet02 extends GenericServlet {
              public void init(ServletConfig servletConfig) {
                  System.out.println("Servlet is called");
              }
              public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
                  System.out.println("hello Servlet!!!");
              }
              public void destroy() {
                  System.out.println("Servlet is destroyed");
              }
          }
          

          2.ServletConfig接口

          • ServletConfig基本概述(每个Servlet的配置信息)

            在Servlet运行期间,经常需要一些配置信息,可以在@WebServlet注解的属性中配置或者在web.xml中配置。

            当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet。

            • ServletConfig基本方法
              方法声明功能描述
              String getInitParameter(String name)根据初始化参数名返回对应的初始化参数值
              Enumeration getInitParameterNames()返回一个Enumeration对象,其中包含了所有的初始化参数名
              ServletContext getServletContext()返回一个代表当前Web应用的ServletContext对象
              String getServletName()返回Servlet的名字

              1.通过在每个Servlet中的@WebServlet注解的initParams属性中,通过@WebInitParam(name=“”,value=“”)注解设置Servlet的初始化参数

              2.通过ServletConfig方法调用每个Servlet的初始化参数

              /**
               * ServletConfig方法练习
               */
              @WebServlet(name = "ServletConfigText",urlPatterns = "/textServlet03",
                      initParams = {@WebInitParam(name = "encoding", value = "UTF-8"), @WebInitParam(name = "name", value = "tyut")})
              public class TextServlet03 extends HttpServlet {
                  @Override
                  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                      response.setContentType("text/html;charset=utf-8");
                      PrintWriter out = response.getWriter();
                      ServletConfig sc = getServletConfig();
                      //方法一:获取ServletConfig的内容
                      String name = sc.getInitParameter("name");
                      String encoding = sc.getInitParameter("encoding");
                      out.write("name=" + name +  " encoding=" + encoding + "
              "); //方法二:获取ServletConfig的内容 Enumeration initParameterNames = sc.getInitParameterNames(); while (initParameterNames.hasMoreElements()) { String param = initParameterNames.nextElement(); String initParameter = sc.getInitParameter(param); out.write(param + ":" + initParameter + "
              "); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }

              3.ServletContext接口

              • ServletContext基本概述

                当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用。ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。

                • 获取web应用初始化参数

                  1.通过再web.xml中配置web应用的初始化参数

                      
                          school
                          tyut
                      
                      
                          address
                          taiyuan
                      
                  

                  2.通过ServletContext方法实现对web应用程序初始化参数的调用

                  方法声明功能描述
                  String getInitParameter(String name)根据初始化参数名返回对应的初始化参数值
                  Enumeration getInitParameterNames()返回一个Enumeration对象,其中包含了所有的初始化参数名
                  @WebServlet("/TextServlet04")
                  public class TextServlet04 extends HttpServlet {
                      @Override
                      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                          response.setContentType("text/html;charset=utf-8");
                          PrintWriter out = response.getWriter();
                          ServletContext sc = getServletContext();
                          /* 1.获取web应用程序初始化参数 */
                          //方法一:
                          String school = sc.getInitParameter("school");
                          String address = sc.getInitParameter("address");
                          out.write("school=" + school + "
                  " + "address=" + address + "
                  "); //方法二: Enumeration names = sc.getInitParameterNames(); while (names.hasMoreElements()) { String s = names.nextElement(); out.write(s + "=" + sc.getInitParameter(s) +"
                  "); } }
                  • 实现多个Servlet数据共享(域对象)

                    一个Web应用中的所有Servlet共享同一个ServletContext对象,ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。

                    方法声明功能描述
                    Enumeration getAttributeNames()获取域对象名字的Enumeration对象
                    Object getAttribute(String name)根据域对象的名字获取域对象的值
                    void removeAttribute(String name)根据域对象的名字删除域对象
                    void setAttribute(String name, Object value)添加域对象
                    @WebServlet("/TextServlet04")
                    public class TextServlet04 extends HttpServlet {
                        @Override
                        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                            /* 2.实现Servlet之间的数据共享 */
                            List cart = new ArrayList();
                            cart.add("apple");
                            cart.add("orange");
                            sc.setAttribute("cart", cart);
                            sc.setAttribute("food", "beef");
                        }
                    }
                    @WebServlet("/TextServlet05")
                    public class TextServlet05 extends HttpServlet {
                        @Override
                        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                            response.setContentType("text/html;charset=utf-8");
                            PrintWriter out = response.getWriter();
                            ServletContext sc = getServletContext();
                            List cart = (List) sc.getAttribute("cart");
                            System.out.println(cart);
                            sc.removeAttribute("food");
                            String food = (String) sc.getAttribute("food");
                            System.out.println(food);
                        }
                    }
                    
                    • 读取web应用下的资源文件

                      ServletContext接口定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于Web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径

                      方法说明功能描述
                      Set getResourcePaths(String path)返回一个Set集合,集合中包含资源目录中子目录和文件的路径名称。参数path必须以正斜线(/)开始,指定匹配资源的部分路径
                      String getRealPath(String path)返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线(/)开始,“/”表示当前Web应用的根目录,如果Servlet容器不能将虚拟路径转换为文件系统的真实路径,则返回null
                      URL getResource(String path)返回映射到某个资源文件的URL对象。参数path必须以正斜线(/)开始,“/”表示当前Web应用的根目录
                      InputStream getResourceAsStream(String path)返回映射到某个资源文件的InputStream输入流对象。参数path传递规则和getResource()方法完全一致
                      /**
                       * ServletContext实现下载web应用下的资源文件
                       */
                      @WebServlet("/TextServlet06")
                      public class TextServlet06 extends HttpServlet {
                          @Override
                          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                              response.setContentType("text/html;charset=utf-8");
                              PrintWriter out = response.getWriter();
                              //获取资源的绝对路径
                              ServletContext sc = getServletContext();
                              String path = sc.getRealPath("/WEB-INF/tyut.properties");
                              System.out.println(path);
                              //获得文件的流对象
                              InputStream in = sc.getResourceAsStream("/WEB-INF/tyut.properties");
                              Properties pros = new Properties();
                              pros.load(in);
                              System.out.println(pros.getProperty("name"));
                              System.out.println(pros.getProperty("hobby"));
                          }
                      }
                      
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]