`
5xnl
  • 浏览: 24159 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

强化Servlet Request 对象方法

    博客分类:
  • java
阅读更多
适用场景:
需要同时从request对象的getParameter(),getCookies(),getHeader()中取值:

方法一:装饰模式:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
 * description
 * 
 * @author qiaoyao
 * @version 1.0,2010-5-27
 */
public class ApiRequestWrapper extends HttpServletRequestWrapper {

	public ApiRequestWrapper(HttpServletRequest request) {
		super(request);
	}

	public String getParameter(String parameter) {
		String getValue = null;
		getValue = super.getParameter(parameter);
		if (StringUtils.isNullOrEmpty(getValue)) {
			getValue = super.getHeader(parameter);
			if (StringUtils.isNullOrEmpty(getValue)) {
				return null;
			}
		}
		return getValue;
	}
}

spring过滤器调用如下:

protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {
		
			super.doFilterInternal(new ApiRequestWrapper ( request), response, filterChain);		
          	}


方法二:代理模式:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import javax.servlet.http.HttpServletRequest;

/**
 * description
 * 
 * @author qiaoyao
 * @version 1.0,2010-5-27
 */
public class RequestHandler implements InvocationHandler {
	private HttpServletRequest realRequest;
	private HttpServletRequest wrappedHttpServletRequest;

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		if ("getPrameter".equals(method.getName())) {
			// doSomeThing
			return "result";
		}
		return method.invoke(realRequest, args);
	}

	public HttpServletRequest bind() {
		this.wrappedHttpServletRequest = (HttpServletRequest) Proxy
				.newProxyInstance(this.getClass().getClassLoader(),
						new Class[] { HttpServletRequest.class }, this);
		return this.wrappedHttpServletRequest;
	}

}

spring过滤器调用如下:

protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {
		RequestHandler requestHandler = new RequestHandler(request);
	request = requestHandler.bind();
			super.doFilterInternal(request, response, filterChain);		
          	}



如果不需要所有参数都在多个范围取值:   可以通过参数名判断怎样取。
分享到:
评论

相关推荐

    JSP servlet 登录 注册 登录 注册

    这些信息通常存储在请求参数中,可以通过`request.getParameter()`方法获取。然后,Servlet会与数据库交互,验证用户凭据的正确性。 4. **数据库交互**:为了验证用户,Servlet需要连接到数据库,执行SQL查询来查找...

    ACCP5.0 使用JSP开发Web应用系统(JSP)

    Request对象用于接收客户端发送的数据,Response对象负责向客户端发送数据,Session对象用于维护用户会话,而Application对象则在所有用户间共享信息。 **四、JSP标签库** JSP标准标签库(JSTL)和自定义标签库...

    Tomcat容器攻防笔记之Listener内存马 .pdf

    这个过程发生在StandardHostValve调用下一个阀之前,此时请求参数已被Tomcat解析并存储在Request对象中。 StandardContext的`fireRequestInitEvent()` 方法负责触发监听器。它首先获取ApplicationEventListeners中...

    Java文件上传

    Servlet 3.0及以上版本支持直接从`HttpServletRequest`对象中获取`Part`对象。以下是一个简单的示例: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) { for (Part ...

    用户管理系统2

    【用户管理系统2】是一个基于MVC设计模式和DAO(数据访问对象)模式开发的简易系统,主要用于强化开发者在实际项目中对多种核心技术的理解与应用。这个系统的核心目标是管理用户信息,涵盖了数据库的基本操作,如...

    struts2标签库

    ValueStack是Struts2框架中的核心概念,它是一个对象栈,包含了Action对象、模型对象以及不同作用域的固定名称对象(如#application、#session、#request等)。值栈使得标签库可以直接访问对象,而不需要在视图层和...

    JSP WEB 应用开发教程

    - **JSP 标签和内置对象**:讲解 JSP 中常用的标签和内置对象,如 out、request、response 等,这些是构建动态网页的基础。 - **Web 程序的实现过程**:详细介绍一个完整的 Web 应用是如何从需求分析到设计、编码、...

    JSP应用与开发技术(第二版)课后答案

    3. **内置对象**:JSP提供了九个内置对象,如request、response、session、application等,它们对应HTTP请求生命周期中的关键组件,简化了Web开发。 4. **JSP页面生命周期**:涉及JSP的转换、编译、加载和实例化...

    《jsp动态网页开发》实验指导书.doc

    3. **JSP内置对象**:实验五和六深入探讨了JSP的内置对象,如request、response、session、application等,这些对象在处理用户请求和响应时起着关键作用。 4. **Java Bean的使用**:实验七和九介绍了Java Bean的...

    JavaWeb总结

    #### 一、Java基础加强与面向对象设计强化 JavaWeb的构建离不开坚实的Java基础。从给定的文件信息来看,**Java基础加强**部分覆盖了多线程编程、网络编程入门、集合对象与常用数据结构性能分析等关键主题。这表明在...

    mtc.rar_MTc_jsp_jsp 文件管理_mtc.jsp_文件管理

    8. **session和request对象**:在处理用户登录和文件操作时,可能用到session存储用户信息,request对象则用于传递请求参数。 9. **错误处理和日志记录**:为确保系统的健壮性,会使用try-catch-finally结构捕获...

    java程序员培训课件.ppt

    - **内置对象**:学习JSP的9个内置对象,如request、response、session等。 - **JavaBean**:了解JavaBean规范,学习如何在JSP中使用JavaBean。 9. **Servlet** - **Web服务器配置**:了解如何配置Web服务器以...

    面试 j2ee jsp 代码与编程题.rar

    3. JSP内置对象:如request、response、session、application等,它们的功能和如何使用。 4. EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library):如何使用EL表达式简化页面代码,以及JSTL...

    软件工程1611-JSP-实验二.zip

    2. **JSP内置对象**:如request、response、session、application等,以及它们在处理HTTP请求和响应中的作用。 3. **JSP指令**:page、include、taglib等,用于配置页面属性、导入其他文件或注册自定义标签库。 4. *...

    JSP基础实例 特别适合初学者

    5. **JSP内置对象**:如`request`, `response`, `session`, `application`, `pageContext`, `out`, `exception`等,它们提供了对HTTP请求、响应、会话、应用等关键功能的访问。 6. **EL(Expression Language)**:...

    202010089048-余燕如.docx

    在实验中,学生学习了EL的基本语法和常见隐式对象,如`request`、`session`等,这些对象可以帮助开发者在页面间传递数据。 3. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL是一套标准的JSP标签库,...

    SpringMVC讲义.docx

    4. **强化注解使用**:SpringMVC 大力支持注解,如`@Controller`、`@Service`、`@Autowired`或`@Resource`,使得在Controller、Service、Dao层可以方便地使用注解,增强了代码的灵活性和可读性。 **SpringMVC执行...

    《JSP开发王》源代码手册

    如请求响应处理、JSP内置对象(例如request、response、session、application等)、EL(Expression Language)表达式、JSTL(JavaServer Pages Standard Tag Library)标签库的使用、Servlet的交互、以及JDBC数据库...

    JavaEE5的资源包

    2. **Java Persistence API (JPA)**:这是JavaEE5中的一个重要部分,提供了统一的ORM(对象关系映射)规范,使得开发者可以通过简单的API操作数据库,而无需直接编写SQL语句。 3. **JavaServer Faces (JSF)**:...

Global site tag (gtag.js) - Google Analytics