雨过天青云破处,这般颜色做将来
前言
时间不等人
一、资源在WEB-INF目录下
此目录下的动态资源,不可直接访问,只能通过请求转发的方式进行访问
@RequestMapping("/showIndex")
public String showIndex(){
System.out.println("访问index.jsp");
return "index";
}
@RequestMapping("/showMain")
public String showMain(){
System.out.println("访问main.jsp");
return "main";
}
修改视图解析器的前缀
二、SpringMVC拦截器
针对请求和响应进行的额外的处理,在请求和响应的过程中添加预处理,后处理和最终处理
2.1、拦截器执行的时机:
- preHandle():在请求被处理之前进行操作,预处理
- postHandle():在请求被处理之后,但结果还没有渲染前进行操作,可以改变响应结果,后处理
- afterCompletion():所有的请求响应结束后执行善后工作,清理对象,关闭资源,最终处理
2.3、拦截器实现的两种方式
- 继承HandlerInterceptorAdapter的父类
- 实现HandlerInterceptor接口,实现的接口,推荐使用实现接口的方式
2.4、拦截器实现的步骤
- 改造登录方法,在session中存储用户信息,用于进行权限验证
@RequestMapping("/login")
public String login(String name, String pwd, HttpServletRequest request){
if("zar".equalsIgnoreCase(name) && "123".equalsIgnoreCase(pwd)){
//在session中存储用户信息,用于进行权限验证
request.getSession().setAttribute("users",name);
return "main";
}else {
request.setAttribute("msg","用户名或密码不正确!");
return "login";
}
}
- 开发拦截器的功能,实现HandlerInterceptor接口,重写preHandle()方法
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//是否登录过的判断
if(request.getSession().getAttribute("users") == null){
//此时就是没有登录,打回到登录页面,并给出提示
request.setAttribute("msg","您还没有登录,请先去登录!");
request.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
return HandlerInterceptor.super.preHandle(request, response, handler);//放行请求
}
}
- 在springmvc.xml文件中注册拦截器
<!--注册拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--映射要拦截的请求-->
<mvc:mapping path="/**"/>
<!--设置放行的请求-->
<mvc:exclude-mapping path="/showLogin"/>
<mvc:exclude-mapping path="/login"/>
<!--配置具体的拦截器实现功能的类-->
<bean class="com.bjpowernode.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
总结
到了运用时再看代码即可