. Servlet创建一个响应,并返回到Web容器,Web容器返回响应到客户端

来源:互联网 发布:tensorflow可视化界面 编辑:程序博客网 时间:2024/05/16 14:40

Servlet是一种独立于操作系统平台和网络传输协议的服务器端的Java应用程序。 
相同点: 
1. 不是独立的应用程序,没有main()方法。 
2. 不是由用户调用,由另一个应用程序(容器)调用。 
3. 都有一个生存周期, 包含init()和destory()方法。 
不同点: 
1. Applet运行于客户端,有丰富的图形化界面;Servlet运行于服务器端,没有图形界面。 
2. Applet为了实现浏览器与客户的强大交互;Servlet用于扩展服务器端的功能,实现复杂的业务逻辑。

Servlet工作流程

这里写图片描述 
1. 客户端将请求发送到服务器 
2. 服务器上的Web容器实例化(装入)Servlet,并为Servlet进程创建线程。 
(Servlet在出现第一个请求时装入,在服务器关闭之前不会卸载;Servlet也可配置为在Web应用程序启动时自动装载) 
3. Web容器将请求信息发送到Servlet 
4. Servlet创建一个响应,并返回到Web容器。 
(Servlet使用客户端中请求信息及服务器可访问资源等来动态构造响应) 
5. Web容器返回响应到客户端

Servlet装入和初始化:

Servlet调用init()方法执行初始化,init()方法只在Servlet创建时被调用,init()有二个版本:一个没有参数,一个以ServletConfig对象为参数。

调用Servlet

每个Servlet都对应一个URL地址,可以作为显式URL引用调用,或嵌入在HTML中并从Web应用程序返回。 
对于每个Web应用,都可以存在一个配置文件web.xml,存放关于Servlet的名称、对应的Java类文件、URL地址映射等信息。自JavaEE6后,JavaEE规范推荐使用注解来配置Web组件。

处理请求

Web容器收到请求后,Web容器会产生一个新的线程来调用Servlet的service(),service()方法检查HTTP请求类型(GET、POST、PUT、DELETE等),然后相应调用doGet()、doPost()、doPut()、doDelete()等方法。 
GET请求类型与POST请求类型:GET请求方式传输所带参数附加在URL后直接传给服务器,并可从服务器端的QUERY STRING环境变量中读取;POST请求方式传输所带参数被打包在数据包中传送到服务器。

多个请求

一个Servlet同一时刻只有一个实例。 
当多个请求发送到同一个Servlet,服务器会为每个请求创建一个新线程来处理。

注解

@WebServlet(name=“ServletName”, urlPatterns={“/ServletURL”})

会话跟踪

URL重写

HttpSession对象

Servlet上下文-ServletContext

request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。

Servlet间协作-RequestDispatcher

HttpServletResponse.sendRedirect()与RequestDispatcher.forward()

操作本质上,RequestDispatcher.forward()是容器中控制权转向,在客户端浏览器的地址栏不会显示转向后地址;HttpServletResponse.sendRedirect()则是完全跳转,浏览器将得到跳转后地址,并重新发送请求连接。 
性能上,RequestDispatcher.forward()是在同一次请求处理过程中,HttpServletResponse.sendRedirect()是结束第一次请求,由浏览器重新发起一次请求。

拦截器-Filter

Filter拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。Filer可以改变一个请求(Request)或修改响应(Response)。在Servlet处理请求之前,与此Servlet关联的Filter首先执行,然后才是Servlet执行;如果一个Servlet有多个Filter,则根据配置的先后次序依次执行。

主要用途

  1. 访问特定资源(Web页、JSP页、Servlet)时身份验证
  2. 访问资源记录跟踪
  3. 访问资源转换

必须实现三个方法

  1. doFilter(ServletRequest,ServletResponse,FilterChain)
  2. init(FilterConfig)
  3. destroy()

两种映射模式

  1. URL模式映射
  2. 默认映射

注解

@WebFilter(filterName=”FilterName” ,urlPatterns={“/ServletURL”})

配置文件

<filter><filter-name>FilterName</filtername><filter-class>FilterClass</filter-class></filter><filter-mapping><filter-name>FilterName</filtername><url-pattern>/*</url-pattern><!- 过滤目标 -><dispatcher>REQUEST</dispatcher> <!- 只有当request直接来自客户才生效 -><dispatcher>FORWARD</dispatcher><!- 只有当request被一个请求分发器使用forward()方法转发才生效 -><dispatcher>INCLUDE</dispatcher><!- 只有当request被一个请求分发器使用include()方法转发才生效 -><dispatcher>EXCEPTION</dispatcher><!- 只有当request被一个请求分发器使用“错误信息页”机制方法才生效 -></filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

监听器-Listener

Listener用来主动监听Web容器事件。所谓Web容器事件指Web应用上下文创建销毁、会话对象创建销毁以及会话属性信息增删改等。

Servlet规范中支持的Listener接口和Event类

  1. ServletContextListener(ServletContextEvent)
  2. ServletContextAttributeListener(ServletContextAttributeEvent)
  3. HttpSessionListener(HttpSessionEvent)
  4. HttpSessionActivationListener(HttpSessionEvent)
  5. HttpSessionAttributeListener(HttpSessionBindingEvent)
  6. HttpSessionBindingListener(HttpSessionBindingEvent)
  7. ServletRequestListener(ServletRequestEvent)
  8. ServletRequestAttributeListener(ServletRequestAttributeEvent)
  9. javax.servlet.AsyncListener(asyncEvent)

除了HttpSessionBindingListener接口和AsyncListener接口外,其他所有关于Listener的配置信息都存储在Web应用的部置文件中。