0
点赞
收藏
分享

微信扫一扫

Servlet与过滤器

进击的铁雾 2022-04-14 阅读 59
tomcat

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 

配置

<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>元素

<servlet>
    ……
<init-param>
<param-name>charSetContent</param-name>
<param-value>utf-8</param-value>
</init-param>  
</servlet>

读取

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服务组件

  • 过滤器可以统一地集中处理请求和响应

  • 使用过滤器技术实现对请求数据的过滤

  • @WebFilter("/*")代表路径以/开头的都过滤

  • @WebFilter("/")就是/路径

 过滤器的使用步骤

建立实现javax.servlet.Filter接口的类,实现过滤行为

在web.xml中配置过滤器

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()

初始化参数

配置

<filter>
<init-param>
    <param-name>Encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>

读取

init(FilterConfig fConfig)  {
    String encoding=fConfig.getInitParameter("Encoding");
}

新知识点

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

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

<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 条评论