监听器
在JavaWeb中,监听器是一种组件,能够监听项目的启动和停止,用户会话的创建和销毁,以及各种组件的添加、更新和删除。当Java对象发生上面的事件时, 将会通知监听器, 监听器将会调用特定的方法来处理该事件。
监听器应用场景:启动网站后进行初始化、检测用户的数量、清除过期session等。
SSM框架中监听器的配置
在web.xml中加入如下配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
过滤器
过滤器是 Servlet 的高级特性之一,具有拦截和过滤功能,能够对网站中的各种内容进行过滤(页面、Servlet、图片、文件),可以在网站内容请求和响应时进行一些操作,完成一些通用的功能。 过滤器是JavaWeb三大组件之一,与Servlet相似,但是Servlet是用来处理请求,而过滤器是用来过滤请求的。
Web 中过滤器的作用:
- 在请求资源之前设置请求的编码
- 进行登录校验
- 进行请求参数的内容的过滤
- 数据压缩 / 数据加密 / 数据格式的转换
- 设置浏览器相关的数据
过滤器链:在项目中可以创建多个过滤器,网站内容可能会经过多个过滤器,多个过滤器就形成了过滤器链。
一个资源可以配置多个过滤器进行拦截, 一个过滤器也可以配置拦截多个资源。
过滤器的执行顺序:按照web.xml中filter-mapping标签的书写顺序执行(从上往下执行)。
解决中文乱码的过滤器的配置
在web.xml中加入如下配置:
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
页面跳转的两种方式
在使用servlet/jsp的时候,实现页面跳转有两种方式:转发和重定向。
转发
在转发方式(Forward)中,客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。
Web应用程序大多会有一个控制器。由控制器来控制请求应该转发给哪个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式。
转发方法的特点:
- 转发方法只能将请求转发给同一个Web应用中的组件;
- 调用转发方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变;
- 转发方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。浏览器只发出了一个请求和收到了一次回复。
- 转发方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程。
重定向
间接转发方式,有时也叫重定向,它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向访问指定的URL。调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL。
重定向方法的特点:
- 重定向方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
- 调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL。
- 重定向方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求。可见,浏览器一共发出了两个请求和收到了两次回复。
- 重定向方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个Web应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用转发方法。不同Web应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect方法。
参考文章
https://blog.youkuaiyun.com/c_royi/article/details/80563131
https://blog.youkuaiyun.com/liubin5620/article/details/79922692