struts2_core NOTE

本文介绍了Struts2框架的MVC模式及其工作流程,强调了它简化开发的优势。Struts2的Action不再是单例,解决了线程安全问题。详细讲解了Ognl表达式、ValueStack、Action的Session和Application访问方式、配置文件中的action和result标签用法,以及Struts2的标签库。还阐述了Struts2的控制流程和核心拦截器,以及开发项目的步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.过去的开发模式是:一,创建表,二,创建实体类(pojo),三,建立DAO,四,JSP/Servlet,但是有了struts2框架后就使用MVC模式,model层包括entity实体bean,dao和service,view层只是简单地不含逻辑代码的jsp页面,controler层即控制层有actionservlet、action以及struts2的核心控制器filterdispatcher,控制层是连接model层和view层之间的桥梁。

2.Struts2的MVC框架工作流程是:当请求到达时,请求会交给前端的控制器actionservlet,actionservlet维护了一个配置文件,即struts.xml,该文件指明了不同的请求对应的不同的action,然后根据不同的请求分发给不同的action,action再调用业务层的dao,dao到数据库去查找相应的数据后将数据与request绑定,再将绑定后的数据发送到客户端页面(显示层jsp),即response回去。

3.为什么要用struts2?

  因为struts2已经将MVC思想封装好了。

4.ognl表达式访问对象的格式是:Ognl.getValue(“ognl表达式”,“root对象”),“root对象”为要操作的目标对象,标准的ognl涉及三个概念:ognl引擎、root对象、context对象,当给一个ognl引擎字符串时,实际上这个字符串就是ognl表达式,ognl引擎就会用这个字符串(ognl表达式)对root对象(即要操作的目标对象)去取值或者设值,context对象其实就是一个map,上下文对象context这个map中存储的是和整个系统相关的公共数据信息,在访问root对象时(即目标对象)有些数据每次都要用到,这些数据就会被存放到context对象中。

5.Valuestack值栈的核心概念:当请求到达时,会先创建一个valuestack,并将当前的action对象放置栈顶,struts2会把valuestack放到request中(struts.valuestack),所以标签库可以访问到valuestack中的内容,栈顶的内容即为要显示的内容。

6.Struts2中的action与struts1中的action不同的是struts2中的action不是单例模式,当请求到达时会为请求创建一个action,并且会为每一个请求创建一个action,所以不用考虑线程安全问题,并且此时的action对象会被置于栈顶,action的业务方法(默认是execute())会根据输入给出相应的输出。

7.Action访问session和application的方法一:

 Actioncontext ctx=ActionContext.getContext();

 Map session=ctx.getSession();

 Map application=ctx.getApplication();

 Session和application将存在valuestack值栈中的context中,若是将其从值栈中取出可以是:<s: property  value="#session" />  <s:property value="#application" />

方法二:通过实现SessionAware接口访问session(更好):

首先是创建BaseAction implements SessionAware,然后是session的XXXAction extends BaseAction,类似的还有ServletRequestAware、ServletResponseAware、ServletContextAware。

8.配置文件中(struts.xml)多个action的class属性可以指向同一个action,只要这个action有多个方法就可以,多个方法可以决定具体可以返回哪些界面,这样做同时也节约了action的数量。

9.在配置文件中可以使用parameter标签指定pojo中的属性的值,这样的话struts2一启动pojo类中的成员变量(属性)就有值了。

10.配置文件(struts.xml)中的result标签主要是负责生成视图(jsp、json、freemaker、报表等),其实result本身也是一个类,从struts-default.xml文件中可以查到result结果类型有10种,但result的type属性如果不进行设定的话默认就是dispatcher(对应ServletDispatcherResult),result的常用类型是:dispatcher、redirect、redirectAction、stream、json,这五个。

11.Struts2封装MVC的具体体现是:model层包括entity(实体bean,如action,pojo),dao(数据访问对象,主要提供对数据库中数据的增删改查方法),service(业务层,主要由spring负责);view层主要由jsp页面负责收集、展现数据;control控制层主要由actionservlet(以及控制器)和action(二级控制器)来负责。

12.用struts2来开发项目的步骤习惯是:先写struts.xml配置文件,再写action类,最后写jsp显示页面,在编程过程中也是要一层一层的写,先构建和定义好方法,最后再实现这些方法,比如Dao可以放到最后来实现,在写项目前最好将定义的属性的名字和含义都记住,这样在项目中可以快速、避免一些问题。如果有些方法定义好了,若担心以后忘记了就可以增加 // TODO xxx的注释,并且可以通过windows--show view--tasks来跟踪这些只定义没有实现的方法,双击这些“TODO”就可以定位到没有定义的方法处。

13.Struts2的标签有通用标签、控制标签、UI标签、AJAX标签,UI标签有8个:form(封装元素)、textfield(普通文本标签)、password(密码框)、submit(提交)、textarea(文本域)、checkbox(多选)、radio(单选)、select(下拉菜单);

 <s:from></s:form>属性有theme(主题),namespace(命名空间),action,method;<s:textfield>和<s:password>属性有maxlength,size,readonly;<s:textarea>有rows,cols;<s:checkbox>属性有name(name相同即为一组)和fieldValue;<s:radio>属性有name,label,list(OGNL需要迭代的集合);listValue(作用于每个选项的提示);listKey(作用于每个要提交的值);<s:select>属性有listValue对应每一个option的文本,listKey对应每一个option提交的值,headerValue提示头的文字,headKey提示头对应的提交值。

14.在default.xml配置文件中可以看到,basicStack中包含了8个拦截器,是struts2的核心拦截器。

15.Struts2的控制流程:

   ①请求到来

   ②创建valueStack,并将当前action放置栈顶,进行初始化

   ③调用拦截器,在拦截器中是可以访问valueStack的

   ④调用action,执行业务方法,默认是execute()

   ⑤调用result,result分组生成界面展示数据给用户

   ⑥最后到页面,通过标签库取出数据

16.struts2共有五大组件:值栈valueStack,OGNL,拦截器,action,result,另外还有资源国际化。

 

  一、漏洞简介     Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品:Struts 1和Struts 2。     Apache Struts 2.3.5 - 2.3.31版本及2.5 - 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-15 2,CVE-2017-5638)。该漏洞与Apache Struts2 (S2-045)远程代码执行漏洞原理基本相同,均是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。      二、漏洞危害     攻击者可通过发送恶意构造的HTTP数据包利用该漏洞,在受影响服务器上执行系统命令,进一步可完全控制该服务器,造成拒绝服务、数据泄露、网站造篡改等影响。由于该漏洞利用无需任何前置条件(如开启dmi,debug等功能)以及启用任何插件,因此漏洞危害较为严重。     三、修复措施     目前,Apache官方已针对该漏洞发布安全公告,并且漏洞利用代码已被公布在互联网上,请受影响用户及时检查是否受该漏洞影响。另外,已通过升级方式修复了Apache Struts2 (S2-045)远程代码执行漏洞的用户,不在该漏洞影响的范围内。     【自查方式】     用户可查看web目录下/WEB-INF/lib/目录下的struts-core.x.x.jar文件,如果这个版本在Struts2.3.5 到 Struts2.3.31 以及 Struts2.5 到 Struts2.5.10之间则存在漏洞。     【升级修复】     受影响用户可升级版本至Apache Struts 2.3.32 或 Apache Struts 2.5.10.1以消除漏洞影响。     官方公告: https://cwiki.apache.org/confluence/display/WW/S2-046 https://cwiki.apache.org/confluence/display/WW/S2-046
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值