我有个过滤器是防止用户直接输入项目下的路径进入页面。通俗点就是除了让用户从登录页面进入系统,其他都不能进入系统。在我的登录页面中有个验证码,当login.jsp页面加载的时候会访问一个sevlet,然后这个servlet会画一个验证码发回到login.jsp页面上。问题是:当我写了个下面的过滤器后,验证码的地方就变成一个小红叉,页面的背景图片也没了,过滤器不写的话都有。这是为什么啊?login.jsp:<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登陆页面</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> <script type="text/javascript">
function volidate(){
var form = document.myForm;
if(form.userName.value == ""){
alert("请输入用户名");
form.userName.focus();
return false;
}
if(form.userPwd.value == ""){
alert("请输入密码");
form.userPwd.focus();
return false;
}
if(form.volidateNum.value == ""){
alert("请输入验证码");
form.volidateNum.focus();
return false;
}
}
</script> </head>
<body backGround="images/home_background.gif" style="background-repeat: no-repeat;background-position: center;color: #4169E1;">
<%
Cookie[] c = request.getCookies();
Cookie cookie = null;
if(c != null){
for(Cookie ck:c){
if(ck.getName().equals("loging")){
cookie = ck;
break;
}
}
}
%>
<c:if test="<%=cookie !=null %>">
<jsp:forward page="/servlet/loginServlet">
<jsp:param value="<%=cookie.getValue() %>" name="AutoLoginUserName"/>
</jsp:forward>
</c:if>
<div style="position:absolute;top:400px;left:740px;">
<form name="myForm" action="servlet/loginServlet" method="post" onsubmit="return volidate()">
<table>
<tr>
<td colspan="2" align="center">
<h1>欢迎登陆</h1>
</td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
<tr>
<td>用户:</td>
<td><input type="text" name="userName" /></td>
<td><span id="userNameLabel"></span></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="userPwd"/></td>
<td><span id="userPwdLabel"></span></td>
</tr>
<tr>
<td>验证码</td>
<td><input type="text" name="volidateNum" /></td>
</tr>
<tr>
<td><img src="servlet/ImageServlet"/></td>
<td><a href="<%=basePath%>/login/login.jsp">看不清换一张</a></td>
</tr>
<tr>
<td colspan="2">
<input type="checkbox" name="autoLogin">两周内不用再登录
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="确认"/>
<input type="reset" value="重置"/>
</td>
<td><span id="submitLabel" style="color: red;">${tips }</span></td>
</tr>
<tr>
<td><input type="hidden" name="code"/></td>
</tr>
</table>
</form>
</div>
</body>
</html>
过滤器代码: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;
import javax.servlet.http.HttpSession;import com.lee.model.Operator;public class CheckUserFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request;
// 如果已经创建会话则取出会话
HttpSession session = req.getSession(false);
Operator operator = null;
if(session!=null){
// 查看会话中是否有Operator对象
operator = (Operator)session.getAttribute("operator");
}
if(operator!=null||req.getRequestURI().endsWith("login.jsp")){
chain.doFilter(request, response);
}else{
HttpServletResponse rep = (HttpServletResponse)response;
rep.sendRedirect(req.getContextPath()+"/login/login.jsp");
}
} public void init(FilterConfig arg0) throws ServletException { }}
web.xml:<filter>
<filter-name>CheckUser</filter-name>
<filter-class>com.lee.filter.CheckUserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckUser</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登陆页面</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> <script type="text/javascript">
function volidate(){
var form = document.myForm;
if(form.userName.value == ""){
alert("请输入用户名");
form.userName.focus();
return false;
}
if(form.userPwd.value == ""){
alert("请输入密码");
form.userPwd.focus();
return false;
}
if(form.volidateNum.value == ""){
alert("请输入验证码");
form.volidateNum.focus();
return false;
}
}
</script> </head>
<body backGround="images/home_background.gif" style="background-repeat: no-repeat;background-position: center;color: #4169E1;">
<%
Cookie[] c = request.getCookies();
Cookie cookie = null;
if(c != null){
for(Cookie ck:c){
if(ck.getName().equals("loging")){
cookie = ck;
break;
}
}
}
%>
<c:if test="<%=cookie !=null %>">
<jsp:forward page="/servlet/loginServlet">
<jsp:param value="<%=cookie.getValue() %>" name="AutoLoginUserName"/>
</jsp:forward>
</c:if>
<div style="position:absolute;top:400px;left:740px;">
<form name="myForm" action="servlet/loginServlet" method="post" onsubmit="return volidate()">
<table>
<tr>
<td colspan="2" align="center">
<h1>欢迎登陆</h1>
</td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
<tr>
<td>用户:</td>
<td><input type="text" name="userName" /></td>
<td><span id="userNameLabel"></span></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="userPwd"/></td>
<td><span id="userPwdLabel"></span></td>
</tr>
<tr>
<td>验证码</td>
<td><input type="text" name="volidateNum" /></td>
</tr>
<tr>
<td><img src="servlet/ImageServlet"/></td>
<td><a href="<%=basePath%>/login/login.jsp">看不清换一张</a></td>
</tr>
<tr>
<td colspan="2">
<input type="checkbox" name="autoLogin">两周内不用再登录
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="确认"/>
<input type="reset" value="重置"/>
</td>
<td><span id="submitLabel" style="color: red;">${tips }</span></td>
</tr>
<tr>
<td><input type="hidden" name="code"/></td>
</tr>
</table>
</form>
</div>
</body>
</html>
过滤器代码: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;
import javax.servlet.http.HttpSession;import com.lee.model.Operator;public class CheckUserFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request;
// 如果已经创建会话则取出会话
HttpSession session = req.getSession(false);
Operator operator = null;
if(session!=null){
// 查看会话中是否有Operator对象
operator = (Operator)session.getAttribute("operator");
}
if(operator!=null||req.getRequestURI().endsWith("login.jsp")){
chain.doFilter(request, response);
}else{
HttpServletResponse rep = (HttpServletResponse)response;
rep.sendRedirect(req.getContextPath()+"/login/login.jsp");
}
} public void init(FilterConfig arg0) throws ServletException { }}
web.xml:<filter>
<filter-name>CheckUser</filter-name>
<filter-class>com.lee.filter.CheckUserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckUser</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<jsp:param value="<%=cookie.getValue() %>" name="AutoLoginUserName"/>
</jsp:forward>转发?我觉得应该包含进来吧include
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;
import javax.servlet.http.HttpSession;import com.lee.model.Operator;public class CheckUserFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request;
// 如果已经创建会话则取出会话
HttpSession session = req.getSession(false);
Operator operator = null;
if(session!=null){
// 查看会话中是否有Operator对象
operator = (Operator)session.getAttribute("operator");
}
if(operator!=null||req.getRequestURI().endsWith("login.jsp")||req.getRequestURI().endsWith("ImageServlet"){//改成这样验证码可以得到了
chain.doFilter(request, response);
}else{
HttpServletResponse rep = (HttpServletResponse)response;
rep.sendRedirect(req.getContextPath()+"/login/login.jsp");
}
} public void init(FilterConfig arg0) throws ServletException { }}但是为什么背景图片也不显示呢??
我是在body中加的属性backGround="images/home_background.gif",照理这与过滤器应该没什么关系吧。