SpringMVC -- 拦截器技术1 (6)

来源:互联网 发布:d3.v4.min.js 编辑:程序博客网 时间:2024/06/05 02:21

直接上代码,不逼逼了...

显示Demo结构图.....



web.xml

不知道是不是我那个过滤器配置的不对,还是什么问题,浏览器总是显示中文乱码...靠...

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    <servlet>  <servlet-name>dispatcherServlet</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>  <param-name>contextConfigLocation</param-name>  <param-value>/WEB-INF/configs/dispatcher-servlet.xml</param-value>  </init-param>  <load-on-startup>1</load-on-startup>  </servlet>    <servlet-mapping>  <servlet-name>dispatcherServlet</servlet-name>  <url-pattern>/</url-pattern>  </servlet-mapping>    <!-- 配置过滤器,解决中文乱码问题 -->  <filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf8</param-value></init-param>  </filter>  <filter-mapping>  <filter-name>encoding</filter-name>  <url-pattern>*</url-pattern>  </filter-mapping>      <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 自动扫面包 --><context:component-scan base-package="com.springmvc.handlers"></context:component-scan><!-- 视图配置 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean><!-- 注册拦截器 --><mvc:interceptors><mvc:interceptor><mvc:mapping path="/testModelAndView"/><bean class="com.springmvc.interceptor.TestInterceptor"></bean></mvc:interceptor></mvc:interceptors></beans>

Main.java

package com.springmvc.handlers;import java.util.Date;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class Main {private static final String SUCCESS = "success";@RequestMapping("/testModelAndView")public ModelAndView testModelAndView(String name,String password){ModelAndView modelAndView = new ModelAndView();System.out.println("进入了控制器的modelAndView()方法");System.out.println("name: "+name);System.out.println("password: "+password);modelAndView.setViewName("success");modelAndView.addObject("msg",new Date()+" From testModelAndView().");return modelAndView;}/* * 测试 */@RequestMapping("/testHello")public String sayHello(){System.out.println("Hello");return SUCCESS;}}


TestInterceptor.java

package com.springmvc.interceptor;import java.util.Date;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;/** * 模拟拦截器的实现  * 1.编写拦截器类 实现HandlerIntercaptor接口.  * 2.将拦截器注册进SpringMVC框架中. * 3.配置拦截器的拦截规则. *  *  * 拦截器的方法介绍:  * 1.preHandle方法,在请求被处理之前进行调用.  * 2.postHandle方法,在请求被处理之后进行调用. * 3.afterCompletion方法,在请求结束之后才进行调用. *  * 注意: * 当 preHandle()方法返回false时, 我们的请求,并不会到达控制器,也不会执行到 postHandle 和 afterComletion方法.  *  * @author CYX *  */public class TestInterceptor implements HandlerInterceptor {/** * 请求结束之后才进行调用 * (请求被结束响应之后,视图已经被添置出来之后,最后调用的一个方法.) * 关闭资源,关闭数据流.不太常用. *  *  */public void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {System.out.println("执行到了 afterCompletion()");}/** * 请求被处理之前进行调用 *  * ModelAndView参数: * 可以通过ModelAndView参数来改变显示的视图,或修改发往视图的方法. *  * 请求到达目的地结束之后, 请求进行返回的时候,可以使用postHandle() 对返回的数据,进行操作 *  */public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {System.out.println("执行到了 postHandle()");System.out.println("修改发往视图的参数.");arg3.addObject("msg", new Date()+" FROM postHandle");//对返回数据进行修改操作arg3.setViewName("error");   //改变返回目标地址}/** * 请求被处理之后进行调用. * 该方法返回值的作用: * 是否需要将 当前的请求拦截下来. *如果返回false,请求将被终止 *如果返回true, 请求会继续运行. * * 注意: * 当 preHandle()方法返回false时, 我们的请求,并不会到达控制器,也不会执行到 postHandle 和 afterComletion方法. *  * Object arg2: * 该参数表示的是被拦截的请求的目标对象. * (这里拦截的目标就是 testModelAndView()方法 ) */public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2) throws Exception {System.out.println("执行到了 preHandle()");return true;}}

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>  </head>    <body>     <%   String userName="cyx";    %>    <%    out.println(userName);     %>     <%=userName %>        <br><br>  <form action="testModelAndView">  姓名:<input type="text" name="name">  密码:<input type="text" name="password">  <input type="submit" value="提交">  </form><a href="testModelAndView">testModelAndView</a>    <br><br>      <a href="testHello">testHello</a>  </body></html>


success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>Success page<br><br>${msg}</body></html>

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>This is Error.jsp<br><br>${msg }</body></html>

然后部署运行吧....

说一下大致的运行结果.

postHandle() 不进行配置的时候, 输出视图结果,就是 testModelAndView() 返回的设置的参数.

配置了postHandle()之后,可以在它里面,对返回的参数数据,和跳转目标 进行修改.

具体的话 大家尝试着 注释掉一些 postHandle()中的配置代码 试试看.....


-----更新于2016 4 24-----------

今天突然发现了,为什么页面上总是乱码了...真是蠢炸了....

index.jsp 和success.jsp

上面的设置的是 ISO-8859-1编码格式....

记得要改过来....



0 0
原创粉丝点击