博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts 2相关配置与基本操作演示(案例Demo)
阅读量:5278 次
发布时间:2019-06-14

本文共 9520 字,大约阅读时间需要 31 分钟。

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/ma_hoking/article/details/35984507

基本介绍

Struts 2

       Struts 2Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构区别巨大。

Struts 2以WebWork为核心,採用拦截器的机制来处理用户的请求,这种设计也使得业务逻辑控制器能够与ServletAPI全然脱离开,所以Struts 2能够理解为WebWork的更新产品。尽管从Struts 1到Struts 2有着太大的变化,可是相对于WebWork。Struts 2的变化非常小。

【本文的演示项目以Struts 2.3.16 版本号为例】

【转载使用,请注明出处:

Struts 2 IOC

           对于IoC来说。常见的就是Spring框架的了。而且在眼下Java EE开发中,使用SSH框架时,也主要依赖于Spring框架所提供的IoC功能。

但Struts2框架本身也提供了IoC的功能。

IoC(Inversion of Control)。随着Java社区中轻量级容器(Lightweight Contianer)的推广而越来越为大家耳熟能详。值得一提的是,Spring确实是一个值得学习的框架,由于有越来越多的开源组件,如iBATIS(新版本号为Mybatis)等。都放弃与Spring重叠的功能的开发。因此。Struts 2推荐大家通过Spring实现控制反转。

       控制反转(Inversion of Control,IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型。依赖注入(DependencyInjection。简称DI)和依赖查找。依赖注入应用比較广泛。

         1、依赖查找(Dependency Lookup):容器提供回调接口和上下文环境给组件。

EJB和Apache Avalon都使用这种方式。

         2、依赖注入(Dependency Injection):组件不做定位查询,仅仅提供普通的Java方法让容器去决定依赖关系。

后者是时下最流行的IoC类型,其又有接口注入(Interface Injection)。设值注入(Setter Injection)和构造子(器)注入(ConstructorInjection)三种方式。【如想深入了解,须要读者自行拓展阅读】

Struts 2 ValueStack(值栈)OGNL

        值栈ValueStack是Struts2框架核心组件,它提供对上下文信息和运行环境中元素的訪问机制。

其在底层实现了一个栈,但与传统栈的实现有所不同。

        值栈由下面4个层级对象组成:

        (1) 暂时对象:这些对象在请求处理过程中须要暂时保存。比方集合中当前正在迭代的元素。

        (2) 模型对象:当Action实现了ModelDriven接口时,模型对象就会被存放在栈中被运行的Action前面。否则不存在这个级别的内容;

        (3) Action对象:此对象为当前正在运行的action。

        (4) 命名对象:不论什么对象都能够被赋予一个标志符而成为命名对象。比方与HTTP同等作用域的对象集合相应的Struts2命名对象,#application、#session、#request、#attr和#parameters等。

        值栈的使用方式:

        栈的传统使用方式是压栈和出栈。

对于值栈则是通过使用OGNL(ObjectGraph Navigational Language对象导航语言)语法编写的特定表达式来查找。或者是在该表达式之上求值。

        OGNL表达式【该部分的应用,会在演示Demo中涉及】

  •  使用圆点符号和表达式求值
  •  调用被检索对象的方法
  •  结合自己定义标签使用

      常见使用方法:

      (1) person.name  调用getPerson().getName()

      (2) #session.user从会话对象中获取user属性对象

      (3) #session.shopcart.size()获取会话中购物车的数量

      (4) top 获取值栈最顶层对象 【该部分须要读者,自行拓展阅读】

       【转载使用。请注明出处:

參考案例

第一步:创建Web项目 StrutsDemo
第二步:加入所需的jar文件(包)   參见【相关Jar文件】
项目完整结构截图例如以下:

第三步:加入并编辑struts.xml

第四步:编写Action 对象【本例涉及IOC与非IOC两种方式】

1、 非IOC方式Action

/** * 非IoC方式Action * @author Mahc */public class UnIOCmode {	private String message;	private ArrayList
persons = new ArrayList
(); public String method() {// 获得ActionContext实例,以便訪问Servlet API ActionContext ctx = ActionContext.getContext(); // 获取Parameter // Map paramMap = ctx.getParameters(); 获取的对象为String[] if(null!=ctx.getParameters().get("msg")){ String[] msg = (String[])ctx.getParameters().get("msg"); System.out.println(msg[0]); } // Java Servlet HttpServletRequest 对象操作 String servletMsg = ServletActionContext.getRequest().getParameter("msg"); System.out.println(servletMsg); //// ctx.getParameters().put("msg", "parameter信息"); 待检測 // 向application域存入数据 // Map
applicationMap = ctx.getApplication(); ctx.getApplication().put("msg", "application信息");// 向session域存入数据 // Map
sessionMap = ctx.getSession(); ctx.getSession().put("msg", "seesion信息"); // 向request域存入数据 HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("msg", "request信息"); // System.out.println("Struts2 非IOC 配置成功。"); message = "Success"; // Person p = new Person(); p.setAge(25); p.setBirthday(new Date()); p.setName("pla1"); persons.add(p); // 为persons赋值 for(int i=1;i<4;i++){ Person person = new Person(); person.setAge(19+i); person.setBirthday(new Date()); person.setName("pla"+i); persons.add(person); } return "msg"; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public ArrayList
getPersons() { return persons; } public void setPersons(ArrayList
persons) { this.persons = persons; }}
2、 IOC方式Action

/** * IOC方式Action * @author Mahc */public class IOCmode extends ActionSupport implements ServletRequestAware ,SessionAware,ApplicationAware,ParameterAware{	private HttpServletRequest request;	private Map
sessionMap; private Map
applicationMap; private Map parameterMap; private ArrayList
persons = new ArrayList
(); private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setSession(Map
session) { sessionMap = session; } public void setApplication(Map
application) { applicationMap = application; } public void setParameters(Map
parameter) { parameterMap = parameter; if(null!=parameterMap.get("ioc_msg")){ String[] ioc_msgs = (String[]) parameterMap.get("ioc_msg"); System.out.println("ioc_msg========="+ioc_msgs[0]); } } public String method(){ // 向application域存入数据 applicationMap.put("ioc_msg", "application信息_ioc"); // 向session域存入数据 sessionMap.put("ioc_msg", "session信息_ioc"); // 向request域存入数据 request.setAttribute("ioc_msg", "request信息_ioc"); // System.out.println("Struts2 IOC 配置成功!

"); message = "IOC_SUCCESS"; // //□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ Person p = new Person(); p.setAge(25); p.setBirthday(new Date()); p.setName("pla1"); persons.add(p); // 为persons赋值 for(int i=1;i<4;i++){ Person person = new Person(); person.setAge(19+i); person.setBirthday(new Date()); person.setName("pla"+i); persons.add(person); } //□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ return "IOC_SUCCESS"; } public ArrayList<Person> getPersons() { return persons; } public void setPersons(ArrayList<Person> persons) { this.persons = persons; } }

第五步:编写相关JSP页面 

【IOC.jsp相应IOC方式,unIOC.jsp相应非IOC方式】

1、 unIOC.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%>			首页		

parameters:

request.msg:

session.msg:

application.msg:

attr.msg:


<%=request.getAttribute("msg")%> ${message}

用于过滤和投影(projecting)集合

年龄大于20

#this.age>20}"> <li> <s:property value="name" /> - 年龄: <s:property value="age" /> </li> </s:iterator> </ul> <p> 姓名为pla1的年龄: <s:property value="persons.{?#this.name=='pla1'}.{age}[0]" /> </p> <hr /> <h3> 构造Map </h3> <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" /> <p> The value of key "foo1" is <s:property value="#foobar['foo1']" /> </p> <hr /> <h4> %符号的使用方法 </h4> <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" /> <p> The value of key "foo1" is <s:property value="#foobar['foo1']" /> </p> <p> 不使用%: <s:url value="#foobar['foo1']" /> </p> <p> 使用%: <s:url value="%{#foobar['foo1']}" /> </p> </body> </html>

2、 IOC.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%>			首页		

parameters:

request.ioc_msg:

session.ioc_msg:

application.ioc_msg:

attr.msg:


<%=request.getAttribute("ioc_msg")%> ${message}

用于过滤和投影(projecting)集合

年龄大于20

  • - 年龄:

姓名为pla1的年龄:


构造Map

The value of key "foo1" is


%符号的使用方法

The value of key "foo1" is

不使用%:

使用%:

第六步:编辑Action相应XML文件(struts-test.xml)

struts-test.xml文件位于src/ config/struts2文件夹下

> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="test1" namespace="/test" extends="struts-default"> <action name="ioc_*" class="cn.mahaochen.web.IOCmode" method="{1}"> <result name="IOC_SUCCESS">/IOC.jsp</result> </action> <action name="unioc_*" class="cn.mahaochen.web.UnIOCmode" method="{1}"> <result name="msg">/unIOC.jsp</result> </action> </package> </struts>

第七步:測试操作
编辑index.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%>			Struts2.3.16 高速使用		

Struts2.3.16 高速使用


Struts2 非IOC方式

Struts2 非IOC方式[含请求參数]

Struts2   IOC方式

Struts2   IOC方式[含请求參数]


測试用URL

        http://127.0.0.1/StrutsDemo/test/unioc_method.action    非IOC方式測试

        http://127.0.0.1/StrutsDemo/test/ioc_method.action       IOC方式測试

界面截图

相关Jar文件

  • struts2-core-2.3.16.jar
  • xwork-core-2.3.16.jar
  • commons-logging-1.1.3.jar
  • ognl-3.0.6.jar
  • commons-fileupload-1.3.jar
  • freemarker-2.3.19.jar
  • commons-io-2.2.jar
  • javassist-3.11.0.GA.jar
  • commons-lang-2.4.jar
  • commons-lang3-3.1.jar

下载地址

下载演示项目 

參考文献

1、 http://www.java3z.com/cwbwebhome/article/article2/2938.html?

id=1631

2、 http://blog.163.com/neu_lxb/blog/static/179417010201145104245861/

【转载使用,请注明出处:

转载于:https://www.cnblogs.com/mqxnongmin/p/10858411.html

你可能感兴趣的文章
python装饰器
查看>>
树上的路径
查看>>
【转载】TCP好文
查看>>
系统平均负载
查看>>
问题总结
查看>>
jenkins升级为2.134
查看>>
软件随笔
查看>>
C/C++知识补充 (1)
查看>>
Fast Poisson Disk Sampling
查看>>
Python Cookbook(第3版)中文版:15.14 传递Unicode字符串给C函数库
查看>>
Linux下SVN自动更新web [转]
查看>>
编程:对经验世界的析构与建构
查看>>
Openstack api 学习文档 & restclient使用文档
查看>>
vim linux下查找显示^M并且删除
查看>>
poj100纪念
查看>>
ExtJs4 笔记(5) Ext.Button 按钮
查看>>
把execl导入到数据库中
查看>>
阿里云人脸比对API封装
查看>>
如何将数据库中的表导入到PowerDesigner中(转)
查看>>
汇编总结一
查看>>