表单提交的输出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() { } }
相关推荐
6. **过滤器(Filter)**:允许在请求到达Servlet之前对其进行拦截和处理,如GZIP压缩、字符编码转换等。 7. **监听器(Listener)**:监听特定事件,如会话创建、销毁、上下文初始化等,可以进行相应的操作。 ### ...
HttpServlet进一步抽象了HTTP协议,提供了doGet()、doPost()等方法,分别对应HTTP的GET和POST请求。 4. **Servlet生命周期**:包括加载与初始化(init())、服务(service())、销毁(destroy())三个阶段。容器在...
具体来说,HttpServlet类提供了doGet()和doPost()等方法,分别用于处理HTTP GET和POST请求。开发人员可以通过重写这些方法来定义其Web应用的行为。此外,servlet-api.jar还包含其他关键接口,如ServletConfig,用于...
2. doGet()和doPost()方法:分别对应HTTP的GET和POST请求,是Servlet处理客户端请求的主要入口点。 3. 请求处理流程:客户端发送请求到服务器,服务器创建Servlet实例,调用相应方法处理请求,最后返回响应。 4. ...
总结,"超强过滤器"是解决JSP-Servlet之间中文参数GET-POST传递问题的有效手段,通过统一设定请求的字符编码,确保在整个Web应用中中文数据能够正确无误地传输和处理。对于大型项目,这样的全局解决方案可以大大提升...
你可以通过`getParameter()`方法获取GET或POST请求中的参数值,使用`getHeader()`获取请求头信息,而`getLocale()`则用于获取客户端的默认语言设置。 `HttpServletResponse`接口则是用来设置服务器向客户端返回的...
它提供了doGet、doPost等方法来处理HTTP GET和POST请求,开发者通常会重写这些方法来实现业务逻辑。 JSP(JavaServer Pages)是另一种Java Web技术,它可以将HTML代码与Java代码混合编写,简化了视图层的开发。在`...
`javax.servlet-api`是一个关键的Java库,它定义了Servlet、过滤器(Filter)和监听器(Listener)等核心接口,是开发Java Servlet应用的基础。这个库通常以JAR(Java Archive)文件的形式存在,例如在提供的`javax....
7. **Filter和FilterChain接口**:Servlet API也包含了过滤器(Filter)机制,允许在请求到达Servlet之前进行拦截和处理,如进行权限检查、数据转换等。FilterChain接口则用于管理和执行一系列过滤器。 8. **...
Servlet-API是Java Web开发中的核心组件,主要用于处理HTTP请求和响应。这个源码包包含了用于构建动态Web应用程序的接口和类,是Java Servlet规范的一部分。本文将深入探讨Servlet-API中的关键概念、主要类和接口,...
它扩展了GenericServlet,并提供了处理HTTP方法(如GET、POST)的抽象方法,如`doGet()`和`doPost()`。 4. **ServletConfig**:`javax.servlet.ServletConfig`接口代表Servlet的配置信息,由Servlet容器在Servlet...
3. **HTTP方法覆盖**:允许Servlet覆盖默认处理HTTP请求的方法,比如GET、POST等。 4. **异步处理**:引入了异步Servlet的概念,允许Servlet在处理请求时启动一个后台线程,释放服务线程,提高服务器性能。 5. **...
### servlet-api基本类和接口介绍 #### 一、javax.servlet包内的基本类和接口概览 在Java Web开发中,`javax.servlet`包是至关重要的组成部分之一,它为Servlet提供了核心API,使得开发者能够构建动态的Web应用。...
在Java Web开发中,`servlet-api.jar`和`jsp-api.jar`是非常关键的库文件,它们包含了Servlet和JSP(JavaServer Pages)的核心API,是每个Java Web开发者必备的基础工具。这两个jar包通常由Java EE(Enterprise ...
在Java Web开发中,Servlet作为一种重要的技术,被广泛应用于构建动态网页和处理客户端请求。了解Servlet的生命周期对于深入理解和掌握Servlet的工作机制至关重要。本文将从Servlet的基本概念入手,逐步深入到其生命...
`doGet()`和`doPost()`方法是处理HTTP GET和POST请求的主要方法。例如,我们可以重写这些方法来实现业务逻辑: ```java @Override protected void doGet(HttpServletRequest request, HttpServletResponse ...
- Filter接口允许在请求到达Servlet之前进行拦截和处理,常用于登录验证、日志记录、数据转换等。 - Listener接口如ServletContextListener、ServletRequestListener等,可以在特定事件(如Web应用启动、Servlet初始...
- `doGet()`和`doPost()`方法处理HTTP GET和POST请求,分别对应HTTP协议的两种主要请求方式。 - 使用`HttpServletRequest`和`HttpServletResponse`对象来获取请求参数和设置响应内容。 5. **会话管理**: - ...
HttpServlet提供了处理HTTP请求的方法,如`doGet()`, `doPost()`, `doPut()`, `doDelete()`等,分别对应HTTP的GET、POST、PUT和DELETE方法。 4. **ServletConfig接口**: 每个Servlet都有一个ServletConfig对象,它...
HttpServlet提供了处理HTTP请求的方法,如`doGet()`、`doPost()`等,这些方法对应HTTP的GET和POST请求。 4. **ServletConfig接口**:在Servlet初始化时,Servlet容器会传递一个ServletConfig对象给Servlet,这个...