Spring MVC servlet、filter和sitemesh配置问题
2016-01-12 16:02
471 查看
本文共记录三个问题,有责共勉。基于XML配置方式的Spring MVC。Java类配置流的可以忽略。1.Servlet开始。正常配置:
<servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 错误配置:
<servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> 出现问题的现象如图,自动把返回的代码加到了<pre>标签里:2.session filter 和sitemesh这里不给出错误的配置,sitemesh怎么配置自己去搜,基于sitemesh已经正常运行来说明。只贴出正确的代码,然后进行说明如图添加了 session filter
<filter> <filter-name>sessionFilter</filter-name> <filter-class>com.zsf.monkey.filters.LoginFilter</filter-class> <init-param> <param-name>excludedPages</param-name> <param-value>userLogin,static</param-value> ----不进行filter验证的请求路径 </init-param> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<!--sitemesh--> <filter> <filter-name>sitemesh</filter-name> <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 下面是LoginFilter类
public class LoginFilter extends GenericFilterBean { /** * 需要排除的页面 */ private String excludedPages; private static String[] excludedPageArray; @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; boolean isExcludedPage = false; for (String page : excludedPageArray) {//判断是否在过滤url之外 if (request.getServletPath().indexOf(page)>0) { //这里网上的demo给出的都是 request.getServletPath.equals(page),这里之所以换成indexof,是因为css,js等文件的请求也会进这里,所以<param-value>userLogin,static</param-value> 这里面给的参数就是,第一个就是登陆的action,第二个就是静态文件所在的文件夹
isExcludedPage = true; break; } } if (isExcludedPage) {//在过滤url之外 filterChain.doFilter(servletRequest, servletResponse); } else {//不在过滤url之外,判断session是否存在 // 从session中获取登录者实体 Object obj = request.getSession().getAttribute("user"); if (null == obj) { ((HttpServletResponse) servletResponse).sendRedirect("/home/userLogin"); return; } } } /** * 初始化函数,获取需要排除在外的url */ @Override public void initFilterBean() { //这个方法是GenericFilterBean 的重构,会在tomcat启动的时候执行,在这里的作用就是在启动的时候就把要排除的url加载进来,网上的demo大多没重写这个方法,直接在doFilter里定义了一个数组,这样写low爆了
FilterConfig filterConfig = getFilterConfig(); excludedPages = filterConfig.getInitParameter("excludedPages"); if (StringUtils.isNotEmpty(excludedPages)) { excludedPageArray = excludedPages.split(","); } } } ok,到此为止。本人半路出家,路子可能比较野,希望能给大家一些帮助,然后也希望大家不吝赐教,指教不足。
相关文章推荐
- servlet中使用spring注解功能
- Mac上打开多个Eclipse
- java获取文件大小
- JAVA SE Lesson 1
- eclipse导入android项目时Activity提示错误
- 在Eclipse中集成PHP开发环境或安装PDT插件
- Struts2自定义拦截器实例—登陆权限验证
- 【java基础 2】J2EE的13种规范
- JAVA字符串
- 【java 理论篇 2】J2EE的13种规范
- Java反射初步学习
- 浅谈Java Final关键字
- Java并发编程:线程池创建及源码分析
- Java语法基础(四)
- Java中的简单工厂模式
- 踏上学习java的路
- 搭建swt/jface开发环境【转】
- 关于spring mvc的一点自己的理解
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- Java正则表达式的基本用法