`
soft901
  • 浏览: 36827 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts1.3设置编码三种方法

阅读更多
本文所写涉及的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+Spring4.x+Hibernate4.x框架整合实现对书籍的增删改查(含分页)

    在本项目中,Struts1.3的动作类(Action)会接收到前端发来的请求,然后调用业务逻辑层(Service)的方法,处理完业务后,再返回相应的结果到JSP页面展示。 Spring4.x则是一个全面的轻量级应用框架,它提供了依赖...

    Struts1.3API

    API文档(Struts1.3.chm)通常包含了框架的所有核心组件、接口、类以及方法的详细说明,是开发者理解和使用Struts1.3的关键资源。以下是Struts1.3 API中的一些重要知识点: 1. **ActionServlet**:这是Struts框架的...

    Struts1.3 备忘笔记

    04 Struts_04DispatchAction : 分发Action,根据设置的参数值提交到不同的方法进行处理业务,演示数学运算 05 Struts_05DynaActionForm : 相对应ActionForm来说,动态ActionForm只需要在配置文件中配置就可以了,...

    Struts1.3项目开发文档

    - **数据库编码**: 设置为`gb2312`,这是一种中文编码格式,适用于中文数据的存储。 - **用户名密码**: 设为`root`,密码为`root`(或自定义)。 #### 二、开发环境搭建 ##### 1.2.1 创建Web项目 在MyEclipse中...

    Struts1.3多语言、异常处理、菜单应用.ppt

    Struts1.3框架在构建Web应用程序时,提供了强大的多语言支持、异常处理机制以及StrutsMenu组件的应用,这些功能极大地增强了应用的国际化和用户体验。下面将详细解释这些知识点。 **Struts多语言应用** 1. **资源...

    struts1.3+hibernate3.3+JPA集成

    在Java Web开发中,Struts1.3、Hibernate3.3和Java Persistence API (JPA)的集成是一个常见的技术组合,用于构建高效且可扩展的三层架构应用。这种集成可以实现模型-视图-控制器(MVC)设计模式,通过Struts处理请求和...

    struts1.3 demo

    通过分析这个"struts1.3 demo",开发者可以深入理解Struts1的工作原理,学习如何组织一个简单的CRUD(创建、读取、更新、删除)应用,同时掌握处理乱码问题的方法,这对于理解Web应用的开发流程和架构设计具有重要...

    Struts用户登录实例

    在这个用户登录实例中,我们专注于Struts1.3版本,它提供了强大的控制层功能,使得开发者能够更好地组织和管理应用程序的流程。 首先,让我们了解Struts1.3的关键特性。Struts1.3引入了许多改进,如增强的异常处理...

    ssh strus1.3集成

    在这个"ssh struts1.3集成"的主题中,我们将深入探讨这三个组件的集成以及相关的知识点。 1. **Struts 1.3**: - **Model**: Struts框架的核心是ActionServlet,它作为控制器处理HTTP请求,调用业务逻辑(模型层)...

    java struts如何隐藏提交后缀.action, .do.zip

    例如,对于Struts1,可以将`&lt;forward&gt;`标签的路径设置为不包含`.action`的URL;对于Struts2,可以使用`&lt;action&gt;`标签的`namespace`和`name`属性,结合`result`配置来构建无后缀的URL。 2. **使用Filter**: 可以...

    Struts2学习笔记与心得

    #### 三、Struts2的关键组件详解 ##### 3.1 StrutsPrepareAndExecuteFilter - `StrutsPrepareAndExecuteFilter`是Struts2的核心过滤器,它主要负责初始化框架以及处理请求。此过滤器是Struts2的核心组件之一,没有...

    Struts2 in action中文版

    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文件上传和下载教程

    在Struts2框架中,实现文件上传主要依赖于表单的`enctype`属性设置为`multipart/form-data`。这种设置允许表单中的文件作为请求的一部分发送到服务器端。 **1.2 enctype详解** - **application/x-...

    struts各个版本jar包汇总

    Struts是Apache软件基金会下的一个开源项目,是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。自其诞生以来,Struts在Web开发领域扮演了重要的角色,经历了多个版本的迭代,每个版本都有其独特...

    bbs 论坛 BBS 论坛

    【描述】中提到的项目是一个基于Struts1.3、JSP、JSTL和EL(Expression Language)开发的论坛系统,非常适合初学者进行学习和研究。这个系统是制作者的毕业设计作品,他表示下载并研究这个项目可以让人学到很多知识...

    struts利用工具

    文件名“strut2漏洞利用工具2013版V1.3.exe”表明这是一款2013年版本的Windows可执行文件,可能包含了针对那时Struts2存在的漏洞的exploit。虽然时间较早,但了解历史上的漏洞和利用方式对于安全防护和漏洞修复仍然...

    struts2.0中文教程

    ##### 1.3 Struts2.0的改进 - **简化编码**:Struts2.0针对这些问题进行了优化,减少了不必要的代码量。 - **提高可测试性**:改善了单元测试的支持,使得开发者更容易进行测试驱动开发(TDD)。 #### 二、Struts2.0...

    深入Struts2的配置文件

    这些常量用于控制Struts2的行为,如设置默认的编码集、启用或禁用某些特性等。 例如,下面是一个简单的常量配置示例: ```xml &lt;struts&gt; &lt;constant name="struts.i18n.encoding" value="UTF-8"/&gt; &lt;/struts&gt; ``` ...

Global site tag (gtag.js) - Google Analytics