Servlet简介:
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是用Java编写的运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间,层主要功能在于交互式地浏览和修改数据,生成动态Web内容。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。
2、把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet
java实现类
package test;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyServletTest implements Servlet{
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
}
}
在web.xml中配置servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="true" version="3.1">
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>自定义servlet名称</servlet-name>
<--对应的class文件-->
<servlet-class>test.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet名称</servlet-name> <--名称一定要和上面定义的servlet名称相同-->
<--符合该格式的所有资源请求都会由指定的servlet处理-->
<url-pattern>*.do</url-pattern> <--也可以定义到某具体请求 /../-->
</servlet-mapping>
</web-app>
Servlet过滤器的作用:
- 查询请求并做出相应的动作
- 阻塞请求-响应时,使其不能下一步行动发
- 修改请求的头部和数据,用户可以提供自定义的请求
- 修改相应的头部和数据,用户可以通过定制的相应版本实现
- 与外部资源进行交互
Servlet对请求的过滤过程:
- Servlet创建一个过滤器实例
- 过滤器实例调用init方法,读取过滤器的初始化参数
- 过滤器实例调用doFilter方法,根据初始化参数的值判断该请求是否合法,如果请求不合法,则阻塞该请求;如果请求合法,则调用chain.doFilter方法将该请求向后传递
Servlet对响应的过滤过程:
- 过滤器截获客户端的请求
- 重新封装ServletResponse,在封装后的ServletResponse中提供用户自定义的输出流
- 将请求向后续传递
- Web组件产生响应
- 从封装后的ServletResponse中获取用户自定义的输出流
- 将响应内容通过用户自定义的输出流写到缓冲流中
- 在缓冲流中修改响应的内容后清空缓冲流,输出响应内容
Servlet过滤器接口的构成:
- init(FilterConfig):Servlet 过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。 这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数
- doFilter(ServletRequest,ServletResponse,FilterChain):用于完成实际的过滤操作 当用户请求访问URL时,Serlet容器将先调用doFilter方法,FilterChain方法访问后续过滤器
- destroy():Servlet容器在取消过滤器实例前调用的方法,用来释放Servlet过滤器占用的资源
Servlet过滤器的创建步骤
1)建立一个实现Javax.servlet.Filter接口的类。 这个类需要三种方法,分别是doFilter、init、和destroy。 doFilter方法包含主要的过滤代码,在init方法中进行一些初始化的设置,在destroy清除过滤器占用的资源
2)实现init方法,读取过滤器的初始化函数、
3)实现doFilter方法完成对过滤器的响应。doFilter方法的第一个参数是ServletRequest对象。此对象给过滤器提供了对进入的信息的完全访问。第二个参数为ServletResponse,通常再简单的过滤器中忽略该参数。最后一个参数为FilterChain,如下一步所诉,此参数用来调用过滤器中下一个过滤器或者在到达过滤器末尾是时调用Servlet或JSP页
4) 调用FilterChain接口对象的doFilter方法,向后续的过滤器传递响应或请求。 Filter接口的doFilter方法把一个FilterChain对象作为它的一个参数。 在调用此对象的doFilter方法时,激活下一个相关的过滤器。
5)对相应的的Servlet和JSP页面注册过滤器。在部署描述符文件(Web.xml)中使用Filter和filter-mapping元素对需要过滤的资源进行配置