关于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,如需转载请自行联系原作者

相关文章
|
1天前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
77 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
27天前
|
负载均衡 数据可视化 API
像素流送api ue多人访问需要什么显卡服务器
本文总结了关于像素流送技术的五大常见问题,包括是否支持Unity模型推流、UE多人访问的最大并发数、所需服务器配置、稳定性问题及API支持情况,旨在帮助开发者更好地理解和应用这一技术。
52 1
|
28天前
|
API
如何申请微店的API访问权限?
申请微店API访问权限需先注册账号并完成实名认证,随后提交开发申请,学习API接口,实现功能和数据传输,申请授权获取API Key,测试接口,最后正式上线并持续维护优化。
|
1月前
|
Web App开发 API Windows
取接口访问者信息[IP,浏览器,操作系统]免费API接口教程
此API用于获取访问者的IP地址、浏览器和操作系统信息,支持70多种浏览器和操作系统。通过POST或GET请求至`https://cn.apihz.cn/api/ip/getapi.php`,需提供用户ID和KEY。返回结果包括状态码、消息、IP、浏览器和操作系统信息。示例:{"code":200,"ip":"175.154.88.178","browser":"Chrome","os":"Windows 10"}。详情见官网文档。
|
2月前
|
编解码 中间件 API
API实现跨平台访问的方式
【10月更文挑战第16天】API实现跨平台访问的方式
56 2
|
2月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
255 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
3月前
|
API iOS开发 开发者
Snapchat API 访问:Objective-C 实现示例
Snapchat API 访问:Objective-C 实现示例
|
3月前
|
SQL 安全 Java
探索研究Servlet 数据库访问
【9月更文挑战第28天】
38 0
|
4月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之海外是否可以访问人物动漫化的api版本
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
56 0
|
4月前
|
存储 安全 API
【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account
【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account