1、背景
项目中有时候会把jsp直接放在webroot下面。又不想让用户直接通过在地址栏键入jsp页面来访问。
这时候处理方式有2中:
(1)将JSP放在WEB-INF 下面。这是最简单的方式(不过很多人觉得这种方式目录结构不好看)
(2)将JSP放在webRoot下面,写个过滤器来过滤一下
第一种方法就不多说了,不要改动任何代码。这里简单说下第二种过滤器的写法
2、过滤器过滤jsp文件
在项目中,我们需要控制用户不能直接访问JSP页面,需要实现此功能很简单,
(1)使用过滤器控制如果用户请求了JSP页面,直接跳转到指定的URL,如登录页面
(2)在web.xml文件中配置过滤器
(1)过滤器代码
package com.yqfz.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class JspFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig)
throws ServletException
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpServletRequest = (HttpServletRequest)request;
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
String url = httpServletRequest.getRequestURI();
if (url != null && url.endsWith(".jsp"))
{
String contextPath = httpServletRequest.getContextPath();
httpServletResponse.sendRedirect(contextPath + "/index.html");
return;
}
chain.doFilter(httpServletRequest, httpServletResponse);
}
@Override
public void destroy()
{
}
}
(2)
在web.xml文件中配置过滤器
<filter>
<filter-name>jspFilter</filter-name>
<filter-class>com.yqfz.filter.JspFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jspFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>