SpringMVC中的异常处理——5

这是个WebProject,用到的是spring-framework-3.1.1.RELEASE


首先是web.xml

[html]   view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.         <servlet-name>user</servlet-name>  
  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  10.         <load-on-startup>1</load-on-startup>  
  11.     </servlet>  
  12.     <servlet-mapping>  
  13.         <servlet-name>user</servlet-name>  
  14.         <url-pattern>/</url-pattern>  
  15.     </servlet-mapping>  
  16.   
  17.     <filter>  
  18.         <filter-name>SpringCharacterEncodingFilter</filter-name>  
  19.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  20.         <init-param>  
  21.             <param-name>encoding</param-name>  
  22.             <param-value>UTF-8</param-value>  
  23.         </init-param>  
  24.     </filter>  
  25.     <filter-mapping>  
  26.         <filter-name>SpringCharacterEncodingFilter</filter-name>  
  27.         <url-pattern>/*</url-pattern>  
  28.     </filter-mapping>  
  29.       
  30.     <welcome-file-list>  
  31.         <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>  
  32.     </welcome-file-list>  
  33. </web-app>  

然后是SpringMVC的配置文件user-servlet.xml

[html]   view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.                         http://www.springframework.org/schema/mvc  
  9.                         http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd  
  10.                         http://www.springframework.org/schema/context   
  11.                         http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  12.     <context:component-scan base-package="com.jadyer"/>  
  13.       
  14.     <mvc:annotation-driven/>  
  15.       
  16.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  17.         <property name="prefix" value="/WEB-INF/jsp/"/>  
  18.         <property name="suffix" value=".jsp"/>  
  19.     </bean>  
  20. </beans>  

下面是用户登录页面//WEB-INF//jsp//login.jsp
[html]   view plain copy print ?
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <form action="<%=request.getContextPath()%>/user/login" method="POST">  
  3.     username: <input type="text" name="username"/><br/>  
  4.     password: <input type="password" name="password"/><br/>  
  5.     <input type="submit" value="登录"/>  
  6. </form>  

下面是用户登录失败页面//WEB-INF//jsp//error.jsp

[html]   view plain copy print ?
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. ${myex.message}  

下面是用户登录成功页面//WEB-INF//jsp//user//loginSuccess.jsp
[html]   view plain copy print ?
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. welcome: ${loginUser.nickname}  

接下来是用到的实体类User.java

[java]   view plain copy print ?
  1. package com.jadyer.model;  
  2.   
  3. /** 
  4.  * User 
  5.  * @author 宏宇 
  6.  * @create May 12, 2012 1:24:43 AM 
  7.  */  
  8. public class User {  
  9.     private String username;  
  10.     private String nickname;  
  11.     private String password;  
  12.     private String email;  
  13.     /*==四个属性的getter()、setter()略==*/  
  14.     public User() {}  
  15.     public User(String username, String nickname, String password, String email) {  
  16.         this.username = username;  
  17.         this.nickname = nickname;  
  18.         this.password = password;  
  19.         this.email = email;  
  20.     }  
  21. }  

然后是自定义的异常类UserException.java
[java]   view plain copy print ?
  1. package com.jadyer.exception;  
  2.   
  3. /** 
  4.  * UserException 
  5.  * @author http://blog.csdn/net/jadyer 
  6.  * @create May 12, 2012 6:43:29 PM 
  7.  */  
  8. @SuppressWarnings("serial")  
  9. public class UserException extends RuntimeException {  
  10.     public UserException() {  
  11.         super();  
  12.     }  
  13.   
  14.     public UserException(String message, Throwable cause) {  
  15.         super(message, cause);  
  16.     }  
  17.   
  18.     public UserException(String message) {  
  19.         super(message);  
  20.     }  
  21.   
  22.     public UserException(Throwable cause) {  
  23.         super(cause);  
  24.     }  
  25. }  

最后是核心的UserController.java
[java]   view plain copy print ?
  1. package com.jadyer.controller;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7.   
  8. import org.springframework.stereotype.Controller;  
  9. import org.springframework.ui.Model;  
  10. import org.springframework.web.bind.annotation.ExceptionHandler;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12. import org.springframework.web.bind.annotation.RequestMethod;  
  13. import org.springframework.web.bind.annotation.SessionAttributes;  
  14.   
  15. import com.jadyer.exception.UserException;  
  16. import com.jadyer.model.User;  
  17.   
  18. /** 
  19.  * SpringMVC中的异常处理方式 
  20.  * @see 第一步:创建自定义异常类 
  21.  * @see 第二步:在Controller中创建一个用于截获并处理异常方法,方法名可随意 
  22.  *            然后在方法上标注@ExceptionHandler(你的自定义异常类名.class) 
  23.  *            接着就可以在该方法内部,进行符合我们业务逻辑的异常处理 
  24.  * @see 第三步:在需要抛异常的地方抛出来就行了,第二步所创建的方法会自动截获并处理的 
  25.  * @author http://blog.csdn/net/jadyer 
  26.  * @create May 12, 2012 7:28:31 PM 
  27.  */  
  28. @Controller  
  29. @RequestMapping("/user")  
  30. @SessionAttributes("loginUser")  
  31. public class UserController {  
  32.     private final static Map<String,User> users = new HashMap<String,User>();  
  33.       
  34.     //模拟数据源,构造初始数据  
  35.     public UserController(){  
  36.         users.put("张起灵"new User("张起灵""闷油瓶""02200059""[email protected]"));  
  37.         users.put("李寻欢"new User("李寻欢""李探花""08866659""[email protected]"));  
  38.         users.put("拓拔野"new User("拓拔野""搜神记""05577759""[email protected]"));  
  39.         users.put("孙悟空"new User("孙悟空""美猴王""03311159""[email protected]"));  
  40.     }  
  41.       
  42.     /** 
  43.      * 用于异常处理的方法 
  44.      */  
  45.     @ExceptionHandler(UserException.class)  
  46.     public String myExceptionHandler(Exception ex, HttpServletRequest request){  
  47.         request.setAttribute("myex", ex);  
  48.         return "error";  
  49.     }  
  50.       
  51.     /** 
  52.      * 用户登录 
  53.      * @see SpringMVC会自动收集表单控件值,赋给方法的同名参数上 
  54.      */  
  55.     @RequestMapping(value="/login", method=RequestMethod.POST)  
  56.     public String login(String username, String password, Model model){  
  57.         if(!users.containsKey(username)){  
  58.             throw new UserException("用户不存在");  
  59.         }  
  60.         if(!users.get(username).getPassword().equals(password)){  
  61.             throw new UserException("密码不正确");  
  62.         }  
  63.         model.addAttribute("loginUser", users.get(username)); //将登录用户信息放到HttpSession中  
  64.         return "user/loginSuccess";  
  65.     }  
  66. }

你可能感兴趣的:(springMVC)