大庆建设大厦网站,logo免费自动生成器app,网站建设与管理是什么意思,青岛网站推广途径刚刚有个朋友问我#xff0c;Servlet的过滤器有什么作用#xff1f; 现在发个帖子说明一下#xff0c; 过滤器是一个对象#xff0c;可以传输请求或修改响应。它可以在请求到达Servlet/JSP之前对其进行预处理#xff0c;而且能够在响应离开Servlet /JSP之后对其…刚刚有个朋友问我Servlet的过滤器有什么作用 现在发个帖子说明一下 过滤器是一个对象可以传输请求或修改响应。它可以在请求到达Servlet/JSP之前对其进行预处理而且能够在响应离开Servlet /JSP之后对其进行后处理。所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话你就可以写一个过滤器类然后在部署描述文 件web.xml中把该过滤器与对应的Servlet/JSP联系起来。你可以一个过滤器以作用于一个或一组servlet零个或多个过滤器能过滤 一个或多个servlet。 一个过滤器实现java.servlet.Filter接口并定义它的三个方法 1 void init(FilterConfig config) throws ServletException:在过滤器执行service前被调用以设置过滤器的配置对象。 2 void destroy();在过滤器执行service后被调用。 3 Void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException; 可能这么说大家还是不太理解。举个例子来说面向对象语言的特征里有个接口的概念一个类实现该接口就必须要实现接口的所有方法。那么如果我写了一个类实现这个接口又不想实现所有方法怎么办呢 写个抽象类实现这个接口的所有方法然后我写的类继承这个抽象类。就可以不用实现所有方法了。看到这里大家都懂了过滤器是干什么的吧 既然懂了那就直接上代码说明一下怎么配置的。 开发EncodingFilter.java文件继承自javax.servlet.Filter
package bluemoon.crm.systemmanage.struts.Filter;import java.io.*;
import javax.servlet.*;public class EncodingFilter implements Filter
{
protected String encoding null;
protected FilterConfig config;public void init(FilterConfig filterConfig) throws ServletException
{
this.config filterConfig;
//从web.xml配置文件中获取编码配置
this.encoding filterConfig.getInitParameter(Encoding);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
if(request.getCharacterEncoding() null)
{
String encode getEncoding();
if(encode ! null)
{
//设置request的编码方式
request.setCharacterEncoding(encode);
}
}
chain.doFilter(request,response);
}
public String getEncoding()
{
return encoding;
}
public void destroy()
{}
} 在web.xml文件中加入如下配置信息
!-- 页面请求编码过滤器 注意每个页面的pageEncodingGB2312 --
filterfilter-nameencodingFilter/filter-namefilter-classbluemoon.crm.systemmanage.struts.Filter.EncodingFilter/filter-classinit-paramparam-nameEncoding/param-nameparam-valueGB2312/param-value/init-param
/filter
filter-mappingfilter-nameencodingFilter/filter-name!-- 对全部的jsp页面有效比较郁闷的是没有太多的配置方式 --url-pattern/*/url-pattern
/filter-mapping 用户是否登陆过滤器 1首先增加一个Action、ActionForm JSP: login.jsp中为一个登陆表单 UserActionForm.java为一个Struts的ActionForm。 UserAction.java将用户登陆信息添加到session中。 开发UserLoginedFilter.java
package bluemoon.crm.systemmanage.struts.Filter;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.*;import bluemoon.crm.systemmanage.struts.forms.UserActionForm;public class UserLoginedFilter extends HttpServlet implements Filter
{
protected FilterConfig config;public void init(FilterConfig filterConfig) throws ServletException
{
this.config filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
RequestDispatcher dispatcher request.getRequestDispatcher(userLogin.jsp);
HttpServletRequest userRequest (HttpServletRequest)request;
UserActionForm userActionForm (UserActionForm)userRequest.getSession().getAttribute(userActionForm);
if(userActionForm null || userActionForm.getUser_name() null || userActionForm.getUser_name().trim().length()1)
{
System.out.println(用户未登录!);
dispatcher.forward(request,response);
return;
}
System.out.println(用户已登录!);
chain.doFilter(request,response);
}
public void destroy()
{
}
}在web.xml文件中添加如下配置信息
!—用户是否登陆过滤器配置 注意只过虑jsp页面不过虑.do --
filter
filter-nameuserLoginedFilter/filter-name
filter-classbluemoon.crm.systemmanage.struts.Filter.UserLoginedFilter/filter-class
/filter
filter-mapping
filter-nameuserLoginedFilter/filter-name
url-pattern*.jsp/url-pattern
/filter-mapping
!—用户是否登陆过滤器配置结束 -- 用户是否登陆过滤器在多模块中的应用
1.修改上面的过滤器代码
package bluemoon.crm.systemmanage.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.*;import bluemoon.crm.systemmanage.struts.forms.UserForm;//用户未登陆过滤器
public class UserNoLoginedFilter extends HttpServlet implements Filter
{protected FilterConfig config;public void init(FilterConfig filterConfig) throws ServletException
{
this.config filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
//首先预定义到要转向的页面由此带来的问题就是userLogin.jsp页面的图片必须要使用绝对路径方法见userLogin.jsp页面
RequestDispatcher dispatcher request.getRequestDispatcher(/toLogin.do?prefixpage/userLogin.jsp);
//注意在struts-config.xml中增加一个Action如下
/*
*action
* attributeuserForm
* nameuserForm
* path/toLogin
* scoperequest
* typeorg.apache.struts.actions.SwitchAction /
*/
// 从session中获取用户form
HttpServletRequest userRequest (HttpServletRequest)request;
UserForm userForm (UserForm)userRequest.getSession().getAttribute(userForm);//如果未登陆则没有userFrom信息
if(userForm null || userForm.getUser_name() null || userForm.getUser_name().trim().length()1)
{
System.out.println(用户未登录!);//分发到登陆页面
dispatcher.forward(request,response);
//((HttpServletResponse)response).sendRedirect(toModule.do?prefixpage/userLogin.jsp);
return;
}System.out.println(用户userForm.getUser_name()已登录!);
chain.doFilter(request,response);
}
public void destroy()
{}
} 注版权所有未经本人同意不得转载转载于:https://www.cnblogs.com/A0926/p/5529661.html