java异常在实际开发中的应

异常是java的一大特色,用好了受益匪浅!不瞎扯了,开始写用法,这里控制层用的spring mvc!

思考问题,我们如何做才能使得service层彻底处理所有业务逻辑从而基本实现service和controller层的完全解耦?

所有做过开发的都知道,struts2在处理服务器验证的时候一般会把验证逻辑放在action,这样做没有什么不好,但是如果放在service是否更好,还有其他一些特殊的逻辑要放在service层,有时候特别不方便!现在,我讲讲我所使用的异常转换问题,相信各位大神轻松理解,在自己实际项目中也可以用到!

以service层处理参数验证问题为例:

1.定义parameter异常来封装无需和数据库交互的参数错误信息:

public class ParameterException extends Exception {

	private static final long serialVersionUID = 1L;
	
	private Map<String, String> fields = new HashMap<String, String>();
	
	public Map<String, String> getFields() {
		return fields;
	}

	public void setFields(Map<String, String> fields) {
		this.fields = fields;
	}
	
	public void addFields(String key, String value) {
        fields.put(key, value);
    }

    public boolean isEmpty() {
        return fields.isEmpty();
    }

	public ParameterException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public ParameterException(String message, String flag) {
		super(message);
	}
	
	
}


</pre><p></p><pre>
2.定义ServiceException来封装需要和数据库交互的参数错误信息,如密码不正确

public class ServiceException extends Exception {
    private static final long serialVersionUID = 1L;

    private int code = 0;
    private String message = null;

    public ServiceException(int code, String message) {
        this.message = message;
        this.code = code;
    }

    public ServiceException() {

    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

}

3.Service层以login为例,验证用户名,密码信息:

@Override
	public User login(String userNumber, String password)
			throws ParameterException, ServiceException {//这里抛出具体的异常
		User user = null;
		password = DigestUtils.md5Hex(password);
		ParameterException parameterException = new ParameterException();
		if (StringUtil.isEmpty(userNumber) || StringUtil.isEmpty(password)) {
			parameterException.addFields("loginMessage", "用户名或密码为空");
			throw parameterException;
		}
		user = userDao.getUserByUserNumber(userNumber);
		if (user == null) {
			throw new ServiceException(10000, "用户不存在");
		} else if (!password.equals(user.getPassword())
				&& !userNumber.equals(user.getUserName())) {
			throw new ServiceException(10001, "密码不正确");
		}
		return user;
	}

4.controller层处理异常,返回信息到页面:

@RequestMapping(value = "/login", method = RequestMethod.POST)
	public ModelAndView login(String userNumber, String password, HttpSession session) {
		ModelAndView mav = null;	
		User user = null;
		try {
			user = userService.login(userNumber, password);
		} catch (ParameterException parameterException) {//这里进行catch操作,出现异常则返回信息到页面
			Map<String, String> fields = parameterException.getFields();
			mav = new ModelAndView("login");
			mav.addObject("fields", fields);
			return mav;
		} catch (ServiceException serviceException) {
			mav = new ModelAndView("login");
			mav.addObject("loginMessage", serviceException.getMessage());
			return mav;
		}
		user.setPassword(null);
		session.setAttribute("user", user);
		Role role = null;
		if(user != null) {
			role = userService.getRoleByUserId(user.getId());
			session.setAttribute("roleName", role.getRoleName());
			if("系统管理员".equals(role.getRoleName())) {
				mav = new ModelAndView(new RedirectView("list", true));
			}
			if("学生".equals(role.getRoleName())) {
				 mav = new ModelAndView(new RedirectView("/student/list", true));
			}
			if("老师".equals(role.getRoleName())) {
				mav = new ModelAndView(new RedirectView("/teacher/list", true));
			}
		}
		return mav;
	}

5.页面拿到错误信息并展示:

<form action="${pageContext.request.contextPath }/user/login" method="post" id="login">
	<div class="loginTop">
		<div class="sysNameStyle">
			<div class="sysNameLocate"></div>
		</div>
	</div>
	<div class="loginBottom">
		<div class="userName">
			<div class="labelStyle">
				学号:
			</div>
			<div class="inputStyle">
				<input type="text" name="userNumber" id="userNumber" class="inputWidth"/>
			</div>
			<div class="errorMessage">
				${loginMessage }${fields['loginMessage'] }
			</div>
		</div>
		
		<div class="passWord">
			<div class="labelStyle">
				密码:
			</div>
			<div class="inputStyle">
				<input type="password" name="password" id="passWord" class="inputWidth"/>
			</div>
		</div>
		
		<div class="submit">
			<div class="resetLocate">
				<input type="reset" value="取消" class="submitStyle"/>
			</div>
			<div class="submitLocate">
				<input type="submit" value="登陆" class="submitStyle"/>
			</div>
		</div>
	</div>
</form>	





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值