比如说我现在有一个这样的简单项目(MVC)
登陆页面 login.jsp
主页 index.jsp
一个servlet LoginServlet.java 用来处理登陆业务
在不用过滤器的情况下 要实现必须登陆才能访问我的index.jsp
那么我的index.jsp必须要对一个session进行判断 判断是否进行登陆 否则会forward到login.jsp上去
session在LoginServlet.java 中当ID和PASSWORD都正确时进行设置
可能在index.jsp的代码如下
代码块 #1 <%
if(session.getAttribute("uname")!=null)
{
%>
<h2>登陆成功</h2><br>
欢迎,<font color="red"><%=session.getAttribute("uname") %></font>光临留言管理系统<br>
<h3><a href="notes_list.jsp">进入留言管理页面</a></h3>
<%
}else
{
//经过登陆
}
%>
那么我现在加入一个LoginFilter.java用来处理该过程 减少这个经常出现的代码块
LoginFilter.java代码如下public class LoginFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletrequest;
HttpSession session = request.getSession(true);
if(session.getAttribute("uname")!=null)
{
filterchain.doFilter(servletrequest, servletresponse);
}
else
{
request.getRequestDispatcher("login.jsp").forward(servletrequest, servletresponse);
}
} public void init(FilterConfig filterconfig) throws ServletException {
}}那么在我的web.xml里面的<filter>
<filter-name>loginfilter</filter-name>
<filter-class>cn.suiyang.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>中的<url-pattern>/*</url-pattern> 这样写是可以去掉很多代码块 #1
但是 由于在<url-pattern></url-pattern>里面是 /*所以我的
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.ser</url-pattern>
</servlet-mapping>
里面影射的/login.ser也会进行过滤
那么 登陆操作的时候 就不能进行
当我在login.jsp登陆的时候 提交到 LoginServlet.java 的时候进行过滤
那么 session.getAttribute("uname")为null就会回到login.jsp如果大家看到这里的话 回问 那你不知道将web.xml里面 过滤器的配置改成 <filter-mapping>
<filter-name>loginfilter</filter-name>
<url-pattern>/login.jsp</url-pattern>
</filter-mapping>
这样只对login.jsp进行过滤 而不对 Servlet映射的地址过滤?
这样确实可以 但是 如果我不是只有一个index.jsp页面呢?我有100个1000个甚至更多呢?
难道我要在我的web.xml里面写
<filter-mapping> .....
</filter-mapping>
快写100个1000个吗?初学JSP,对这个问题有点不解 希望各位能够指点
要使用过滤器来完成我这样的功能 但是不过滤掉一些Servlet和一些我不希望进行过滤的页面 怎样处理?不知道问题描述的可清楚 在线等解答 不清楚的地方我会在描述
登陆页面 login.jsp
主页 index.jsp
一个servlet LoginServlet.java 用来处理登陆业务
在不用过滤器的情况下 要实现必须登陆才能访问我的index.jsp
那么我的index.jsp必须要对一个session进行判断 判断是否进行登陆 否则会forward到login.jsp上去
session在LoginServlet.java 中当ID和PASSWORD都正确时进行设置
可能在index.jsp的代码如下
代码块 #1 <%
if(session.getAttribute("uname")!=null)
{
%>
<h2>登陆成功</h2><br>
欢迎,<font color="red"><%=session.getAttribute("uname") %></font>光临留言管理系统<br>
<h3><a href="notes_list.jsp">进入留言管理页面</a></h3>
<%
}else
{
//经过登陆
}
%>
那么我现在加入一个LoginFilter.java用来处理该过程 减少这个经常出现的代码块
LoginFilter.java代码如下public class LoginFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletrequest;
HttpSession session = request.getSession(true);
if(session.getAttribute("uname")!=null)
{
filterchain.doFilter(servletrequest, servletresponse);
}
else
{
request.getRequestDispatcher("login.jsp").forward(servletrequest, servletresponse);
}
} public void init(FilterConfig filterconfig) throws ServletException {
}}那么在我的web.xml里面的<filter>
<filter-name>loginfilter</filter-name>
<filter-class>cn.suiyang.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>中的<url-pattern>/*</url-pattern> 这样写是可以去掉很多代码块 #1
但是 由于在<url-pattern></url-pattern>里面是 /*所以我的
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.ser</url-pattern>
</servlet-mapping>
里面影射的/login.ser也会进行过滤
那么 登陆操作的时候 就不能进行
当我在login.jsp登陆的时候 提交到 LoginServlet.java 的时候进行过滤
那么 session.getAttribute("uname")为null就会回到login.jsp如果大家看到这里的话 回问 那你不知道将web.xml里面 过滤器的配置改成 <filter-mapping>
<filter-name>loginfilter</filter-name>
<url-pattern>/login.jsp</url-pattern>
</filter-mapping>
这样只对login.jsp进行过滤 而不对 Servlet映射的地址过滤?
这样确实可以 但是 如果我不是只有一个index.jsp页面呢?我有100个1000个甚至更多呢?
难道我要在我的web.xml里面写
<filter-mapping> .....
</filter-mapping>
快写100个1000个吗?初学JSP,对这个问题有点不解 希望各位能够指点
要使用过滤器来完成我这样的功能 但是不过滤掉一些Servlet和一些我不希望进行过滤的页面 怎样处理?不知道问题描述的可清楚 在线等解答 不清楚的地方我会在描述
如果大家看到这里的话 回问 那你不知道将web.xml里面 过滤器的配置改成 <filter-mapping>
<filter-name>loginfilter </filter-name>
<url-pattern>/login.jsp </url-pattern>
</filter-mapping>
这样只对login.jsp进行过滤 而不对 Servlet映射的地址过滤?
这里因该是 <url-pattern>/index.jsp </url-pattern>
<filter-name>loginfilter </filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 試試看
但是你好像没有自己看我的帖子 如果
这么写
<filter-mapping>
<filter-name>loginfilter </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping> 那么servlet他的mapping同样会被过滤
然后在filter里头用java判断处理哪些url要不,你就写1000个filter-mapping吧。