文档章节

SpringMVC中的异常处理——5

DavidBao
 DavidBao
发布于 2014/12/15 22:59
字数 845
阅读 56
收藏 2

这是个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""menyouping@yeah.net"));  
  37.         users.put("李寻欢"new User("李寻欢""李探花""08866659""lixunhuan@gulong.cn"));  
  38.         users.put("拓拔野"new User("拓拔野""搜神记""05577759""tuobaye@manhuang.cc"));  
  39.         users.put("孙悟空"new User("孙悟空""美猴王""03311159""sunhouzi@xiyouji.zh"));  
  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. }

© 著作权归作者所有

DavidBao
粉丝 114
博文 213
码字总数 126729
作品 0
昌平
私信 提问
加载中

评论(0)

Spring Boot 2 Webflux的全局异常处理

本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflux的全局异常处理机制。 SpringMVC的异常处理 Spring 统一异常处理有 3 种方式,分别为: 使用 注解...

aoho
2018/12/20
0
0
Java Web 面试中关于Spring MVC必问题,不看血亏!

前言 Spring MVC是Spring构建在Servlet API上的Web框架。目前大部分的Java Web 开发已经使用Spring MVC 来做。它提供了模型 - 视图 - 控制器架构,可用于开发灵活的Web应用程序。在本教程中,...

码农小胖哥
2019/09/23
87
0
Spring中的AOP(三)——基于Annotation的配置方式(一)

AspectJ允许使用注解用于定义切面、切入点和增强处理,而Spring框架则可以识别并根据这些注解来生成AOP代理。Spring只是使用了和AspectJ 5一样的注解,但并没有使用AspectJ的编译器或者织入器...

摆渡者
2014/03/22
4.2K
0
Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 然而...

长平狐
2012/11/12
186
0
spring mvc 统一异常处理

1、定义一个统一异常处理类 @ControllerAdvice,是spring3.2提供的新注解, 一般扫描context:component-scan扫描时也能扫描到,不需要在配置文件配置 但如果你的spring-mvc配置文件使用如下方...

qiun
2016/06/24
750
0

没有更多内容

加载失败,请刷新页面

加载更多

 企业信息平台的快速搭建,框架如何选?

Web端开发框架如何选 目前,大部分的企业信息集成系统都在web端运行,而搭建框架的选择对一个企业的发展至关重要,不过其最终目的都是要符合企业发展逻辑,助力企业战略的实施。 而在框架的选...

我想造火箭
21分钟前
32
0
安装mysql 实操截图

前言: CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用MariaDB代替了,MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之...

冥焱
26分钟前
57
0
FecMall 多商户分销系统 - 价格公式计算

FecMall Fecbdc 分销价格公式计算 本章详解讲述分销平台的各个价格,以及相应的设置,本章节非常重要,贯穿分销系统的整个流程,请仔细阅读 官网: http://www.fecmall.com/ 业务逻辑设计 系...

FecShop
26分钟前
33
0
Java Web 学习笔记(7)

文件下载 package com.janeroad.servlet;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.......

JaneRoad
30分钟前
41
0
如何在JavaScript中更改span元素的文本

如果我有跨度,请说: <span id="myspan"> hereismytext </span> 如何使用JavaScript将“ hereismytext”更改为“ newtext”? #1楼 对于现代浏览器,您应该使用: document.getElementByI......

技术盛宴
32分钟前
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部