Servlet与过滤器

2023-05-04 19:21:42 浏览数 (2)

Servlet与过滤器

Servlet

Server Applet,是一种服务器端的Java应用程序 只有当一个服务器端的程序使用了Servlet API的时候,这个服务端的程序才能称之为Servlet

jsp从莫种意义上来说也是一个servlet

创建Servlet

继承HttpServlet类

Servlet中主要方法以及对象

  1. init():Servlet的初始化方法,仅仅会执行一次
  2. service():处理请求和生成响应
  3. destroy():在服务器停止并且程序中的Servlet对象不再使用的时候调用,只执行一次
ServletRequest

封装客户的请求信息 作用相当于JSP内置对象request

ServletResponse

创建响应信息,将处理结果返回给客户端 作用相当于JSP内置对象response

ServletConfig

包含了Servlet的初始化参数信息

Servlet生命周期

生命周期

谁来做

何时做

实例化

Servlet 容器

当Servlet容器启动或者容器检测到客户端请求时

初始化

Servlet 容器

实例化后,容器调用Servlet的init()初始化对象

处理请求

Servlet 容器

得到客户端请求并做出处理时

销毁

Servlet 容器

当程序中的Servlet对象不再使用的时候, 或者Web服务器停止运行的时候

部署运行Servlet

  1. 修改web.xml(部署描述文件)
  2. 添加<servlet>:把Servlet内部名映射到一个Servlet类名
  3. 添加<servlet-mapping>:把用户访问的URL映射到Servlet的内部名 <servlet-mapping>与<servlet>中的<servlet-name>必须一致
  4. 通过URL访问Servlet
配置
代码语言:javascript复制
<servlet>
    <servlet-name>myServlet3</servlet-name>
    <servlet-class>demo.web.servlet.MyServlet3</servlet-class>
</servlet>
​
Servlet名称唯一
Servlet类所在路径
​
<servlet-mapping>
    <servlet-name>myServlet3</servlet-name>
    <url-pattern>/myServlet3</url-pattern>
</servlet-mapping>
​
与<servlet>的<servlet-name>设置相同
访问Servlet的URL
初始化参数设置
配置<init-param>元素
代码语言:javascript复制
<servlet>
    ……
<init-param>
<param-name>charSetContent</param-name>
<param-value>utf-8</param-value>
</init-param>  
</servlet>
​
读取
代码语言:javascript复制
public void init(ServletConfig config) throws ServletException {
    String initParam=config.getInitParameter("charSetContent");
    System.out.println(initParam);
}

相关对象方法

HttpServletRequest

getParameter() getRequestDispatcher()

HttpServletResponse

sendRedirect()

HttpSession

request.getSession()

过滤器

简述以及作用
  • 是向Web应用程序的请求和响应添加功能的Web服务组件
  • 过滤器可以统一地集中处理请求和响应
  • 使用过滤器技术实现对请求数据的过滤
过滤器的使用步骤

建立实现javax.servlet.Filter接口的类,实现过滤行为 在web.xml中配置过滤器

代码语言:javascript复制
doFilter(...)  {
//过滤请求
chain.doFilter(request, response); //调用下一个过滤器或Web资源
//过滤响应
}
​
​
<filter>
    <filter-name>过滤器名</filter-name>
    <filter-class>过滤器的完全限定名</filter-class>
</filter>
<filter-mapping>
    <filter-name>过滤器名</filter-name>
    <url-pattern>过滤器映射的Web资源</url-pattern>
</filter-mapping>
​
过滤器的生命周期
  1. 实例化
  2. 初始化:init()
  3. 过滤:doFilter()
  4. 销毁:destroy()
初始化参数
配置
代码语言:javascript复制
<filter>
<init-param>
    <param-name>Encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>
读取
代码语言:javascript复制
init(FilterConfig fConfig)  {
    String encoding=fConfig.getInitParameter("Encoding");
}
新知识点

在servlet-2.3中,Filter会过滤一切请求,包括服务器内部使用forward转发请求和<%@ includefile="/index.jsp"%>的情况。 到了servlet-2.4中Filter默认下只拦截外部提交的请求

在,想过滤其他请求就要这样写

代码语言:javascript复制
<filter>
<filter-name>TestFilter</filtername>
<filter-class>anni.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filtername>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>EXCEPTION</dispatcher>
</filter-mapping>

如果是注解就要这样写

@WebFilter(urlPatterns = {"/WEB-INF/*"},dispatcherTypes={DispatcherType.ASYNC,DispatcherType.ERROR,DispatcherType.FORWARD,DispatcherType.INCLUDE,DispatcherType.REQUEST,} )servlet2.3还是2.4大概以tomcat8.5为界限

0 人点赞