登录页面login.jsp在webroot下

<body>
<form action="user/login" method="post">
userName:<input type="text" name="userName"/><br/>
password:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form> </body>

map的遍历方法

<body>
<form action="user/login" method="post">
userName:<input type="text" name="username"/><br/>
password:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form> </body> 遍历map的方法 //登录方法
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(@RequestParam String userName,@RequestParam String password,HttpSession session){ //方法一:map遍历
//比对userList 遍历map(key value)
//userList.values();//拿到一个conllection
for(User user:userList.values()){
if(userName.equals(user.getUserName()) && password.equals(user.getPassword())){
System.out.println("登录成功!");
break;
}
} //方法二:userList.keySet() 得到key的集合,遍历set就行了
for(String key:userList.keySet()){
System.out.println("key-->"+key+"value-->"+userList.get(key).getUserName());
} //方法三:iterator遍历
Iterator<Map.Entry<String, User>> itor = userList.entrySet().iterator();
while(itor.hasNext()){
Map.Entry<String, User> entry = itor.next();
System.out.println("key-->"+entry.getKey()+"value-->"+entry.getValue().getUserName());
}
//方法四:遍历userList.entrySet()
for(Map.Entry<String, User> entry:userList.entrySet()){
System.out.println("key-->"+entry.getKey()+"value-->"+entry.getValue().getUserName());
} return "redirect:/user/list";//跳转到展示页面
}

登录

//登录方法
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(@RequestParam String userName,@RequestParam String password,HttpSession session){ boolean flag = false; for(User user:userList.values()){
if(userName.equals(user.getUserName()) && password.equals(user.getPassword())){
System.out.println("登录成功!");
session.setAttribute("loginUser", user);
flag = true;
break;
}
}
//
if(!flag){
throw new UserException("用户名,密码不正确,请重新输入!!");
//抛出一个runtimeException异常,
} return "redirect:/user/list";
}

UserException(开发中,异常都是要自己写的)extends RuntimeException  alt+shirt+s  找到superclass继承父类方法

UserException

异常抛出后,显示出来很难看,我们最好自己创建一个页面error.jsp来接收异常

<body>
<h1>${e.message }</h1>
</body>

这里用的是局部异常处理

//局部异常处理:只针对某一个controller
@ExceptionHandler(value={UserException.class})
public String handlerException(UserException e,HttpServletRequest request){
request.setAttribute("e", e);//异常放到request里面
return "error";
}

全局异常处理

error.jsp界面

${exception.message }

在springmvc-servlet.xml配置文件中加入全局异常

<!-- 全局异常SimpleMappingExceptionResolver 注意是serlvet的包 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="pojo.UserException">error</prop>
</props>
</property>
</bean>

有全局异常的时候要把局部异常的方法注释了

spring mvc实现登录+异常的更多相关文章

  1. spring mvc 全局处理异常

    spring框架支持很多种全局处理异常的方式 一.Spring MVC处理异常有4种方式: (1)使用Spring-MVC提供的SimpleMappingExceptionResolver: (2)实 ...

  2. spring MVC中定义异常页面

    如果我们在使用Spring MVC的过程中,想自定义异常页面的话,我们可以使用DispatcherServlet来指定异常页面,具体的做法很简单: 下面看我曾经的一个项目的spring配置文件: 1 ...

  3. spring MVC中的异常统一处理

    1.spring MVC中定义了一个标准的异常处理类SimpleMappingExceptionResolver 该类实现了接口HandlerExceptionResolver 2.看下SimpleM ...

  4. Spring MVC过滤器-登录过滤

    以下代码是继承OncePerRequestFilter实现登录过滤的代码: package com.test.spring.filter; import java.io.IOException; im ...

  5. spring mvc实现登录验证码

    一.实现图形验证码的基础类 VerifyCodeUtils.java,这个类是从网上摘抄的~ package com.comp.common; import java.awt.Color; impor ...

  6. Spring MVC怎么统一异常管理?

    1. 在类上加上@ControllerAdvice注解 2. 在方法上加上@ExceptionHandler注解 @ExceptionHandler(Exception.class) @Respons ...

  7. Spring MVC异常统一处理(包括普通请求异常以及ajax请求异常)

    通常SpringMVC对异常的配置都是返回某个jsp视图给用户,但是通过ajax方式发起请求,即使发生异常,前台也无法获得任何异常提示信息.因此需要对异常进行统一的处理,对于普通请求以及ajax请求的 ...

  8. Spring MVC重定向和转发以及异常处理

    SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...

  9. Spring MVC重定向和转发及异常处理

    SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...

随机推荐

  1. flask 使用 SQLAlchemy 的两种方式

    1. 使用 flask-SQLAlchemy 扩展 # flask-ext-sqlalchemy.py from flask import Flask from flask.ext.sqlalchem ...

  2. Spring系列: 使用aop报错:nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle

    写了个最简单的aop例子 配置文件如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...

  3. 网络封包分析工具Charles使用

    网址:http://www.charlesproxy.com/ 截取网络封包的工具. 简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议, ...

  4. 再次遇到\r\n转\r问题

    帮助小伙伴做jenkins的环境搭建.以为5分钟的事情,但是发现了一个诡异的问题.总是提示SVN的url不合法“URL '%s' is not properly URI-encoded”. 由于选择了 ...

  5. flatbuffers 使用问题记录

    1. 命名空间的问题 ----------------------------- namespace 1.0.3 版本包含文件类型前面不需要加命名空间,但是1.1.0 中包含需要在类型前加命名空间 i ...

  6. 【转载】gcc 使用中常用的参数及命令

    本文转载自:http://www.cnblogs.com/yaozhongxiao/archive/2012/03/16/2400473.html 如需转载,请注明原始出处.谢谢. --------- ...

  7. C# 无法识别的转义序列

    解决这个问题头两种方法:1.加个"\"进行转义:2.在前面加个@ 示例:我要进入D盘下video文件夹中的ysxs文件夹,写法分别为: D:\\video\\ysxs @" ...

  8. android之imgView插件的使用

    在开发中我们经常要用到图片下载功能,但我们可以在github上淘一些比较好的插件,这里介绍一款叫smartImageView的插件. 这里是其地址https://github.com/loopj/an ...

  9. 03.C#委托(二章1.1)

    一章1.5-1.8介绍的是com.动态类型及.NET平台一些说明,每个心中都有自己的标准,听一家之言,叫人不爽,相信自己有自己的标准和自己的编程理念就OK了,也不想码那么多说明性的文字,直接跳过吧,当 ...

  10. 一头扎进EasyUI

    惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 一头扎进EasyUI第1讲 .加载库文件和样式 <link rel="stylesheet" ...