项目结构
web.xml配置文件
<!--配置DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
applicationContext.xml
<!--自动扫描指定的包-->
<context:component-scan base-package="com.kuang.controller"></context:component-scan>
<!--过滤静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!--开启注解-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/want/**"/>
<!--bean配置的拦截器的路径-->
<bean class="com.kuang.config.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!--/** 包括路径及其子路径-->
<!--/admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截-->
<!--/admin/** 拦截的是/admin/下的所有-->
Controller层
@Controller
@RequestMapping("/want")
public class LoginController {
//访问衣服链接
@RequestMapping("/clothing")
public String goClothing(Model model){
model.addAttribute("cloth","一件花衣服");
return "clothing";
}
//访问鞋链接
@RequestMapping("/shoes")
public String goShoes(Model model){
model.addAttribute("shoes","送你一双骚绿色的鞋");
return "shoes";
}
//登录
@RequestMapping("/login")
public String login(String username, String password, Model model, HttpSession session){
System.out.println(username+"--------"+password);
model.addAttribute("username",username);
session.setAttribute("userLoginInfo",username);
return "success";
}
//注销的方法
@RequestMapping("/goOut")
public String goOut(HttpSession session){
//两种注销session的方法
session.removeAttribute("userLoginInfo");
//或者,但是推荐上面的
// session.invalidate();
return "login";
}
}
Interceptor层
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//如果有用户登录信息的Session。则放行
if (request.getSession().getAttribute("userLoginInfo") != null){
return true;
}
//如果用户访问的是登录页面,也放行
if (request.getRequestURI().contains("login")){
return true;
}
//如果用户没有登录,也不是访问登录页面,则不放行,并且让用户跳转到登录页面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}