原文地址:http://note.youdao.com/share/?id=14765868a53ed708256c036664af0cac&type=note
DMI
struts.xml
![](https://i-blog.csdnimg.cn/blog_migrate/0121a621dabea900f858f1a30fb0efdf.png)
class
![](https://i-blog.csdnimg.cn/blog_migrate/b4b602fe7e631592af8b554506d770b8.png)
jsp文件为展示文件,在这里不做展示
通配符(将配置量降到最低)
![](https://i-blog.csdnimg.cn/blog_migrate/d4aeb5ba602631ad7d8fb4e2b0246327.png)
采用/Student*表示
下面result方法中,{1}表示第一个星号,{2}表示第二个星号,对他们的符号进行通配配置
class方法
![](https://i-blog.csdnimg.cn/blog_migrate/735000bd3c178b21b7c7b9b3f8c226bd.png)
注意其匹配会匹配最精确的,很多通配符放在一起的时候,按照时间先后进行配置
Action中接收参数
class
![](https://i-blog.csdnimg.cn/blog_migrate/deb713aaa993d027f5670e5dc1cc49bd.png)
通过get和set方法设置成员变量的值
浏览器访问想doget方法一样 在网址后面加入参数,set后面的名字和?后面的
名字一样 ,例如setName和name中,set后面的Name和name的名字一样
![](https://i-blog.csdnimg.cn/blog_migrate/04c0012dd776fcf7164060dc59f95fd6.png)
DonmainModel接收参数
调用方法
![](https://i-blog.csdnimg.cn/blog_migrate/6a134e11c774eace5c83de282cfae5df.png)
user.name=a&user.age=9
调用类
![](https://i-blog.csdnimg.cn/blog_migrate/09f3ae379837bb89ed4fed0c8a20910b.png)
预模型
![](https://i-blog.csdnimg.cn/blog_migrate/61e5db5e0d407d6833b33086f193b899.png)
dto database transference object
存在预模型与实际输入参数不符合的现象发生,例如在注册界面当中,user class会存储
username和password,但是在实际的存储当中出现comfimpassword,则先使用userDto
进行存储,然后在dto中拿出username和password,是得输入和存储能够一致。
ModelDriven传递参数
![](https://i-blog.csdnimg.cn/blog_migrate/fdfd8de6483af0e0a3c415511f675608.png)
平时不常用,重点是放在MVC的概念,
调用过程
![](https://i-blog.csdnimg.cn/blog_migrate/d8e21beafbf57566911f414146ec55d5.png)
Struts2重点放在C上面,主要是写Action
接收参数出现中文(
struts-2.3.24.1中失误
)
在struts.xml中进行配置
![](https://i-blog.csdnimg.cn/blog_migrate/f0010d7df0bcf61a0e8f9de37913663a.png)
struts2中的文档中的值在
![](https://i-blog.csdnimg.cn/blog_migrate/a23f4f03550a7ba66a4483587a13d244.png)
和参考文档
在2.1.6中有bug,在struts.xml中即使是配置也不能解决,如何解决?
在web.xml中更改
![](https://i-blog.csdnimg.cn/blog_migrate/52a961f1998c1dc0ac2e8fc0f1e21a71.png)
简单数据验证(验证上出现问题)
##读程序的方法,顺着线往下读##
![](https://i-blog.csdnimg.cn/blog_migrate/48f31da3eecffbe923103192084ccd61.png)
在if(name==null...)...中进行判断,对前台传递错误信息,使用this.addFieldError(
"name","message");
jsp文件取出错误信息的方法
![](https://i-blog.csdnimg.cn/blog_migrate/6465f2049fadeee60769ee509bc59786.png)
调用标签库<s:fielderror fieldName="name" theme="simple"
>
注意提前要引入标签库:<%@ taglib uri="/struts-tags" prefix="s"%>
写入<s:debug></s:debug>在页面中会出现debug链接
取debug属性:<s:property value="errors.name[0]"/>,使用时候是将错误的信息放到
栈当中,然后在栈当中取出其相应的错误信息,
errors.name[0]为ognl表达式
访问Web元素
取得
request,session,application
第一种方式
使用JavaScript来提交数据
![](https://i-blog.csdnimg.cn/blog_migrate/c545d13bfb78dbf35017d6683653320a.png)
获取数据
![](https://i-blog.csdnimg.cn/blog_migrate/ea281499f1c71e45ecd2c75ef2208514.png)
注意是Map类型,*request中就是StackContext中的值
前台访问
(s:property不能访问)
![](https://i-blog.csdnimg.cn/blog_migrate/371ef3e7314842b33b179730ac69b7eb.png)
前台访问可以使用JSP语法或者使用struts的标签进行访问
struts:#request.r1,使用#进行访问
第二种方法(最常用)
DI:dipendency injection
IoC:inverse of control
![](https://i-blog.csdnimg.cn/blog_migrate/6a7a0ced533cefbfce7643062a2a1215.png)
依赖注入,request依赖于别人注入给自己,由自己控制变成别人控制,就是
由方式一转换成方式二
方式三
![](https://i-blog.csdnimg.cn/blog_migrate/79214d75f542cdba6d16863b90c430e6.png)
方式四
![](https://i-blog.csdnimg.cn/blog_migrate/589ff3e97f2d84080038a72da7322837.png)
模块包含
![](https://i-blog.csdnimg.cn/blog_migrate/c83f240b7e8f0d9d869f7b65c7798fca.png)
自己写自己模块,不影响其他人写的模块
默认Action
defaultAction
![](https://i-blog.csdnimg.cn/blog_migrate/78903b854fc284f5a2a8c95e64a30471.png)
只写项目名,在不访问下级文件时
![](https://i-blog.csdnimg.cn/blog_migrate/e0d7d8da7d59d435b7d2ab5e1b754c09.png)
写入default-action-ref时会直接访问默认的action
request的配置
![](https://i-blog.csdnimg.cn/blog_migrate/1108af0a60213fc36b85a5bf55b0a602.png)
![](https://i-blog.csdnimg.cn/blog_migrate/631efd9443c2e72dce268cd98f7be6d7.png)
1:服务器跳转,跳转到页面,不能是action
![](https://i-blog.csdnimg.cn/blog_migrate/cbb93f7057eb6059c26170ccf8ae3008.png)
2:客户端跳转,跳转到视图
在别的包当中:
![](https://i-blog.csdnimg.cn/blog_migrate/133f53cf375e9522bd324e1e3b1c38dc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/761fd64c62a5cefbc7118c588b20ce1d.png)
3:跳转到action
![](https://i-blog.csdnimg.cn/blog_migrate/bdeb8c8105557b63ec8e2d2decf0f235.png)
4:跳转到action
r4跳转到r2,然后访问r2.jsp
5~10:一般都用不到
全局链接request
![](https://i-blog.csdnimg.cn/blog_migrate/6ab150a1891b5ea8a7bf7db7ff920f01.png)
package内公用
extends从另外一个包中继承,工作中的extends的作用是通用的页面放
父类,使其返回的不用重复定义
![](https://i-blog.csdnimg.cn/blog_migrate/7deecde0efa5d15ef36ca15d7a14d0bb.png)
Dynamic result动态返回
struts.xml
![](https://i-blog.csdnimg.cn/blog_migrate/77f058a25ddc1bed38eb44f1d2da71eb.png)
java类
![](https://i-blog.csdnimg.cn/blog_migrate/1dc5374d96ea216c23a2ca5de5581675.png)
r值动态确定,采用${r}动态读取stackContext的值
![](https://i-blog.csdnimg.cn/blog_migrate/72fa0181100a87e7d0e20ff37668f60e.png)
向结果传参数
struts.xml配置
![](https://i-blog.csdnimg.cn/blog_migrate/c200d0530dbf3191663b963c23bad2e2.png)
t=${type}指明t指代一个参数
jsp文件取值
![](https://i-blog.csdnimg.cn/blog_migrate/0e3e0ee594483f9d655036c806327527.png)
采用下面from actioncontext中
![](https://i-blog.csdnimg.cn/blog_migrate/2cf413c79c03b45bb7cd0af540e6fdb8.png)
情况
![](https://i-blog.csdnimg.cn/blog_migrate/0bb87b10164402798fb3a5eb1f73013c.png)
Result总结
1. 常用四种类型:
a) dispatcher(默认)
b) redirect
c) chain
d) redirectAction
2. 全局结果集
a) global-results | extends
3. 动态结果(了解)
a) 在action中保存一个属性,存储具体的结果location
4. 传递参数
a) 客户端跳转才需要传递
b) ${}表达式(不是EL)
OGNL