本文所写涉及的struts的版本是1.3x.
一、改写struts的ActionServlet. 重写process()方法:
package com.soft.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionServlet;
public class MyActionServlet extends ActionServlet {
protected void process(HttpServletRequest request,
HttpServletResponse response) throws java.io.IOException,
javax.servlet.ServletException {
/** @todo Override this org.apache.struts.action.ActionServlet method */
request.setCharacterEncoding("GB2312");
super.process(request, response);
}
}
配置相应的web.xml文件
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>com.soft.struts.action.MyActionServlet</servlet-class>
......
</servlet>
二、写一个过滤器类EncodingFilter.class,执行相关路径之前执行这个过滤器类。
package com.soft.struts.filter;
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* class EncodingFilter
*
* @author xiaoqing.yu
*/
public class EncodingFilter implements Filter {
/** encoding */
protected String encoding = null;
/** config */
protected FilterConfig config;
/** log */
protected static final Log log = LogFactory.getLog(EncodingFilter.class);
/**
* Mehtod destroy
*/
public void destroy() {
this.config = null;
this.encoding = null;
}
/**
* Method doFilter
*
* @param request
* ServletRequest
* @param response
* ServletResponse
* @param filterChain
* FilterChain
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
log.info("Before excuted the body of method EncodingFilter.doFilter(), Character Encoding is : "
+ request.getCharacterEncoding());
log.info("Excuting the body of method EncodingFilter.doFilter()...");
if (request.getCharacterEncoding() == null) {
if (this.getEncoding() != null) {
request.setCharacterEncoding(this.getEncoding());
}
}
log.info("After excuted the body of method EncodingFilter.doFilter(), Character Encoding is : "
+ request.getCharacterEncoding());
filterChain.doFilter(request, response);
}
/**
* Method init
*
* @param filterConfig
* FilterConfig
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
this.encoding = this.config.getInitParameter("Encoding");
log.info("Init Parameter Encoding : " + this.encoding);
}
/**
* Method getEncoding
*
* @return String
*/
public String getEncoding() {
return encoding;
}
}
配置相应web.xml文件:
<filter>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.soft.struts.filter.EncodingFilter</filter-class>
<init-param>
<param-name>Encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
三、通过Chain来处理:
使用chain的方法来处理的前提是,struts用org.apache.struts.chain.ComposableRequestProcessor类来处理用户提交的请求。不是RequestProcessor类。
写一个custom-chain-config.xml:
<?xml version="1.0" ?>
<catalog name="struts">
<chain name="servlet-standard-preprocess">
<command className="com.soft.struts.action.chain.EncodingChain"/>
</chain>
</catalog>
EncodingChain.java实现org.apache.commons.chain.Command:
package com.soft.struts.action.chain;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.chain.Command;
import org.apache.commons.chain.Context;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.chain.contexts.ServletActionContext;
/**
* class EncodingChain
* @author xiaoqing.yu
*/
public class EncodingChain implements Command {
/** log */
protected static final Log log = LogFactory.getLog(TestChain.class);
public boolean execute(Context context) throws Exception {
ServletActionContext sacontext = (ServletActionContext) context;
HttpServletRequest request = sacontext.getRequest();
request.setCharacterEncoding("GB2312");
log.info("Character Encoding : " + request.getCharacterEncoding());
log.info("Chain test successfully...");
return false;
}
}
配置相应web.xml文件:
<servlet>
......
<init-param>
<param-name>chainConfig</param-name>
<param-value>
org/apache/struts/chain/chain-config.xml,
/WEB-INF/custom-chain-config.xml
</param-value>
</init-param>
......
</servlet>
分享到:
相关推荐
在本项目中,Struts1.3的动作类(Action)会接收到前端发来的请求,然后调用业务逻辑层(Service)的方法,处理完业务后,再返回相应的结果到JSP页面展示。 Spring4.x则是一个全面的轻量级应用框架,它提供了依赖...
API文档(Struts1.3.chm)通常包含了框架的所有核心组件、接口、类以及方法的详细说明,是开发者理解和使用Struts1.3的关键资源。以下是Struts1.3 API中的一些重要知识点: 1. **ActionServlet**:这是Struts框架的...
04 Struts_04DispatchAction : 分发Action,根据设置的参数值提交到不同的方法进行处理业务,演示数学运算 05 Struts_05DynaActionForm : 相对应ActionForm来说,动态ActionForm只需要在配置文件中配置就可以了,...
- **数据库编码**: 设置为`gb2312`,这是一种中文编码格式,适用于中文数据的存储。 - **用户名密码**: 设为`root`,密码为`root`(或自定义)。 #### 二、开发环境搭建 ##### 1.2.1 创建Web项目 在MyEclipse中...
Struts1.3框架在构建Web应用程序时,提供了强大的多语言支持、异常处理机制以及StrutsMenu组件的应用,这些功能极大地增强了应用的国际化和用户体验。下面将详细解释这些知识点。 **Struts多语言应用** 1. **资源...
在Java Web开发中,Struts1.3、Hibernate3.3和Java Persistence API (JPA)的集成是一个常见的技术组合,用于构建高效且可扩展的三层架构应用。这种集成可以实现模型-视图-控制器(MVC)设计模式,通过Struts处理请求和...
通过分析这个"struts1.3 demo",开发者可以深入理解Struts1的工作原理,学习如何组织一个简单的CRUD(创建、读取、更新、删除)应用,同时掌握处理乱码问题的方法,这对于理解Web应用的开发流程和架构设计具有重要...
在这个用户登录实例中,我们专注于Struts1.3版本,它提供了强大的控制层功能,使得开发者能够更好地组织和管理应用程序的流程。 首先,让我们了解Struts1.3的关键特性。Struts1.3引入了许多改进,如增强的异常处理...
在这个"ssh struts1.3集成"的主题中,我们将深入探讨这三个组件的集成以及相关的知识点。 1. **Struts 1.3**: - **Model**: Struts框架的核心是ActionServlet,它作为控制器处理HTTP请求,调用业务逻辑(模型层)...
例如,对于Struts1,可以将`<forward>`标签的路径设置为不包含`.action`的URL;对于Struts2,可以使用`<action>`标签的`namespace`和`name`属性,结合`result`配置来构建无后缀的URL。 2. **使用Filter**: 可以...
#### 三、Struts2的关键组件详解 ##### 3.1 StrutsPrepareAndExecuteFilter - `StrutsPrepareAndExecuteFilter`是Struts2的核心过滤器,它主要负责初始化框架以及处理请求。此过滤器是Struts2的核心组件之一,没有...
1.3 Struts 2框架 9 1.3.1 Struts 2简史 9 1.3.2 Struts 2概览:MVC模式 10 1.3.3 Struts 2的工作原理 12 1.4 小结 14 第2章 初识Struts 2 16 2.1 声明性架构 16 2.1.1 两种配置 16 2.1.2 声明架构的两种方式 17 ...
在Struts2框架中,实现文件上传主要依赖于表单的`enctype`属性设置为`multipart/form-data`。这种设置允许表单中的文件作为请求的一部分发送到服务器端。 **1.2 enctype详解** - **application/x-...
Struts是Apache软件基金会下的一个开源项目,是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。自其诞生以来,Struts在Web开发领域扮演了重要的角色,经历了多个版本的迭代,每个版本都有其独特...
【描述】中提到的项目是一个基于Struts1.3、JSP、JSTL和EL(Expression Language)开发的论坛系统,非常适合初学者进行学习和研究。这个系统是制作者的毕业设计作品,他表示下载并研究这个项目可以让人学到很多知识...
文件名“strut2漏洞利用工具2013版V1.3.exe”表明这是一款2013年版本的Windows可执行文件,可能包含了针对那时Struts2存在的漏洞的exploit。虽然时间较早,但了解历史上的漏洞和利用方式对于安全防护和漏洞修复仍然...
##### 1.3 Struts2.0的改进 - **简化编码**:Struts2.0针对这些问题进行了优化,减少了不必要的代码量。 - **提高可测试性**:改善了单元测试的支持,使得开发者更容易进行测试驱动开发(TDD)。 #### 二、Struts2.0...
这些常量用于控制Struts2的行为,如设置默认的编码集、启用或禁用某些特性等。 例如,下面是一个简单的常量配置示例: ```xml <struts> <constant name="struts.i18n.encoding" value="UTF-8"/> </struts> ``` ...