为什么设置了filter不起作用。在线

tujunhui 2003-08-21 02:47:29
部分代码如下:
web.xml
----------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>sessionfilter</filter-name>
<filter-class>myweb.filer.SessionAuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>loginservlet</servlet-name>
<servlet-class>myweb.Servlet.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>registerservlet</servlet-name>
<servlet-class>myweb.Servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginservlet</servlet-name>
<url-pattern>/loginservlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>registerservlet</servlet-name>
<url-pattern>/registerservlet</url-pattern>
</servlet-mapping>
</web-app>

--------------------------------------------------
SessionFilter
-------------
public class SessionAuthorizationFilter implements Filter {
protected FilterConfig filterConfig;

public void init(FilterConfig config) {
this.filterConfig = config;
}

public void destroy() {
this.filterConfig = null;
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException{
...
...
HttpServletResponse res = (HttpServletResponse)response;
res.sendRedirect("systemerror.jsp");

}

public FilterConfig getFilterConfig() {
return null;
}

public void setFilterConfig(FilterConfig filterConfig) {
}
}

------------------------------
运行JSP后感觉filter没起作用,正常是不是有请求就跳到systemerror.jsp页面呢?


...全文
575 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
tujunhui 2003-08-22
  • 打赏
  • 举报
回复
好了,终于发现问题了
原来是
<filter-class>myweb.filer.SessionAuthorizationFilter</filter-class>
中大小写问题,不过非常感谢各位
给分
wellsoon 2003-08-21
  • 打赏
  • 举报
回复

晕死:(

楼主,你要把url.equals("systemerror.jsp")

改成url.endsWith("systemerror.jsp")

才可以。

javaboy 2003-08-21
  • 打赏
  • 举报
回复
1、配置没错
2、doFilter死循环了,如上两位说的
3、改后还是死循环,因为getRequestURL()得到的是http://..../systemerror.jsp,永远不会equals("systemerror.jsp")
4、如果只想试试filer是否起作用,可以将doFilter写成:
PrintWriter out = response.getWriter();
out.println("hello world! ")
即可。
这样不管怎么访问,都是hello world!,说明FILTER起作用了。
tujunhui 2003-08-21
  • 打赏
  • 举报
回复
to: wellsoon(wellsoon)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {
try {
request.setCharacterEncoding("GB2312");//设置编码
HttpServletResponse res = (HttpServletResponse)response;
HttpServletRequest req = (HttpServletRequest)request;

res.setHeader("Pragma","No-cache");
res.setHeader("Cache-Control","no-cache");
res.setHeader("Expires","0");//禁止缓存

String url = new String(req.getRequestURL());
if (url.endsWith("systemerror.jsp")){
filterChain.doFilter(req,res);
}

else{
res.sendRedirect("systemerror.jsp");
}



}
catch(ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
}
catch(IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
}

这样也不行,filter根本没起作用。
tujunhui 2003-08-21
  • 打赏
  • 举报
回复
谁能帮帮我,我真是没办法了。
好,哪位兄弟能帮我解决此问题我另加100分。
wellsoon 2003-08-21
  • 打赏
  • 举报
回复
看看这个完整的doFilter函数;

怎么感觉你上面好象写的不太对劲啊,(没有仔细看了)

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {
try {
request.setCharacterEncoding("GB2312");//设置编码
((HttpServletResponse)response).setHeader("Pragma","No-cache");
((HttpServletResponse)response).setHeader("Cache-Control","no-cache");
((HttpServletResponse)response).setHeader("Expires","0");//禁止缓存
//自己添加的代码就这上面四行,其它的都是Jbuilder自动生成的:)
filterChain.doFilter(request, response);
}
catch(ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
}
catch(IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
}


tujunhui 2003-08-21
  • 打赏
  • 举报
回复
我现在的状况就象没有用filter一样。是不是是让filter起作用还有地方要配呀。
tujunhui 2003-08-21
  • 打赏
  • 举报
回复
to:ajoke(可乐) ;wellsoon(wellsoon)
确实是个死循环了。
但是我原来的页面都显示出来了,并没有过滤。


-----------
我成改了
HttpServletResponse res = (HttpServletResponse)response;
HttpServletRequest req = (HttpServletRequest)request;
String url = new String(req.getRequestURL());
if( url.equals("systemerror.jsp") )
filterChain.doFilter(request,response);
else
res.sendRedirect("systemerror.jsp");

测试后,发现也没执行systemerror.jsp页面。

tujunhui 2003-08-21
  • 打赏
  • 举报
回复
我在建SessionFilter时JB9提示我要实现getFilterConfig()与setFilterConfig(FilterConfig filterConfig)方法。

提示:
it does not define getFilterConfig() in myServlet;
不解?
MyFilter不是只需要实现
doFilter(ServletRequest, ServletResponse, FilterChain);
init(FilterConfig);
destroy();
方法就可以了吗?
wellsoon 2003-08-21
  • 打赏
  • 举报
回复

你写成死循环了,

res.sendRedirect("systemerror.jsp");

也是要发出http请求的,

而它又被filter处理,而filter又res.sendRedirect("systemerror.jsp");

成死循环了 。


public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) {
try {
HttpServletRequest httprequest = (HttpServletRequest) request;
String name = new String(httprequest.getRequestURL());
//登陆或者重定向的时候
if name.endsWith("systemerror.jsp") //如果是这个页面,则跳过,
//进入下一个请求的过滤
{
filterChain.doFilter(request, response);
}
else {
ajoke 2003-08-21
  • 打赏
  • 举报
回复
res.sendRedirect("systemerror.jsp");同样要经过这个filter,所以是一个死循环。
你可以先剔除掉以jsp的文件请求,
if( url.equals("systemerror.jsp") )
chain.doFilter(request,response);
else
res.sendRedirect("systemerror.jsp");
tujunhui 2003-08-21
  • 打赏
  • 举报
回复
我只是想测试一下Filter是不是起作用。可是我运行时没有跳到systemerror.jsp。
不知哪里有问题。
treeClimber 2003-08-21
  • 打赏
  • 举报
回复
你这样写当然是永远跳到systemerror.jsp。
想到你原来的地址,只需改为:chain.doFilter(request,response);
tujunhui 2003-08-21
  • 打赏
  • 举报
回复
没人知道吗?
tujunhui 2003-08-21
  • 打赏
  • 举报
回复
我用的是Weblogic6.0
tujunhui 2003-08-21
  • 打赏
  • 举报
回复
我用的是WEBLOGIC6.0

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧