`
lwy520
  • 浏览: 17656 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

servlet--统一GET和POST中文处理

 
阅读更多

表单提交的输出GET需要特殊处理,统一GET和POST中文处理
        * getParameter方法功能不全,
        * 使用包装编写自定义Request对象,可以继承javax.servlet.http.HttpServletRequestWrapper类,简化代码开发

MyRequest类的实现:

import java.io.UnsupportedEncodingException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
 * 包装的编写步骤 
1.确定接口A 
2.编写实现类B 实现A 
3.提供可以接受A接口的其他实例的构造 public B(A a) ,并将A的其他具体实例缓存
private A a 
4.将需要的增强方法进行重写
 5.将不需要增强的方法执行其他具体实例的具体方法 this.a.xxx();
 * 
 * public class B implements A{ private A a; public B(A a){ this.a = a; } .. }
 */
public class MyRequest extends HttpServletRequestWrapper {

	private HttpServletRequest reqeust;
	private boolean hasEncoding = false; //没有编码

	public MyRequest(HttpServletRequest request) {
		super(request); // 必须,子类实例化之前,需要先实例化父类
		this.reqeust = request;
	}

	// 重写方法

	@Override
	public String getParameter(String name) {
		String[] values = getParameterValues(name);
		if (values == null) {
			return null;
		}
		// 第一个数据
		return values[0];
	}

	@Override
	public String[] getParameterValues(String name) {
		Map<String, String[]> dataMap = getParameterMap();
		return dataMap.get(name);
	}

	@Override
	public Map<String, String[]> getParameterMap() {
		// 获得原始数据
		Map<String, String[]> dataMap = super.getParameterMap();

		// 5.0 简洁遍历map
		String method = getMethod();
		if ("GET".equals(method)) {
			//if(this.hasEncoding == false) {
			if(!this.hasEncoding) {
				for (Map.Entry<String, String[]> entry : dataMap.entrySet()) {
					String[] values = entry.getValue();
	
					// 遍历所有的内容
					if (values != null) {
	
						// for(String value : values) { //foreach不能修改内容
						for (int i = 0; i < values.length; i++) {
							// 2分析post或get
							String value = values[i];
							// 处理数据
							try {
								value = new String(value.getBytes("ISO-8859-1"),
										getCharacterEncoding());
							} catch (UnsupportedEncodingException e) {
								e.printStackTrace();
							}
							// 将修改之后的内容设置到原有的内容中
							values[i] = value;
						}
					}
				}
				//已经编完码
				this.hasEncoding = true;
			}

		}

		return dataMap;
	}

}

 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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetEncodingFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		// 0 强转
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		
		request.setCharacterEncoding("UTF-8");
		
		HttpServletRequest myRequest = new MyRequest(request);
		
		
		//放行
		chain.doFilter(myRequest, response);

	}

	@Override
	public void destroy() {

	}

}

 

 

分享到:
评论

相关推荐

    jsp-api.jar和servlet-api依赖包

    6. **过滤器(Filter)**:允许在请求到达Servlet之前对其进行拦截和处理,如GZIP压缩、字符编码转换等。 7. **监听器(Listener)**:监听特定事件,如会话创建、销毁、上下文初始化等,可以进行相应的操作。 ### ...

    servlet-2_5-api.zip_servlet-2_5-api.jar

    HttpServlet进一步抽象了HTTP协议,提供了doGet()、doPost()等方法,分别对应HTTP的GET和POST请求。 4. **Servlet生命周期**:包括加载与初始化(init())、服务(service())、销毁(destroy())三个阶段。容器在...

    servlet-api.jar 及源文件

    具体来说,HttpServlet类提供了doGet()和doPost()等方法,分别用于处理HTTP GET和POST请求。开发人员可以通过重写这些方法来定义其Web应用的行为。此外,servlet-api.jar还包含其他关键接口,如ServletConfig,用于...

    servlet-api.jar

    2. doGet()和doPost()方法:分别对应HTTP的GET和POST请求,是Servlet处理客户端请求的主要入口点。 3. 请求处理流程:客户端发送请求到服务器,服务器创建Servlet实例,调用相应方法处理请求,最后返回响应。 4. ...

    超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题(转)

    总结,"超强过滤器"是解决JSP-Servlet之间中文参数GET-POST传递问题的有效手段,通过统一设定请求的字符编码,确保在整个Web应用中中文数据能够正确无误地传输和处理。对于大型项目,这样的全局解决方案可以大大提升...

    servlet-api

    你可以通过`getParameter()`方法获取GET或POST请求中的参数值,使用`getHeader()`获取请求头信息,而`getLocale()`则用于获取客户端的默认语言设置。 `HttpServletResponse`接口则是用来设置服务器向客户端返回的...

    servlet-api中文文档

    它提供了doGet、doPost等方法来处理HTTP GET和POST请求,开发者通常会重写这些方法来实现业务逻辑。 JSP(JavaServer Pages)是另一种Java Web技术,它可以将HTML代码与Java代码混合编写,简化了视图层的开发。在`...

    javax.servlet-api

    `javax.servlet-api`是一个关键的Java库,它定义了Servlet、过滤器(Filter)和监听器(Listener)等核心接口,是开发Java Servlet应用的基础。这个库通常以JAR(Java Archive)文件的形式存在,例如在提供的`javax....

    servlet-api_servlet_

    7. **Filter和FilterChain接口**:Servlet API也包含了过滤器(Filter)机制,允许在请求到达Servlet之前进行拦截和处理,如进行权限检查、数据转换等。FilterChain接口则用于管理和执行一系列过滤器。 8. **...

    servlet-api源码包

    Servlet-API是Java Web开发中的核心组件,主要用于处理HTTP请求和响应。这个源码包包含了用于构建动态Web应用程序的接口和类,是Java Servlet规范的一部分。本文将深入探讨Servlet-API中的关键概念、主要类和接口,...

    servlet-api所需的jar包

    它扩展了GenericServlet,并提供了处理HTTP方法(如GET、POST)的抽象方法,如`doGet()`和`doPost()`。 4. **ServletConfig**:`javax.servlet.ServletConfig`接口代表Servlet的配置信息,由Servlet容器在Servlet...

    servlet-api-2.5.jar和jsp-api-2.1.jar

    3. **HTTP方法覆盖**:允许Servlet覆盖默认处理HTTP请求的方法,比如GET、POST等。 4. **异步处理**:引入了异步Servlet的概念,允许Servlet在处理请求时启动一个后台线程,释放服务线程,提高服务器性能。 5. **...

    servlet-api基本类和接口介绍

    ### servlet-api基本类和接口介绍 #### 一、javax.servlet包内的基本类和接口概览 在Java Web开发中,`javax.servlet`包是至关重要的组成部分之一,它为Servlet提供了核心API,使得开发者能够构建动态的Web应用。...

    大家经常会用到的jar包servlet-api.jar&jsp-api.jar

    在Java Web开发中,`servlet-api.jar`和`jsp-api.jar`是非常关键的库文件,它们包含了Servlet和JSP(JavaServer Pages)的核心API,是每个Java Web开发者必备的基础工具。这两个jar包通常由Java EE(Enterprise ...

    Servlet-Servlet生命周期

    在Java Web开发中,Servlet作为一种重要的技术,被广泛应用于构建动态网页和处理客户端请求。了解Servlet的生命周期对于深入理解和掌握Servlet的工作机制至关重要。本文将从Servlet的基本概念入手,逐步深入到其生命...

    servlet-2013-08-14

    `doGet()`和`doPost()`方法是处理HTTP GET和POST请求的主要方法。例如,我们可以重写这些方法来实现业务逻辑: ```java @Override protected void doGet(HttpServletRequest request, HttpServletResponse ...

    servlet-api 源码

    - Filter接口允许在请求到达Servlet之前进行拦截和处理,常用于登录验证、日志记录、数据转换等。 - Listener接口如ServletContextListener、ServletRequestListener等,可以在特定事件(如Web应用启动、Servlet初始...

    servlet-ppt java web相关servlet课件

    - `doGet()`和`doPost()`方法处理HTTP GET和POST请求,分别对应HTTP协议的两种主要请求方式。 - 使用`HttpServletRequest`和`HttpServletResponse`对象来获取请求参数和设置响应内容。 5. **会话管理**: - ...

    servlet-api.rar_java servlet_servlet api_servlet-api

    HttpServlet提供了处理HTTP请求的方法,如`doGet()`, `doPost()`, `doPut()`, `doDelete()`等,分别对应HTTP的GET、POST、PUT和DELETE方法。 4. **ServletConfig接口**: 每个Servlet都有一个ServletConfig对象,它...

    serlvet 源码 servlet-src 源文件

    HttpServlet提供了处理HTTP请求的方法,如`doGet()`、`doPost()`等,这些方法对应HTTP的GET和POST请求。 4. **ServletConfig接口**:在Servlet初始化时,Servlet容器会传递一个ServletConfig对象给Servlet,这个...

Global site tag (gtag.js) - Google Analytics