直接上代码,不逼逼了...
显示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;
@Controller
public 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;
}
}
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>
<%@ 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编码格式....
记得要改过来....