struts2 访问Web元素的4种方法

简介:

完整代码 :Struts12AccessWebElement.rar

第一种也是最常用的一种方法实现这几个接口

RequestAware,SessionAware,ApplicationAware

struts以依赖注入方式把request,session和application赋上值,看一下完整的代码

复制代码
package com.pengli.struts.parampack;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class MyWinAction2 extends ActionSupport  implements RequestAware,SessionAware,ApplicationAware{

    static int actionCount=0;
    private Map<String, Object> my_Request;
    private Map<String, Object> session;
    private Map<String, Object> application;
    
    
    public String add()
    {
        AddKey();
        return "add";
    }
    
    @Override
    public void setRequest(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        my_Request=arg0;
    }

    @Override
    public void setApplication(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        application=arg0;
    }

    @Override
    public void setSession(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        session = arg0;
    }

    private void AddKey()
    {

        ++actionCount;
        my_Request.put("a1", "Two"+actionCount);

        ++actionCount;
        session.put("a2", "Two"+actionCount);

        ++actionCount;
        application.put("a3", "Two"+actionCount);
    }
    
}
复制代码

第二种方式是实现ServletRequestAware接口

得到request接口后,再根据 request的方法去得到session和application

复制代码
package com.pengli.struts.parampack;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class MyWinAction3 extends ActionSupport implements ServletRequestAware {

    private HttpServletRequest request;    
    private HttpSession session;
    private ServletContext application;
    
    public String add()    {
        setAttribute();
        return "add";
    }
    
    @Override
    public void setServletRequest(HttpServletRequest arg0) {
        // TODO Auto-generated method stub
        request=arg0;
        session=request.getSession();
        application=session.getServletContext();
        
    }
    
    
    
    private void setAttribute()    {
        request.setAttribute("a1", "ThreeA1");
        session.setAttribute("a2", "ThreeA2");
        application.setAttribute("a3", "ThreeA3");
    }

}
复制代码

第三种方式和第二种有点像,是用ServletActionContext得到request再得到sesion和application

复制代码
package com.pengli.struts.parampack;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class MyWinAction4 extends ActionSupport{

    private HttpServletRequest request;    
    private HttpSession session;
    private ServletContext application;
    
    public String add(){
        
        getInfo();
        setAttribute();
        
        return "add";
    }
    
    private void getInfo()
    {
        request = ServletActionContext.getRequest();
        session = request.getSession();
        application = session.getServletContext();
    }
    
    private void setAttribute()
    {
        request.setAttribute("a1", "FourA1");
        session.setAttribute("a2", "FourA2");
        application.setAttribute("a3", "FourA3");
    }
}
复制代码

最后一种方法是通过ActionContext得到相应的参数

 

复制代码
package com.pengli.struts.parampack;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class MyWiAction extends ActionSupport {
    
    private UserModel user;
    public  String add1()
    {
        if(user == null)
        {
            this.addFieldError("user", "user object is null");
            return ERROR;
        }
        if(user.getName()== null||user.getAge() == null)
        {
            this.addFieldError("name", "name is null");
            this.addFieldError("age", "age is null");
            return ERROR;
        }
        System.out.println(user.getAge());
        System.out.println(user.getName());
        return "add1";
    }
    static int actionCount=0;
    private Map request1;
    private Map session1;
    private Map application1;
    
    public String add()
    {
        request1 = (Map)ActionContext.getContext().get("request");
        session1=ActionContext.getContext().getSession();
        application1 = ActionContext.getContext().getApplication();
        
        AddKey();
        
        return "add";
    }
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        
        return super.execute();
    }
    
    public String add2()
    {
        return "add2";
    }
    
    public String add3() 
    {
        return "add3";
    }
    
    
    private void AddKey()
    {

        ++actionCount;
        request1.put("a1", "a1haha"+actionCount);
    
        ++actionCount;
        session1.put("a2", "a2haha"+actionCount);
    
        ++actionCount;
        application1.put("a3", "a3haha"+actionCount);

    }
    public String edit()
    {
        return "edit";
    }

    public UserModel getUser() {
        return user;
    }

    public void setUser(UserModel user) {
        this.user = user;
    }
}
复制代码

再看一下web页面如何访问这些元素

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'Oneaddok.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    This is my JSP page. <br>
    <s:property value="#request.a1" />|<%= request.getAttribute("a1") %> <br/>
    <s:property value="#session.a2" />|<%= session.getAttribute("a2") %> <br/>
    <s:property value="#application.a3" />|<%= application.getAttribute("a3") %> <br/>
  </body>
</html>
复制代码

再看一下struts.xml

复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!-- Add packages here -->
     <constant name="struts.devMode" value="true" />
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    <package name="default1" namespace="/" extends="struts-default">        
        <action name="One*1" class="com.pengli.struts.parampack.MyWiAction" method="{1}">
            <result name ="{1}">
                /Oneaddok.jsp
            </result>        
            <result name="error">
                /errorpage.jsp
            </result>    
        </action>
        <action name="One*2" class="com.pengli.struts.parampack.MyWinAction2" method="{1}">
            <result name ="{1}">
                /Oneaddok.jsp
            </result>        
            <result name="error">
                /errorpage.jsp
            </result>    
        </action>
        <action name="One*3" class="com.pengli.struts.parampack.MyWinAction3" method="{1}">
            <result name ="{1}">
                /Oneaddok.jsp
            </result>        
            <result name="error">
                /errorpage.jsp
            </result>    
        </action>
        <action name="One*4" class="com.pengli.struts.parampack.MyWinAction4" method="{1}">
            <result name ="{1}">
                /Oneaddok.jsp
            </result>        
            <result name="error">
                /errorpage.jsp
            </result>    
        </action>
    </package>
</struts>
复制代码

 

完整代码 :Struts12AccessWebElement.rar

 

 本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/3787603.html,如需转载请自行联系原作者

相关文章
|
人工智能 安全 程序员
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
1704 12
|
移动开发 前端开发 JavaScript
H5 页面与 Web 页面的制作方法
H5页面制作利用HTML5、CSS3和JavaScript技术,结合H5编辑器或框架(如Adobe Dreamweaver、Ionic),注重移动设备兼容性与响应式布局。Web页面制作则基于传统HTML、CSS和JavaScript,借助文本编辑器或IDE完成开发。两者区别在于技术版本、交互性和浏览器支持:H5更互动、现代,但可能不兼容旧浏览器;Web页面更静态、兼容性广。根据需求选择:高交互选H5,广泛兼容选Web。
1961 6
|
Web App开发 编解码 vr&ar
使用Web浏览器访问UE应用的最佳实践
在3D/XR应用开发中,尤其是基于UE(虚幻引擎)开发的高精度场景,传统终端因硬件局限难以流畅运行高帧率、复杂效果的三维应用。实时云渲染技术,将渲染任务转移至云端服务器,降低终端硬件要求,确保用户获得流畅体验。具备弹性扩展、优化传输协议、跨平台支持和安全性等优势,适用于多种终端和场景,特别集成像素流送技术,帮助UE开发者实现低代码上云操作,简化部署流程,保留UE引擎的强大开发能力,确保画面精美且终端轻量化。
817 17
使用Web浏览器访问UE应用的最佳实践
|
SQL 存储 安全
Web 常见攻击方式及防御方法
【10月更文挑战第25天】Web 安全是一个复杂而重要的领域,攻击者不断寻找新的攻击方法,我们需要不断加强防御措施,提高安全意识,以保障 Web 应用的安全运行。通过采取多种防御手段的综合运用,我们可以有效地降低 Web 攻击的风险,保护用户的信息和财产安全。同时,随着技术的不断发展,我们也需要持续关注和研究新的安全威胁和防御方法,以应对不断变化的安全形势。
1891 56
|
存储 JSON JavaScript
WEB CAD插件通过上下文对象MxPluginContext修改UI界面的方法
本文介绍了如何使用MxPluginContext动态控制MxCAD项目的UI界面。通过该上下文对象,开发者可以灵活设置UI配置,如控制操作栏显隐、编辑按钮、添加侧边栏等。具体方法包括调用`getUiConfig()`获取并修改`mxUiConfig.json`中的属性,实现界面的定制化。此外,还提供了控制命令行聚焦的功能,解决输入框焦点锁定问题。详细代码示例和效果对比图展示了具体实现步骤,帮助开发者更好地适配项目需求。
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
783 3
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
362 2
|
10月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
688 4
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。