zoukankan      html  css  js  c++  java
  • Servlet

    一、简介

      1、Servlet:
        狭义上的Servlet:仅仅指的是这个servlet接口
        广义的Servlet:不仅包含该Servlet接口,还包含该Servlet的接口的子类!
      2、Servlet是JavaWeb部分的三大组件:
        JavaWeb部分三大组件:Servlet、Filter、Listener,这三个组件都需要交给web服务器管理!

      3、Servlet的主要作用
              接收请求
              处理请求
              完成响应

      4、创建Servlet的三种方法:      

          1>自定义一个Servlet:
            1).自定义一个类,实现Servlet接口,并实现接口中的方法
            2).将自定义的servlet类在web.xml文件中配置一下!

     1     <!-- 使用servlet标签配置我们自定义的servlet -->
     2     <servlet>
     3     <!-- 在servlet-name该标签中,我们可以配置一个servletName,
     4     建议和servlet类的简类名一致 ,该servletName是我们自己使用-->
     5     <servlet-name>HelloServlet</servlet-name>
     6     <!-- 使用servlet-class标签配置自定义servlet类的全类名,
     7     这个全类名是给服务器使用的,服务器会使用这个全类名创建该类所对应的servlet对象
     8     -->
     9     <servlet-class>com.neuedu.servlet.HelloServlet</servlet-class>
    10     </servlet>
    1     <!-- 使用servlet-mapping标签配置servlet映射 -->
    2     <servlet-mapping>
    3     <servlet-name>HelloServlet</servlet-name>
    4     <!-- 该url-pattern 是用来请求映射url地址的,也就说
    5     该标签中的内容是给浏览器访问使用的!
    6     -->
    7     <url-pattern>/Hello</url-pattern>
    8     </servlet-mapping>

          2>新建类,继承HttpServlet,重写doGet()和doPost()方法

           在web.xml文件中手动配置servlet信息(同第一种方法配置相同)

          3>直接在项目的某一个包下右键—>New—>Servlet
              这种创建方式不用配置web.xml文件,系统会进行自动配置

      5、新建Servlet没有service()方法原理

        目前我们常用的新建Servlet的方法就是直接右键,创建Servlet,这种方法创建的Servlet没有有service()方法,而是doGet()和doPost()方法

        这是由于这种方法新建的Servlet,继承HttpServlet,而HttpServlet继承了GenericServlet,

          GenericServlet类实现了Servlet, ServletConfig接口,因此HttpServlet中继承了父类的service()方法

        在HttpServlet类中,重写了service()方法,将ServletRequest,ServletResponse对象强制转换为

          HttpServletRequest,HttpServletResponse对象,并根据浏览器的请求方式,调用doGet()或doPost()方法

             

     Eclipse中查看Tomcat源代码的方法:

        选中某个接口或类,右键—>Open  Declaration—>Attach  Source—>将下载好的tomcat源代码压缩包apache-tomcat-7.0.67-src.zip添加到eclipse中

        查看源代码时,直接选中按F3即可

    二、Servlet生命周期

    1. Servlet生命周期:就是Servlet对象由产生到销毁的过程

        涉及到的方法:

          1)    Servlet构造器:在第一次访问该servlet的时候调用,且只会被调用一次,说明该Servlet是单例的,注意:不要在Servlet中定义非共享的变量。

          2)    init()方法:在第一次访问该servlet的时候调用【在构造器被调用之后紧接着被调用】,且该方法只会被调用一次

          3)    service()方法:每次访问该Servlet都会调用一次service()方法,因此业务逻辑代码,主要写在service()方法中

          4)    destroy()方法:该方法会在项目被卸载(服务器关闭)的时候被调用,且只会被调用一次

      2、普通Servlet生命周期:请求的时候才将Servlet对应的字节码文件加载到虚拟机中

      3、默认<load-on-startup></load-on-startup>值为负,即普通Servlet

      4、设置<load-on-startup>1</load-on-startup>值为正(优先级0,1,2……),当部署的时候就会调用init()方法

    三、相关接口

      1、ServletConfig

        1)    代表:代表当前Servlet的配置信息,每个Servlet对应唯一的一个ServletConfig对象

    1 <servlet>
    2       <servlet-name>MyServlet1</servlet-name>
    3       <servlet-class>com.neuedu.firstservlet.web.MyServlet1</servlet-class>
    4       <init-param>
    5           <param-name>username</param-name>
    6           <param-value>张三</param-value>
    7       </init-param>
    8 </servlet>

        2)    获取:由Tomcat服务器创建,通过参数的形式传递给init()方法

        3)    功能:

            获取当前servlet的名称【getServletName()】

            获取当前servlet的初始化参数【getInitParameter("username")】

            获取Servletcontext【getServletContext()】

      2、ServletContext:

        1)    代表:ServletContext代表的是当前web应用!

        2)    获取 :通过ServletConfig对象获取[getServletContext()]

        3)    功能:

             获取整个web应用的初始化参数【getServletContext()】

            可以做为javaweb部分的四大域对象之一使用

            可以获取当前项目的名称【getContextPath()】

            可以获取文件的绝对路径【getRealPath("/index.html")】

        路径:

                       虚拟路径:http://localhost:8080/servlet01/BServlet

                       真实路径:是指的在本地磁盘上的具体路径

      3、HttpServletRequest

        1)代表:代表浏览器向服务器发送的请求报文
        2)   获取:由tomcat服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!
        3) 功能:
            getParameter()获取请求参数
            getContextPath():获取当前项目名
            setAttribute/getAttribute:本身就是一个域对象!
            request.getRequestDispatcher("1.html").forward(request,response);可以实现转发功能

      4、HttpServletResponse 

        1)代表:服务器响应给浏览器的响应报文
        2)获取:由服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!
        3)功能:
            response.getWriter().println("<h3>helloworld!</h3>");可以返回给浏览器一个页面或者一个页面片段!
            response.sendRedirect("/servlet1/1.html"); :可以做请求的重定向

     四、服务器转发与重定向

      1、TomcatServlet/JSP容器)服务器转发

          RequestDispatcher请求分发器接口

            RequestDispatcher.forward(HttpServletRequest req,HttpServletResponse  resp);

            RequestDispatcher requestDispatcher=request.getRequestDispatcher(“/second”);

            requestDispatcher.forward(request,response);

        是同一个请求,继续延长原有的请求,只能转发本应用程序内的资源,转发发生在服务器端

        服务器在Servlet间的转发既不属于get请求,也不属于post请求,只是由转发到的Servlet的doGet()方法处理

      2、重定向

        由服务器响应对象告诉浏览器去请求(重定向)另一资源,对原有客户端请求来说,是浏览器向服务器发送了另一个请求,如果请求是外部资源,将由响应的服务器应用处理,是两个不同的请求(request)

        注意作用域范围:request在请求范围内有效,ServletContext在整个应用内有效,因此重定向无法从源request内getAttribute

          response.sendRedirect(request.getContextPath()+”index.jsp”);

      3、转发与重定向对比

     

     

    浏览器请求次数

    地址栏是否发生变化

    发生在服务器端/浏览器端

    浏览器能否感知

     

    转发

    1

    服务器端

    Request

    重定向

    2

    浏览器端

    Response

  • 相关阅读:
    编写安全代码:小心使用浮点数
    编写安全代码:有符号数和无符号数的移位区别右移
    封装了 C# 矩阵计算类CMarix
    几种位操作办法
    百度地图 鼠标绘制图形判 重叠 相交 demo
    eclipse 鼠标变成十字
    五(一)、spring 声明式事务注解配置
    eclipse创建Dynamic Web Project时忘记选中生成web.xml
    tomcat 请求地址去掉项目名称方法
    mybatis java类型和 jdbc类型 对应关系
  • 原文地址:https://www.cnblogs.com/java-zmj/p/7834289.html
Copyright © 2011-2022 走看看