一、安全退出
1.安全退出的流程图
2.安全退出代码实现
@RequestMapping("/settings/qx/user/logout.do") public String logout(HttpServletResponse response,HttpSession session){ //清空cookie Cookie c1= new Cookie("loginAct","1"); c1.setMaxAge(0); response.addCookie(c1); Cookie c2= new Cookie("loginPwd","1"); c2.setMaxAge(0); response.addCookie(c2); //销毁session session.invalidate(); //跳转到首页 return "redirect:/";}

<button type="button" class="btn btn-primary" data-dismiss="modal" id="logoutBtn">确定</button>
//页面加载完毕$(function(){ //导航中所有文本颜色为黑色 $(".liClass > a").css("color" , "black"); //默认选中导航菜单中的第一个菜单项 $(".liClass:first").addClass("active"); //第一个菜单项的文字变成白色 $(".liClass:first > a").css("color" , "white"); //给所有的菜单项注册鼠标单击事件 $(".liClass").click(function(){ //移除所有菜单项的激活状态 $(".liClass").removeClass("active"); //导航中所有文本颜色为黑色 $(".liClass > a").css("color" , "black"); //当前项目被选中 $(this).addClass("active"); //当前项目颜色变成白色 $(this).children("a").css("color","white"); }); window.open("main/index.html","workareaFrame"); //给"确定按钮添加单击事件" $("#logoutBtn").click(function () { //发送同步请求 window.location.href="settings/qx/user/logout.do" });});
二、登录验证
1.为什么要登录验证
2.实现登录验证

public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { //如果用户没有登录成功,则跳转到登录页面 HttpSession session= request.getSession(); User user= (User) session.getAttribute(Contants.SESSION_USER); if(user==null){ //自己重定向一定要带项目的名字 // response.sendRedirect("/crm"); 这样就写死了 response.sendRedirect(request.getContextPath()); return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); }}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--添加包扫描--> <context:component-scan base-package="com.bjpowernode.crm.web.controller"></context:component-scan> <context:component-scan base-package="com.bjpowernode.crm.settings.web.controller"></context:component-scan> <context:component-scan base-package="com.bjpowernode.crm.workbench.web.controller"></context:component-scan> <!--添加注解驱动--> <mvc:annotation-driven></mvc:annotation-driven> <!-- 配置视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <mvc:interceptors> <mvc:interceptor> <!--配置拦截的请求 --> <!--mvc:exclude-mapping path="/settings/*"/>一个星星代表一层子目录 --> <mvc:mapping path="/settings/**"/> <!--两个星星所有的子目录 --> <mvc:mapping path="/workbench/**"/> <!--排除拦截的请求--> <mvc:exclude-mapping path="/settings/qx/user/toLogin.do" /> <mvc:exclude-mapping path="/settings/qx/user/login.do" /> <!--拦截器类--> <bean class="com.bjpowernode.crm.settings.web.interceptor.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors> <!-- 配置文件上传解析器 id:必须是multipartResolver--> <!--<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="#{1024*1024*80}"/> <property name="defaultEncoding" value="utf-8"/> </bean>--> <mvc:default-servlet-handler /><!--静态资源释放--></beans>
三、解决业务的404问题
1.页面切割技术
frameset和frame
<frameset>和<frame><frameset>:用来切割页面. <frameset cols="20%,60%,20%" rows="10%,80%,10%">
<frameset cols="20%,60%,20%"> <frame src ="url1" name="f1"> <frame src ="url2" name="f2"> <frame src ="url3" name="f3"></frameset>每一个<frame>标签就是一个独立的浏览器窗口。<a href="url" target="f3">test</a>