异常的处理方式
来源:互联网 发布:oracle数据库备份命令 编辑:程序博客网 时间:2024/06/05 13:27
在登陆中异常的处理:
package com.tarena.netctoss.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.annotation.Resource;import javax.sql.DataSource;import org.springframework.stereotype.Repository;import com.tarena.netctoss.entity.Admin;/** * 持久层实现 */@Repository("adminDAO")public class AdminDAOJdbcImpl implements AdminDAO {@Resource(name="ds")private DataSource ds;//将连接池(此处使用接口)依赖注入public Admin findByAdminCode(String adminCode) {Admin admin = null;Connection conn = null;try {conn = ds.getConnection();String sql = "SELECT * FROM admin_info WHERE admin_code=?";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, adminCode);ResultSet rs = ps.executeQuery();if(rs.next()){admin = new Admin();admin.setAdminId(rs.getInt("admin_id"));admin.setAdminCode(rs.getString("admin_code"));admin.setPassword(rs.getString("password"));admin.setName(rs.getString("name"));admin.setTelephone(rs.getString("telephone"));admin.setEmail(rs.getString("email"));admin.setEnrolldate(rs.getTimestamp("enrolldate"));return admin;}} catch (SQLException e) {//获取连接失败,属于系统异常//发生异常后,记录日志e.printStackTrace();/** * 看能否恢复异常,如果能够则立即回复 * 如果不能够(例如数据库停止服务),则提示用户稍后重试 */throw new RuntimeException(e);} finally{if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}}return admin;}}
在持久层中,包装后并抛出异常RuntimeException,抛给service层
业务层代码为:
package com.tarena.netctoss.service;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.tarena.netctoss.dao.AdminDAO;import com.tarena.netctoss.entity.Admin;@Service("loginService")public class LoginServiceImpl implements LoginService {@Resource(name="adminDAO")private AdminDAO dao;public Admin checkLogin(String adminCode, String pwd) {Admin admin = null;admin = dao.findByAdminCode(adminCode);if(admin == null){//帐号不存在//帐号不存在,抛出一个应用异常(由于用户操作错误)throw new ApplicationException("帐号不存在");}if(!admin.getPassword().equals(pwd)){//账号存在,密码错误throw new ApplicationException("密码错误");}//登录成功return admin;}}业务层异常包装成ApplicationException异常向上抛出给控制器,由控制器来处理
处理器:
package com.tarena.netctoss.controller;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.tarena.netctoss.entity.Admin;import com.tarena.netctoss.service.ApplicationException;import com.tarena.netctoss.service.LoginService;@Controllerpublic class LoginController {@Resource(name="loginService")private LoginService service;@RequestMapping("/toLogin.do")public String toLogin(){//转发到登录页面System.out.println("toLogin()");return "login";}@RequestMapping("/login.do")public String login(HttpServletRequest request,HttpSession session) {//重定向到首页//获取请求参数String adminCode = request.getParameter("adminCode");String pwd = request.getParameter("pwd");System.out.println(adminCode+","+pwd);//调用业务层,其中checkLogin方法可能有异常抛出,有控制层来处理try{Admin admin = service.checkLogin(adminCode, pwd);//把admin对象绑定到session,用于验证session.setAttribute("admin", admin);}catch(Exception e){e.printStackTrace();if(e instanceof ApplicationException){//应用异常,明确提示用户正确的操作,返回登录页面,并提示request.setAttribute("login_failed", e.getMessage());return "login";}//系统异常,提示用户稍后重试return "error";}//没有任何异常,从定向到首页return "redirect:toIndex.do";}@RequestMapping("/toIndex.do")public String toIndex(){return "index";}}处理器对可能出现的异常进行分类处理:
由于用户输入造成的为应用异常,转发到相应页面即可
由于系统错误造成的为系统异常(连接数据库失败、断网等)转发到相应页面即可
若没有异常则从定向到指定页面
===========================================================================
以上处理方式是通过try{}catch()进行处理,还可以将异常交给spring容器来处理
springmvc提供的异常处理机制
我们可以将异常抛给spring框架,让spring来帮我们处理异常。
(1)使用简单异常处理器
step1. 配置简单异常处理器。
step2. 添加对应的异常处理页面。
注:该方式只适合处理简单异常的处理,如果要对异常做复杂处理,比如 记录日志等,则不合适了。
(2)使用@ExceptionHandler注解
step1. 在处理器类当中,添加一个异常处理方法, 该方法要使用@ExceptionHandler注解来标注。
step2.添加对应的异常处理页面
相应代码如下:
<!-- 配置简单异常处理器 --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.NumberFormatException">error1</prop> <prop key="java.lang.StringIndexOutOfBoundsException">error2</prop> </props> </property></bean>或者:
@ExceptionHandler//使用注解处理contorller中的异常public String exHandle(Exception ex,HttpServletRequest request){if(ex instanceof ApplicationException){request.setAttribute("login_failed", ex.getMessage());return "login";}else{//系统异常return "error";}}
阅读全文
0 0
- 异常的处理方式
- RFT的异常处理方式
- 关于异常的处理方式
- SpringMVC的异常处理方式
- InflateException 异常的处理方式
- IO的异常处理方式
- 处理WCF异常的方式
- Opencv的异常处理方式
- throws的方式处理异常
- Java的异常处理的方式
- 趣说java处理异常的方式
- Struts 异常的简易处理方式
- 趣说java处理异常的方式
- 异常处理的几种方式
- 程序开发中异常的处理方式
- C++中异常处理的工作方式
- 理一理********异常的几种处理方式
- IO流的异常处理方式
- yum学习
- bzoj1799: [Ahoi2009]self 同类分布
- 统计一个目录下所有普通文件的个数(包含子目录下的普通文件).
- Python数据分析入门知识点总结
- Android7.0中文文档(API) -- ScrollView
- 异常的处理方式
- 专题一关键字的剖析----7.enum,typedef的分析
- 【HTML5学习笔记】14:全局属性和其它
- 第一个jenkins构建作业
- Tensorflow一些常用基本概念与函数(二)
- C和汇编的双向调用以及一些问题
- 负载均衡算法的理解
- 日常训练 20170612 钥匙
- USB Tethering always displays grey when USB tethering type is Linux(EEM)