struts2_core NOTE
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,另外还有资源国际化。
上一篇: 肺气肿的预防措施有哪些
推荐阅读
-
对标P30 Pro DxOMark预告新机:Galaxy Note 10+要上榜?
-
Note10 UFS 3.0闪存性能测试:读取速度超1500Mb/s
-
三星Note 10没有了右侧的传统电源键:改为左侧Bixby二合一按键
-
如果Galaxy Note10+跟iPhone 11 Max来一场对比
-
三星向国行Galaxy Note9推送One UI 2:基于安卓10、新全屏手势到来
-
100%全面屏?三星Galaxy Note 20首曝:或7月发
-
Redmi Note 7入围2019出货量TOP10 卢伟冰忍不住得瑟
-
三星Galaxy Note廉价版曝光:支持S Pen 明年上市
-
Galaxy Note 10前置摄像头大改 三星如此解释
-
1299元Redmi Note 9评测:5G时代的千元神机正统传人