随笔-124  评论-49  文章-56  trackbacks-0
 
ForwardAction是统一访问形式
配置struts-config.xml即可
<action-mappings>
 <action path="/preAddStudentAction" forward="/WEB-INF/AddStudent.jsp" />
 <forward name="success" path="/login_success.jsp"/>
</action-mappings>
全局的
<global-forwards>
 <forward name="success" path="/login_success.jsp"/>
</global-forwards>
对象名为ActionFroward,运行期不能改修配置,即调用froward.setReadirect(false);
ForwardAction执行完所有内容,forward属性到转向页面就停了
posted @ 2009-11-30 08:12 junly 阅读(212) | 评论 (0)编辑 收藏
可以加入ValidatorPlugIn动态验证框架插件
org.apache.struts.validator.ValidatorPlugIn
posted @ 2009-11-30 08:12 junly 阅读(192) | 评论 (0)编辑 收藏

一 配置异常(在struts-config.xml文件中定义),定制异常有两种:
1 全局异常(Global Exceptions)
<global-exceptions>
 <exception key="invalideUser"
 path="/Login.jsp" type="com.future.struts.MyException" />
</global-exceptions>
2 局部异常(Local Exception)
<action-mappings>
  <action attribute="loginForm" name="loginForm"
   path="/loginAction(出错转向的路径)" scope="request"
   input="/login.jsp"//异常转向的页面,同exception中的path,优先级path高于input
  />
  <exception key="invalideUser(异常信息的key)" path="/Error.jsp"
  type="cn.itcast.ItcastException(异常类全名)" />
</action-mappings>
 path:出现异常后跳转的页面
 key:异常信息的键,对应的值在资源文件当中
 type:所要处理的异常类
二 在相应的action中的execute方法中抛出异常
三 在异常处理页面(path所指的页面)使用html:errors标签打印异常信息
1 建立资源文件ApplicationResources.properties
内容:invaliduser=it is an invalid user(key/value)
2 配置struts-config.xml文件
  <message-resources parameter="cn.itcast.ApplicationResources" key="invalideuser"/>
3 使用html:errors标记打印信息
  <html:errors />
  --------------------------------------------
1 编程式异常
  * 截获异常
  * 创建相应的异常消息
  * 传递异常消息
  * 转向相应的页面处理异常
2 声明式异常(自动处理的异常)
  * 在struts-config.xml文件中配置<exeception/>标签
  * 理解局部和全局exception
  * 注意局部<exception/>标签需要配置到<forward/>标签的前面
 
  <exeception/>标签中的属性说明:
      * key:指异常信息对应的国际化消息文本,这个key值需要在国际化资源文件中定义
      * type:处理那种异常
      * path:定义一但出现异常,需要转向那个页面,如果不定义path,
             默认情况下将使用<action>标签中input属性对应的页面
      * scope:可以取值request和session,默认为request
      * handler:导常的处理类,struts默认采用org.apache.struts.action.ExceptionHandler,
                如果做个性化的异常处理可以继承此类复写相应的方法
-------------------------------------------------------------------------
个性异常类定义
一 方法:
1 定义MessageResources.propertices资源文件
2 在struts-config中配置<exception/>
  <exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"
   handler="com.bjsxt.struts.ErrorCodeException" />
3 编写异常类ErrorCodeException继承RuntimeException
public class ErrorCodeException extends RuntimeException {
 private String errorCode;//这是key对应的值
 private Object[] args;//这是参数集合
 public ErrorCodeException(String errorCode){
  this(errorCode,null);
 }
 public ErrorCodeException(String errorCode,Object args0){
  this(errorCode,new Object[]{args0});
 }
 public ErrorCodeException(String errorCode,Object[] args){
  this.errorCode=errorCode;
  this.args=args;
 }
 public String getErrorCode() {
  return errorCode;
 }
 public Object[] getArgs() {
  return args;
 }
}
4 编写ErrorCodeExceptionHandler类继承ExceptionHandler,
  复写public ActionForward execute(Exception ex, ExceptionConfig ae,
         ActionMapping mapping, ActionForm formInstance,
         HttpServletRequest request, HttpServletResponse response)
         throws ServletException{}方法:
public ActionForward execute(Exception ex, ExceptionConfig ae,
         ActionMapping mapping, ActionForm formInstance,
         HttpServletRequest request, HttpServletResponse response)
         throws ServletException {
         //添加判断
       ------------------------------------------------------------
      if(!(ex instanceof ErrorCodeException)){
       return super.execute(ex, ae, mapping, formInstance, request, response);
      }
      ------------------------------------------------------------
         ActionForward forward;
         ActionMessage error;
         String property;

         // Build the forward from the exception mapping if it exists
         // or from the form input
         if (ae.getPath() != null) {
             forward = new ActionForward(ae.getPath());
         } else {
             forward = mapping.getInputForward();
         }

         // Figure out the error
         if (ex instanceof ModuleException) {
             error = ((ModuleException) ex).getActionMessage();
             property = ((ModuleException) ex).getProperty();
         } else {
          //改修这个地方
          //----------------------------------------------
          ErrorCodeException ece=(ErrorCodeException)ex;
          String errorCode=ece.getErrorCode();
          Object[] args=ece.getArgs();
          error = new ActionMessage(errorCode, args);
          property = error.getKey();
          //------------------------------------------------
             //error = new ActionMessage(ae.getKey(), ex.getMessage());
             //property = error.getKey();
         }

         this.logException(ex);

         // Store the exception
         request.setAttribute(Globals.EXCEPTION_KEY, ex);
         this.storeException(request, property, error, forward, ae.getScope());

         if (!response.isCommitted()) {
             return forward;
         }
         return null;
     }
}
5 页面直接抛出异常
public void login(String username,String password){
  if(!"admin".equals(username)){
    throw new ErrorCodeException("user.not.found",username,age);
  }
}
---------------------------------------------------------------------
二 方法:
1 定义MessageResources.propertices资源文件
  内容:error.exception={0}
2 在struts-config中配置<exception/>
  <exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"/>
3 编写异常类ErrorCodeException继承RuntimeException
public class ErrorCodeException extends RuntimeException {
  public ErrorCodeException(String msg){
    super(msg);
  }
}
4 页面直接抛出异常
public void login(String username,String password){
  if(!"admin".equals(username)){
    throw new ErrorCodeException("名称"+usrname+"错误!");
  }
}


--------------------------------------------------------------------------
1 ApplicationResources.properties文件
   num2Meg=is not a double
2 struts-config.xml
   <message-resources parameter="ApplicationResources" />
3 ActionMessages errs=new ActionMessages();
errs.add("num1Error",new ActionMessage("num2Meg"));
//errs.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("num2Meg"));


this.saveErrors(request,errs);

页面
<html:errors property="num1Error"/>
//<html:errors/>//全局不能指定property
errs.header="<script>alert("
errs.footer=")</script>"

posted @ 2009-11-30 08:11 junly 阅读(478) | 评论 (0)编辑 收藏

Converter添加java.util.Date类型转换器
1 编写UtilDateConverter转换器类,
实现Converter接口的convert方法(com.sun.org.apache.commons.beanutils.Converter)
public class UtilDateConverter implements Converter {
 public Object convert(Class type, Object value) {
  System.out.println("UtilDateConverter.value="+value);
  if(value==null){
   return value;
  }
  if(value instanceof Date){//instanceof判断是否属于此类型
   return value;
  }
  Date d=null;
  if(value instanceof String){

   SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
   try {
    d=sdf.parse(value.toString());
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return d;
 }
}
2 利用servlet的init()方法注册转换器到ConvertUtils(com.sun.org.apache.commons.beanutils.ConvertUtils)
public class UtilDateConverterInitServlet extends HttpServlet {
 public void init() throws ServletException {
  System.out.println("UtilDateConverterInitServlet.init()");
  ConvertUtils.register(new UtilDateConverter(),Date.class);
 }
}
3 配置servlet,并设</load-on-startup>值
 <servlet>
    <servlet-name>UtilDateConverterInitServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.UtilDateConverterInitServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>UtilDateConverterInitServlet</servlet-name>
    <url-pattern>/servlet/UtilDateConverterInitServlet</url-pattern>
  </servlet-mapping>
------------------------------------------------------------------------
方法二:
1 编写UtilDateConverter转换器类,
实现Converter接口的convert方法(com.sun.org.apache.commons.beanutils.Converter)
(同上)
2 编写UtilDateConverterInitWithPlugIn类实现PlugIn接口的init()方法
public class UtilDateConverterInitWithPlugIn implements PlugIn {
 public void destroy() {
 }
 public void init(ActionServlet arg0, ModuleConfig arg1)
   throws ServletException {
  System.out.println("UtilDateConverterInitServlet.init()");
  ConvertUtils.register(new UtilDateConverter(),Date.class);
 }
}
3 在struts-config.xml文件中配置<plug-in>标签
<plug-in className="com.bjsxt.servlet.UtilDateConverterInitWithPlugIn"/>

posted @ 2009-11-30 08:10 junly 阅读(356) | 评论 (0)编辑 收藏

DynaActionForm 配态form
1 配置动态form属性<form-property>name属性,type属性类型,primitive type必须使用包装类型。
<form-beans>
   <form-bean name="addStudentForm" type="org.apache.struts.action.DynaActionForm">
    <form-property name="sname" type="java.lang.String" initial=""(初始值)></form-property>
    <form-property name="birth" type="java.sql.Date"></form-property>
    <form-property name="major" type="java.lang.String"></form-property>
    <form-property name="score" type="java.util.float"></form-property>
   </form-bean>
</form-beans>
2 配置action标记
  <action-mappings>
   <action path="/addstudentform"
           type="com.yourcompany.struts.AddAction"
           name="addStudentForm(form的名子)">
   </action>
  </action-mappings>
3 获取页面的值:
动态ActionForm其实是把页面的html元素的名字和值放到名字和值放到map中,所以通过get方法可以取出相应的值
(1) String sname=(String)addStudentForm.get("sname");
 EL:   ${dynabean(addStudentForm).map.prop}
(2) String sname=(String)addStudentForm.get("sname");
动态ActionForm的验证,通常使用动态验证框架validator

属性名及类型一致才可以拷贝
可以通过BeanUtils.copyProperties(userbean目标对象,form源对象)方法进行对象的复制

posted @ 2009-11-30 08:10 junly 阅读(289) | 评论 (0)编辑 收藏

网站struts.apache.org
实践步骤:
1 搭建环境
  (1)导入jar包
     使用其中相关的类(可将所有jar全部导入)
  (2)建立一个配置文件:struts-config.xml
     作用:方便struts用户使用
     位置:一般放在WEB-INF下
  (3)配置web.xml
     注册struts中心控制器-----ActionServlet
  <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>()Navigate下Open Type输入actionServlet复制目录
  <init-param>//读初始化文件的信息
   <param-name>config</param-name>//参数名
   <param-value>/WEB-INF/struts-config.xml</param-value>//文件名
  </init-param>
  <load-on-startup>0</load-on-startup>//服务启起就实例化,0最早
 </servlet>
 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>//对所有的do请求都作处理
 </servlet-mapping>
  注意事项:
  struts配置文件的位置
  预先加载控制器
------------------------------------------------------------------
2 建立ActionForm
  (1)建一个Bean类,继承org.apache.struts.action.ActionForm
  (2)注册,修改配置文件struts-config.xml
  <form-bean>
  <form-beans>
   <form-bean name="变理名" type="类全名"/>
  </form-beans>
  意注:struts-config.xml文件中<form-beans>和<action-mappings>的顺序不能变,有DTD约束规定。
------------------------------------------------------------
3 建立Action
 (1)建立一个类,继承org.apache.struts.action.Action。重写execute方法
    需要强制转型
    LoginFrom lof=(LoginFrom)form;
    调用其它模块
    跳转(根据关键字,关键字参照该action中forward标签中的name属性)
    mapping.findForward("name属性");
 (2)注册,修改配置文件struts-config.xml
 <action>
 <action-mappings>
        <action path="指明调用者(JSP)能通过中心控制器ActionServlet找到该Action"
                type="指明该action类全名"
                name="该action引用的form的名称">
           <forward name="loginSuccess" path="index.jsp"></forward>
        </action>
    </action-mappings>
4 页面访问
<form action="<%=request.getContextPath()%>/login.do">
-------------------------------------------------------------------
Struts framework的工作原理工科

1 读敢配置 (初始化ModuleConfig对象)
Struts框架总控制器(ActionServlet)是一个Servlet,在web.xml中配置成自动启动的Servlet。
读取配置文件(struts-config.xml)的配置信息,为不同的Struts模块初始化相应的ModuleConfig
对名:ActionConfig,
      ControlConfig,
      FormBeanConfig,
      MessageResourcesConfig
2 发送请求
请求上传WEB服务器(处理.do的请求)
3 填充FORM(实例化,复位,填充数据,校验,保存)
(*.do请求)从ActionConfig中找出对应该请求的Action子类,如没有对应的Action,控制器直接转发给
JSP或静态页面。如有对应的Action且这个Action有一个相应的ActionForm.
ActionForm被实例化并用http请求的数据填充其属性,并且保存在ServletContext中(request或session中),
这样它们就可以被其它Action对象或者JSP调用。
4 派发请求
控制器根据配置信息ActionConfig将请求派发到具体的Action,相应的FormBean一并传给这个Action的execute()方法.
5 处理业务
Action一般只包含一个execute方法,它负责执行相应的业务逻辑(调用其它业务模块).完毕返回一个ActionForward对象,
控制器通过该ActionForward对象来进行转发工作
6 返回响应
Action根据业务处理的不同结果返回一个目标响应对象给总控制器,该目标响应对象对应一个具体的JSP页面或另一Action.
7 查找响应(可以是一个Action)
8 响应用户
-----------------------------------------------------------------------------------------------------------
组件
ActionSerlet,Action Classes,Action Mapping(此处包括ActionForward),ActionForm Bean.
Struts中的MVC:
1 模型(Model):本质上来说在Struts中Model是一个商业逻辑类,开发者实现商业逻辑。
2 视图(View):View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用他们可以快速建立应用系统的界面。
3 控制器(Controller),前端控制器是一个Servlet,它将客户端请求转发到相应的后端控制器Action类。
注意:官方认为ActionForm Bean应为控制层(Controller)组件,自已写的JavaBeans为模型(Model)
-----------------------------------------------------------------------------------
ActionServlet(中心控制器)
 定义:继承自javax.servlet.http.HttpServlet类,是中心控制器(总控制器)。它提供一个中心位置来处理全部的终端请求。
 作用:接受请求,填充数据,派发请求,响应用户。
 配置:在web.xml文件声明。
 例子:
 <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>
注意:struts-config.xml文件系统默主调用,可以不<init-param>配置
<init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
-------------------------------------------------------------------
Action
发出该action请求时初始化,不是在读取配置时,并且只初始化一次。
Action是线程不安全的,因为所有的请求共享一个别action实例。
所以:不要用实例变量或者类变是共享只是针对某个请求的数据
      注意资源操作的同步性。
应用:
统计一个action访问次数
public class CountAction extends Action {
 private Integer count=0;
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  synchronized(count){//加锁
  count++;
  }
  PrintWriter out=response.getWriter();
  out.print("count="+count);
  return null;
 }
}

----------------------------------------------------
ActionMapping
是对struts-config.xml中action标签中所有属性的封装类。
mapping.getName()(String)
mapping.getPath()(String)
mapping.getType()(String)
String[] forwardNames=mapping.findForwards();
for(String forward:forwardNames){
 ActionForward forward=mapping.findForward(forward);
 String forwardPath=forward.getPath();
}
相应的set方法不能使用。
-----------------------------------------------------
ActionForward(导航器)
ActionForward对象是配置对象。这些配置对象拥有独一无二的标识以允许他们按照name属性来检索。
name:逻辑名称
path:页面或者模块访问路径。
redirect:默认为false.设为true时为容器外跳转,相当于response.sendRedirect();
在xml文件中的path中要写绝对路径。
--------------------------------------------------------------
ActionForm工作原理
步骤:
(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射
(2)根据name属性,查找form bean中的配置信息
(3)检查Action的form bean的使用范围,确定在此范围下(request,session),是否已经有些form bean的实例。
(4)假如当前范围下,已经存在了些form bean的实例,而是对当前请求来说,是同一种类型的话,就重用。
(5)否则,就重新构建一个form bean的实例(调用构造方法),并且保存在一定作用范围。
(6)form bean的reset()方法被调用
   在作数据收集前被调用,是一个重置的方法.
(7)调用对应的setter方法,对状态属性赋值
(8)如果validatede的属性设置为true,就调用form bean的validate()方法。
   该方法进行表单的服务器端验证.
(9)如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。
注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以重新覆盖。

           
注意:
1 无参构造方法必须有
2 Scope缺省值是session
3 调用setter方法,实质上是对应的标准set方法
分析:
4 从过程去查看
HttpSessionAttributeListener
ServletRequestAttributeListener
5 从结果去查看
---------------------------------------------------
ActionForm
reset()方法,用于恢复属性,在重新复值前由controller调用。
valldate()方法,用于校验属性,返回ActionErrors,如果成功返回null,默认返回null.
关闭校验功能设置struts-config.xml中<action>标签的validate属性为false.
validate
----------------------------------------------------------
struts-config.xml文件中的action标签
1 attribute属性
用来存取form的关键字,缺省值与name一样,如果设了必须用该属性。
2 validate属性(action中的属性)
用来控制是否校验表单,缺省为false,false不校验。
3 input属性
当表单校验失败时将请求转发的URL(或目标模块,可以为另一个别action),结合validate属性使用,为相对路径。
在ActionForm类的validate方法中手动添加错误
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
  ActionErrors errors=new ActionErrors();
  ActionMessage message=new ActionMessage("error");//应为键值对
  errors.add("error",message);
  return errors;
}
---------------------------------------------------------------------------
struts-config.xml文件中的<global-forwards>全局跳转标签
<global-forwards>
  <forward name="error" path="Error.jsp"/>
</global-forwards>
使用方式同action中的forwar标签

posted @ 2009-11-29 22:59 junly 阅读(2308) | 评论 (0)编辑 收藏
1 实例化:servlet容器创建servlet实例,构造方法
2 初始化:该容器调用init()方法
  init()
  init(ServletConfig config){
    config.getParamter("aaa");
  }
  web.xml
  <servlet>
 <param-name>aaa</param-name>
 <param-value>1</param-value>
  </servlet>
3 服务:如果请求servlet,则容器调用service()方法
4 销毁:销毁实例前调用destroy()方法
posted @ 2009-11-29 22:50 junly 阅读(217) | 评论 (0)编辑 收藏

一个java类,运行在服务器端的,处理web请求
//客户端跳转
response.sendRedirect()
//服务器端跳转
RequsetDispatcher dispatcher=request.getRequestDispatcher("/...");
dispatcher.forward(request,response);
dispatcher.include()
1 out
struts中用PrintWriter out=request.getWriter()得到
2 request
(1)String getParameter(String name)         根据页面表单组件名称获取页面提交数据
(2)String[] getParameterValues(String name) 获取一个页面表单组件对应多个值时的用户的请求数据
(3)void setCharacterEncoding(String name)   指定每个请求的编码,在调用request.getParameter()方法之前进行设置,可以用于解决中文乱码
(4)request.getRequestDispatcher(String path)返回一个javax.servlet.RequestDispatcher对象,该对象的forward方法用于转发请求
   javax.servlet.RequestDispatcher dispatcher=request.getRequestDispatcher("/a.jsp(目标页面)");
   dispatcher.forward(request,response);
3 response
response.sendRedirect(String location)重定向一个URL

4 session
(1)void setAttribute(String key,Object value)
(2)Object getAttribute(String key)
(3)HttpSession request.getSession()
(4)HttpSession request.getSession(boolean true)
(5)void session.setMaxInactiveInterval(2)//设置会话过期时间
(6)void invalidate()//销毁session,删除HttpSession对象及数据
(7)void remove(String key)
(8)boolean isNew()//是否是最新会话
在web.xml中配置session默认过期时间
 <session-config>
  <session-timeout>5</session-timeout>//单位为分钟
 </session-config>
5 applicate->servletContext
(1)void setAttribute(String key,Object value)
(2)Object getAttribute(String key)
6 pageContext
6 service方法

posted @ 2009-11-29 22:49 junly 阅读(230) | 评论 (0)编辑 收藏

web Service
xml数据格式
SOAP(简单对象访问)
WSDL
-----------
开发步骤
1 建立服务并发布
  XFire
  × 导入jar包
  * service.xml
  * web.xml
 
  创建接口
  public interface IProcessCredit{
     public String sayHello(String username);
  }
  和实现类
  public class ProcessCreditImpt implement IProcessCredit{
     public String sayHello(String username){
        return "你好"+username;
     }
  }
  编写配置文件
  services.xml
  <service>
  <name>CreditCard</name>
  <namespace>http://www.CreditCard.com</namespace>
  <serviceClass>
  org.com.IProcessCredit
  </serviceClass>
  <implementationClass>
  org.com.ProcessCreditImpt
  </implementationClass>
 
2 客户端servlet调用服务
  1 导入Service的jar
  2 导入XFire的jar
  3 Service
  Service service=new ObjectServiceFactory().create(IProcessCredit.class);
  XFire xfire=XfireFactory.newInstance().getXFire();
  XFireProxyFactory factory=new XFireProxyFactory(xfire);
  String url="";
  IProcessCredit c=(IProcessCredit)factor.create(service,url);
  c.sayHello("ddddddddddd");


-----------------------------------------------------------------
步骤:
1 建立接口
public interface IBookService {
 public int addBook(Book book);
}

2 实现接口
public class ProessBookService implements IBookService {
 public int addBook(Book book) {
  BookDao bookDao=new BookDao();
  return bookDao.addBook(book);
 }
}

3 在src下创建META-INF文件夹,在META-INF下创建xfire文件夹,在xfire下创建services.xml
  (src-->META-INF-->xfire-->services.xml)
<service>
<name>BookService</name>
<namespace>http://www.book.com</namespace>
<serviceClass>org.book.IBookService </serviceClass>
<implementationClass>org.book.ProessBookService </implementationClass>
</service>
4 编写web.xml
  <servlet>
  <servlet-name>XFireServlet</servlet-name>
  <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>XFireServlet</servlet-name>
  <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
5 编写调用方法
Service serviceModle=new ObjectServiceFactory().create(IBookService.class);
XFire xFire=XFireFactory.newInstance().getXFire();
XFireProxyFactory factory=new XFireProxyFactory(xFire);
String urlString="http://localhost:8080/ownhome/services/ProessBookService";
IBookService bookService=(IBookService) factory.create(serviceModle, urlString);

posted @ 2009-11-29 22:48 junly 阅读(276) | 评论 (0)编辑 收藏
servlet边滤器
1 编写实现javax.servlet.Filter接口的类
public class MyFilter implements Filter {
 private FilterConfig config;
 private String encoding="IS0-8859-1";
 public void destroy() {//过滤器当前类被消灭时调用的方法
 }
 public void doFilter(ServletRequest request, ServletResponse response,//过滤器主方法
   FilterChain chain) throws IOException, ServletException {
  request.setCharacterEncoding(encoding);
  chain.doFilter(request, response);//设置其可被下个过滤器继续调用
 }
 public void init(FilterConfig config) throws ServletException {//过滤器当前类初始化时调用此方法
  this.config=config;
  String s=config.getInitParameter("encoding");//得到相应参数
  if(s!=null){
   encoding=s;
  }
 }
}
FilterConfig类用于获得初始化的参数的包装类
FilterChain类是过滤器的链,可以多重过滤
2 配置Servlet过滤器
<filter>
   <filter-name>EncodingFilter</filter-name>过滤器名称
   <filter-class>com.webs.MyFilter</filter-class>对应类
   <init-param>参数
    <param-name>encoding</param-name>参数名
    <param-value>UTF-8</param-value>参数值
   </init-param>
</filter>
<filter-mapping>映射特定资源
  <filter-name>EncodingFilter</filter-name>过滤器名称
  <url-pattern>/*</url-pattern>
</filter-mapping>
3 页面
4 注意:服务器端跳转是不过滤的
posted @ 2009-11-29 22:47 junly 阅读(203) | 评论 (0)编辑 收藏
仅列出标题
共18页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last