适用场景:
需要同时从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);
}
如果不需要所有参数都在多个范围取值: 可以通过参数名判断怎样取。
分享到:
相关推荐
这些信息通常存储在请求参数中,可以通过`request.getParameter()`方法获取。然后,Servlet会与数据库交互,验证用户凭据的正确性。 4. **数据库交互**:为了验证用户,Servlet需要连接到数据库,执行SQL查询来查找...
Request对象用于接收客户端发送的数据,Response对象负责向客户端发送数据,Session对象用于维护用户会话,而Application对象则在所有用户间共享信息。 **四、JSP标签库** JSP标准标签库(JSTL)和自定义标签库...
这个过程发生在StandardHostValve调用下一个阀之前,此时请求参数已被Tomcat解析并存储在Request对象中。 StandardContext的`fireRequestInitEvent()` 方法负责触发监听器。它首先获取ApplicationEventListeners中...
Servlet 3.0及以上版本支持直接从`HttpServletRequest`对象中获取`Part`对象。以下是一个简单的示例: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) { for (Part ...
【用户管理系统2】是一个基于MVC设计模式和DAO(数据访问对象)模式开发的简易系统,主要用于强化开发者在实际项目中对多种核心技术的理解与应用。这个系统的核心目标是管理用户信息,涵盖了数据库的基本操作,如...
ValueStack是Struts2框架中的核心概念,它是一个对象栈,包含了Action对象、模型对象以及不同作用域的固定名称对象(如#application、#session、#request等)。值栈使得标签库可以直接访问对象,而不需要在视图层和...
- **JSP 标签和内置对象**:讲解 JSP 中常用的标签和内置对象,如 out、request、response 等,这些是构建动态网页的基础。 - **Web 程序的实现过程**:详细介绍一个完整的 Web 应用是如何从需求分析到设计、编码、...
3. **内置对象**:JSP提供了九个内置对象,如request、response、session、application等,它们对应HTTP请求生命周期中的关键组件,简化了Web开发。 4. **JSP页面生命周期**:涉及JSP的转换、编译、加载和实例化...
3. **JSP内置对象**:实验五和六深入探讨了JSP的内置对象,如request、response、session、application等,这些对象在处理用户请求和响应时起着关键作用。 4. **Java Bean的使用**:实验七和九介绍了Java Bean的...
#### 一、Java基础加强与面向对象设计强化 JavaWeb的构建离不开坚实的Java基础。从给定的文件信息来看,**Java基础加强**部分覆盖了多线程编程、网络编程入门、集合对象与常用数据结构性能分析等关键主题。这表明在...
8. **session和request对象**:在处理用户登录和文件操作时,可能用到session存储用户信息,request对象则用于传递请求参数。 9. **错误处理和日志记录**:为确保系统的健壮性,会使用try-catch-finally结构捕获...
- **内置对象**:学习JSP的9个内置对象,如request、response、session等。 - **JavaBean**:了解JavaBean规范,学习如何在JSP中使用JavaBean。 9. **Servlet** - **Web服务器配置**:了解如何配置Web服务器以...
3. JSP内置对象:如request、response、session、application等,它们的功能和如何使用。 4. EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library):如何使用EL表达式简化页面代码,以及JSTL...
2. **JSP内置对象**:如request、response、session、application等,以及它们在处理HTTP请求和响应中的作用。 3. **JSP指令**:page、include、taglib等,用于配置页面属性、导入其他文件或注册自定义标签库。 4. *...
5. **JSP内置对象**:如`request`, `response`, `session`, `application`, `pageContext`, `out`, `exception`等,它们提供了对HTTP请求、响应、会话、应用等关键功能的访问。 6. **EL(Expression Language)**:...
在实验中,学生学习了EL的基本语法和常见隐式对象,如`request`、`session`等,这些对象可以帮助开发者在页面间传递数据。 3. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL是一套标准的JSP标签库,...
4. **强化注解使用**:SpringMVC 大力支持注解,如`@Controller`、`@Service`、`@Autowired`或`@Resource`,使得在Controller、Service、Dao层可以方便地使用注解,增强了代码的灵活性和可读性。 **SpringMVC执行...
如请求响应处理、JSP内置对象(例如request、response、session、application等)、EL(Expression Language)表达式、JSTL(JavaServer Pages Standard Tag Library)标签库的使用、Servlet的交互、以及JDBC数据库...
2. **Java Persistence API (JPA)**:这是JavaEE5中的一个重要部分,提供了统一的ORM(对象关系映射)规范,使得开发者可以通过简单的API操作数据库,而无需直接编写SQL语句。 3. **JavaServer Faces (JSF)**:...