javaweb----过滤器和监听器与Servlet3.0注解

Filter过滤器

​ Filter即为过滤器,用于Servlet之外对request或者对response进行修改。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。在一个web应用中可以编写多个Filter,这些Filter组合起来称为一个Filter链。

​ 若是一个过滤器链:先配置先执行(请求时的执行顺序);响应时:以相反的顺序执行。

过滤器的实现

​ 通过继承Filter的接口实现一个过滤器,Filter的实现只需要两步:

​ 1、编写java类实现Filter接口,并实现其doFilter方法

​ 2、在web.xml文件中对编写的Filter类进行注册,并设置它所能拦截的资源。

	  <filter>
	    <filter-name>Filter01</filter-name>  <!-- 给服务器看的名称,与filter-mapping中的filter-name保持一致,不能有重复的 -->
	    <filter-class>com.shsxt.filter.Filter01</filter-class>  <!-- 过滤器类的路径  -->
	  </filter>
	  <filter-mapping>
	    <filter-name>Filter01</filter-name> <!-- 给服务器看的名称,与filter中的filter-name保持一致->
	    <url-pattern>/s01</url-pattern>  <!-- 要拦截的资源路径 -->
	    <servlet-name>Servlet01</servlet-name> <!-- 要拦截的servlet的servlet-name的值  -->
	  </filter-mapping>

注意:在放行资源之前处理request请求,响应会在放行之后执行。

过滤器链:如果有多个过滤器,拦截顺序为web.xml中的配置顺序,谁先配置谁先执行,放行是如果有下一个顾虑器,会自动放行到下一个过滤器,如果没有则放行到指定的资源。

字符集过滤器

​ 处理前台传递过来的中文数据给后台,出现乱码问题,常见的乱码问题是,任何版本的post请求都是乱码,可以用request.setCharacterEncoding(“UTF-8”);处理,对于get请求,tomcat8及以上不会出现乱码,因此不用处理,但是如果是tomcat7及以下会出现乱码,上面那种方法不顶用,可以使用new String(request.getParameter(name).getBytes(“ISO-8859-1”),“UTF-8”);但是只有一个字段一个字段处理,因此我们可以重写getparameter()方法,让乱码问题在顾虑器就被解决。

​ 步骤:
​ 1)、定义内部类,继承HhttpServletRequestWapper包装类

​ 2)、重写HttpServletRequestWrapper的父类ServletRequestWrapper中的getParameter()方法

注:自定义的MyWapper类继承了HttpServletRequest接口,所以MyWapper类的本质就是request。

class MyWapper extends HttpServletRequestWrapper {	
		// 定义HttpServletRequest对象,用来提升带参构造器中的request
		private HttpServletRequest request;
		public MyWapper(HttpServletRequest request) {
			super(request);
			this.request = request; // 提升作用域
		}
		/**
		 * 处理乱码
		 */
		@Override
		public String getParameter(String name) {	
			// 得到请求的参数值
			String value = request.getParameter(name);
			try {
				// 判断参数不为空,则做乱码处理
				if (value != null && !"".equals(value)) {
					// 处理乱码问题
					value = new String(value.getBytes("ISO-8859-1"),"UTF-8");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return value;
		}	
	}
非法访问拦截

​ 默认拦截所有资源

什么情况需要拦截:

  • 用户访问一些需要登录成功之后才能访问的资源

什么时候才放行:

  • 1、指定页面,放行(无需登录即可访问的页面,比如登录页面、注册页面等)
  • 2、指定资源,放行(静态资源,放行;存放在statics目录下的资源放行)
  • 3、指定操作,放行(无需用户登录即可执行的操作,放行;比如登录曹组、注册操作等)
  • 4、登录状态,放行(session作用域中是否存在指定对象)

如果以上情况都不满足,则拦截跳转到登录页面

监听器

​ 监听器有三类 8 种:

​ ⑴监听生命周期:实现接口 ServletRequestListener、HttpSessionListener 、 ServletContextListener

​ ⑵监听值的变化:实现接口ServletRequestAttributeListener、HttpSessionAttributeListener、ServletContextAttributeListener

​ ⑶针对 session 中的对象:监听 session 中的 java 对象(javaBean) 是 javaBean 直接实现监听器 的接口。

监听的具体实现

​ 1、创建一个监听器,需要实现某种接口,根据需求选取 HttpSessionListener
​ 2、在 web.xml 中配置该监听器创建一个类,并实现 HttpSessionListener 接口,用来检测 Session 的创建和销毁。 在类中定义一个成员变量用来存储当前的 session 个数。

<listener>
	<listener-class>com.shsxt.web.OnLineListen</listener-class>
</listener>

Servlet3.0注解

@WebServlet

配置Servlet访问路径

//四中写法均可
@WebServlet(name="Servlet01",value="/s01")
@WebServlet(name="Servlet01",value={"s01","s001"})
@WebServlet(name="Servlet01",urlPatterns="/s01")
@WebServlet(name="Servlet01",urlPatterns={"s01","s001"})
@WebFilter

配置Filter过滤器

@webFilter(filterName="TestFilter",urlPatterns="/*")

使用注解时:过滤器链按照类名的字母排序(大部分情况)

@MultipartConfig

使用注解@MultipartConfig 将一个 Servlet 标识为支持文件上传。

Servlet3.0 将 multipart/form-data 的 POST 请求封装成 Part,通过 Part 对上传的文件进行操作。

  • 1、普通表单项取值

    request.getParameter(name)

  • 2、文件域

    request.getPart(name);

  • 注:如果前台表单是文件上传表单,一定你要加上注解@MultipartConfig

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值