SpringMVC入门 (五)用户登录以及异常处理,静态文件

用户登录很简单,一个get类型请求给用户返回一个登录界面,然后接受用户的登录数据,如果没错则将用户跳转到WEB-INF/jsp/user/list.jsp界面。
@RequestMapping(value="/login",method=RequestMethod.GET)
	public String login(){
		return "login";
	}
	
	
	@RequestMapping(value="/login",method=RequestMethod.POST)
	public String login(String username, String password, HttpSession session){
		if(!users.containsKey(username)){
			throw new UserException("用户名不存在");
		}
		User u=users.get(username);
		if(!u.getPassword().equals(password)){
			throw new UserException("用户密码不正确");
		}
		session.setAttribute(username, u);
		return "redirect:/user/users";
		
	}


这里主要讲异常处理。

首先讲 局部异常处理
1. 在UserController下加入以下方法:
//局部异常处理,只能处理这个控制器中的异常.
	@ExceptionHandler(value={UserException.class})
	public String handlerException(UserException ue,HttpServletRequest req){
	    req.setAttribute("exception", ue);
	    return "error";
	}


2.在WEB-INF/jsp下创建error.jsp文件
 <body>
    <h1>${exception.message}</h1>
  </body>


此时用户访问所产生的内部异常将不会抛出我们平时所见的exception stack,而是返回给用户error.jsp页面,并告知用户异常信息。
error.jsp这个页面我们就可以让美工自由发挥了。 -O-



接下来是 全局异常处理

在hello-servlet.xml中加入:
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
			<!--这里必须要写SimpleMappingExceptionResolver里的元素名称:private Properties exceptionMappings; -->
			<property name="exceptionMappings">
				<props>
				 <!-- 要映射的异常类 -->
					<prop key="com.lj.model.UserException">error</prop>
				</props>
			</property>
		</bean>


加入全局异常以后,任何控制器里抛出的UserException都会被SpringMVC捕获并将页面跳转到WEB-INF/jsp/error.jsp页面。
对应的异常对象是exception.



静态文件
由于SpringMVC通过设置web.xml的servlet,捕获了所有路径。
<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

这样一来,客户端就不能访问到css,jpg等文件。
因此必须采取相应的配置才能让用户访问这些文件。

在hello-servlet.xml中加入:
	<!-- 将静态文件制定到某个特殊的文件夹中统一处理 -->
		<mvc:resources location="/resources/" mapping="/resources/**"/>

这样我们只要在webroot目录下创建一个resources目录,再将所有文件放入此目录,通过<%=path%>/resources/filename就可以访问了。


猜你喜欢

转载自alleni123.iteye.com/blog/1986876