strut2入门教程,手把手教你搭建项目,配合fcming老师视频观看效果更佳
对应视频配套地址: https://www.imooc.com/video/9088
项目创建:
Eclipse:
1.创建一个动态项目
2.将对应的核心jar包导入到WebContent中的lib中
commons-fileupload.jar:文件上传
commons-io.jar:
commons-lang.jar:
commons-logging.jar:
struts2-core.jar:
xwork-core.jar:
freemarker:模板引擎,根据模板生成
ognl:一些表达式
javassist.jar:解析java类文件的包
3.在项目中引用jar包
->->->
4.在web.xml中配置过滤器,将所有请求转交到struts2
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.在src下边创建struts.xml配置文件
6.在src下边创建上图中对应的类文件
7.创建对应的jsp文件
开启运行即可,如果没有继承tomcatServer,需要现在eclipse中添加对应的tomcat服务器
4-3 Action搜索顺序
http://127.0.0.1:8080/struts/path1/path2/path3/student.aciton
程序会首先从path3开始检索,看看目录下有没有path3包,有的话看看有没有相应action,
否则看看目录下有没有path2包,有的话看看有没有相应action,
否则看看目录下有没有path1包,有的话看看有没有相应action,
所有的包检索完了都没有对应aciton那么会检索项目根目录下,即\下有没有对应的action即
4-4 动态方法调用
url访问HelloWorld.action时,默认请求execute()方法
动态方法调用:(为了解决一个Action对应多个请求的处理,以免Action太多)
1.置顶method属性
通过url访问addAction中的add方法,然后映射到com.imooc.action.HelloWorldAction类中的add方法
2.感叹号方式(不推荐)
需要提前在struts.xml配置文件中开启一个常量值
然后配置相应的action
如何用感叹号方式调用呢:
默认跳转到result.jsp
helloworld!add.action跳转到add.jsp
helloworld!update.action跳转到update.jsp
3.通配符方式
simple:
helloworld_add.action跳转到add.jsp
advance:
访问helloworld_add.action,那么struts框架会先将helloworld匹配给{1}即请求类helloworldAction.java,然后下划线后边的add匹配给{2}即请求类helloworldAction.java中的add方法,然后如果返回add|update都打开add.jsp
4-5 指定多个配置文件
在struts中使用include包含多个配置文件
然后创建相应的helloworld.xml文件,并且helloworld文件和struts文件结构一致
同理可以多个文件引入
4-5 默认Action的使用
在项目中打开不存在的action时,就会出现404访问错误,用户体验较差,遂使用默认action
ForExample:
在任意struts的action路径索引文件中
这样再打开不存在的action时,就会跳转到error.jsp了
4-6 Struts后缀
修改访问url时的action,比如http://127.0.0.1:8080/helloStruts/helloworldAction.action,想将action改为do或html之类的(将动态action页面伪装成静态html页面)
只需要在struts.xml配置文件中,添加参数:<constant name="struts.action.extension" value="html" ></constant>
如果不想要后缀,即访问http://127.0.0.1:8080/helloStruts/helloworldAction
只需要将<constant name="struts.action.extension" value="" ></constant>中的value置为空即可
如果不设置这个参数,直接访问.action是没有问题的
在struts.properties中配置
在web.xml中配置
4-7 在struts2中接收参数
4-7-1使用Action的属性接收
在jsp页面中设置form表格:
配置处理action:
具体类处理事件:在Action类中声明form中的名称为name值的两个成员变量,并实现相应的get/set方法
4-7-2 使用DomainModel接收
先声明对应的实体类对象,也实现get/set方法
然后在Action中声明这个对象,在通过对象引用访问成员变量
最后修改表格中的传入参数,将参数与实体类名称绑定,form表格中的user即和Action类中声明的User对象user一致
4-7-3 使用ModelDriven来接收
ForExample:
只需要在Action类中集成接口,并且重写getModel方法,最后将对象实例化即可
传入多个值:
比如接收中的bookList
先在User中声明bookList对象
在Action中做相应处理
传入一个数组形式的值:
此时bookList不再只简单是String类型了,改成user集合了
只需修改对应的form表格中
对应Action中的
4-9处理结果类型概述
在struts定义的映射中,<resutl name="success">/success.jsp</rsult>,其中result元素中的name就是result元素的逻辑视图名称
如果省略成<result>/success.jsp</result>,即使省略了name属性,系统也将采用默认的name属性值,默认的name值是success
路径前方的斜线代表的是项目的根目录,如果不带斜线,就会索引到相应struts.xml文件夹对应下的jsp文件
com.opensymphone.xwork2.Action
SUCCESS:正确执行,返回相应的视图
NONE:表示Action正确执行,但并不返回任何视图
ERROR:表示Action执行失败,返回到错误处理的视图
LOGIN:Action因为用户没有登录的原因没有正确执行,将返回该登录视图,要求用户进行登录
INPUT:Action的执行,需要从前端界面获取参数,INput就是代表这个参数输入的界面,一般在应用中,会对这些参数进行验证,如果验证没有通过,将自动返回该视图
4-10 验证INPUT的代码演示
首先在映射文件中定义result为input的处理
在form中添加name为age的变量
最后在aciton中添加对应的拦截处理错误
4-11 处理结果类型
处理结果是通过在struts.xml使用<result/>标签配置文件
根据文件的不同,可分为2种结果
1:局部结果,将<result>作为<action>的子元素
2:将<result>作为<global-result>元素的子元素
OGNL:Object Graphy Navigation language
在对应的映射文件中定义
在对应的class文件中定义