关于Struts2三种访问Servlet API方式的总结

简介:

       在开发j2ee过程中,通常我们需要访问的Servlet API是:HttpSession,HttpservletRequest,ServletContext,这三者分别对应于JSP的内置对象:session,request和application。在javabean+servlet+jsp模式中,由于servlet继承了HttpServlet,因此可以直接对HttpServletRequest和HttpServletResponse进行操作。但是Struts2的Action继承的是ActionSupport,并未直接与任何Servlet API耦合,因此需要一些其他操作才能访问Servlet API。下面我将举例说明常用的三种方式:

(1)使用ServletActionContext类访问Servlet API:

ServletActionContext中的方法都是静态方法,访问Servlet API的方法主要是以下几个:

方法 说明
static PageContext getPageContext() 用于访问web应用中的PageContext对象,对应于JSP内置对象:Page
static HttpServletRequest getRequest() 用于访问web应用中的HttpServletRequest对象
static HttpServletResponse getResponse() 用于访问web应用中的HttpServletResponse对象
1
2
3
4
5
6
7
if  ( "admin" .equals(userName) &&  "123456" .equals(password)) {
             ServletActionContext.getRequest().setAttribute( "success" "登录成功" );
             return  Action.SUCCESS;
         else  {
             ServletActionContext.getRequest().setAttribute( "error" "用户名或密码出错了" );
             return  Action.ERROR;
         }

(2)使用ActionContext类访问Servlet API

ActionContext类中包含的几个常用方法:

方法 说明
Map getApplication() 获取封装了ServletContext的Map对象
static ActionContext getContext() 静态方法,获取当前系统的ActionContext实例
Map getParameters() 获取封装了所有请求参数的Map对象
Map getSession() 获取封装了HttpSession的Map对象
1
2
3
4
5
6
7
8
9
ActionContext actionContext = ActionContext.getContext();
         
         if  ( "admin" .equals(userName) &&  "123456" .equals(password)) {
             actionContext.put( "success" "登录成功" );
             return  Action.SUCCESS;
         else  {
             actionContext.put( "error" "用户名或密码出错了" );
             return  Action.ERROR;
         }

(3)通过实现xxxAware接口访问Servlet API

Struts2提供的接口:

方法 说明
ServletContextAware 实现该接口的Action可以直接访问Web应用的ServletContext实例
ServletRequestAware 实现该接口的Action可以直接访问用户请求对象的HttpServletRequest实例
ServletResponseAware 实现该接口的Action可以直接访问服务器响应的HttpServletResponse实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import  javax.servlet.http.HttpServletRequest;
import  org.apache.struts2.interceptor.ServletRequestAware;
 
import  com.opensymphony.xwork2.Action;
import  com.opensymphony.xwork2.ActionSupport;
 
public  class  LoginAction  extends  ActionSupport  implements  ServletRequestAware{
     private  static  final  long  serialVersionUID = 1L;
     private  String userName;
     private  String password;
     private  HttpServletRequest request;
 
     public  void  setServletRequest(HttpServletRequest request) {
         this .request = request;      
     }
 
     public  String login()  throws  Exception {
         if  ( "admin" .equals(userName) &&  "123456" .equals(password)) {
             request.setAttribute( "success" "登录成功" );
             return  Action.SUCCESS;
         else  {
             request.setAttribute( "error" "用户名或密码出错了" );
             return  Action.ERROR;
         }
     }
     
     public  String getUserName() {
         return  userName;
     }
 
     public  void  setUserName(String userName) {
         this .userName = userName;
     }
 
     public  String getPassword() {
         return  password;
     }
 
     public  void  setPassword(String password) {
         this .password = password;
     }
 
}


注:个人推荐使用第一种方式,因为使用起来简单;其次是第二种,但是有个缺陷:只能获取request,而不能获取response;不推荐使用第三种,因为不仅使用麻烦,而且与Servlet API的耦合太大



本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1741698,如需转载请自行联系原作者

相关文章
|
2天前
|
SQL Java 应用服务中间件
使用Servlet上传多张图片——访问提示
使用Servlet上传多张图片——访问提示
16 0
|
2天前
|
JSON 应用服务中间件 API
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
116 1
|
2天前
|
JSON 前端开发 Java
【JavaEE】Servlet的API详解(下)
【JavaEE】Servlet的API详解
9 3
|
2天前
|
编解码 JSON Java
【JavaEE】Servlet的API详解(上)
【JavaEE】Servlet的API详解
11 3
|
2天前
|
Java 关系型数据库 MySQL
Servlet 教程 之 Servlet 数据库访问 2
本教程讲解如何在Servlet中实现数据库访问。首先确保了解JDBC并配置MySQL驱动(如mysql-connector-java-5.1.39-bin.jar),在Eclipse Web项目中需将驱动放入Tomcat的lib目录。创建名为`websites`的数据库表,插入测试数据。之后展示了一个Servlet示例,该示例连接到数据库,执行SQL查询以获取`websites`表中的`id`、`name`和`url`,并将结果输出到HTML响应中。要运行Servlet,需在web.xml中配置并访问指定URL。
13 4
|
2天前
|
JSON 自然语言处理 Dart
私有化部署 Llama3 大模型, 支持 API 访问
通过 ollama 本地运行 Llama3 大模型其实对我们开发来说很有意义,你可以私有化放服务上了。 然后通过 api 访问,来处理我们的业务,比如翻译多语言、总结文章、提取关键字等等。 你也可以安装 enchanted 客户端去直接访问这个服务 api 使用。
290 0
私有化部署 Llama3 大模型, 支持 API 访问
|
2天前
|
JSON JavaScript API
访问REST API:在Vue中消费和管理远程数据
【4月更文挑战第23天】本文探讨了在Vue应用中高效访问REST API的方法,包括选择合适的API、使用Axios或Fetch发送请求、封装API服务、处理响应和数据、错误管理及性能优化。关键点在于创建服务层封装请求,使用计算属性和方法处理数据,以及实施错误处理和性能提升策略。通过这些最佳实践,开发者能更好地管理和消费远程数据,构建出动态、响应式的Vue应用。
|
2天前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
2天前
|
存储 分布式计算 API
adb spark的lakehouse api访问内表数据,还支持算子下推吗
【2月更文挑战第21天】adb spark的lakehouse api访问内表数据,还支持算子下推吗
108 2
|
2天前
|
数据采集 JavaScript API
第三方系统访问微搭低代码的后端API
第三方系统访问微搭低代码的后端API