Struts2是什么?
Apache Struts 2 是一种流行的 Java模型 - 视图 - 控制器(MVC)框架,成功地结合了 WebWork和Struts1.x 两种 web 框架。
搭建Struts2开发环境。
需要知道的Jar包。
struts2-core-2.1.6.jar --------------- struts2的核心包
freemarker-2.3.13.jar--------------- FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具
commons-logging.jar ----------- Jakarta的通用日志记录包
ognl-2.6.11.jar -------------- 支持ognl表达式
xwork-2.1.2.jar -------------- xwork的包 由于Struts2是由xwork的延伸 有些类依然关联着 xwork的类
commons-fileupload-1.3.1.jar---------文件上传包
commons-io-2.2.jar---------IO流包
commons-lang3-3.2.jar-----Lang的扩展包
javassist-3.11.0.GA.jar-----代码生成工具Hibernate用它在运行时扩展java类和实现,同cglib包
..........................
配置文件
1.修改对应的web.xml文件,
<filter>
<filter-name>struct2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
这里写完后按住ctrl点击鼠标左键如果可以跳转则证明正确
</filter>
..............................................................................
<filter-mapping>
<filter-name>struct2</filter-name>
<url-pattern>/*</url-pattern>
/*是所有的都需要过滤
</filter-mapping>
2.struts.xml文件
在项目src目录下简历struts.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="hellword" class="com.zxj.action.HelloWordAction">
<result>/result.jsp</result>
</action>
</struts>
NamePace:决定了Action的访问路径
1.默认为“”,可以接受所有的action,如果没有找到响应的namepace时,则用namepace为空的action
2.可以写为/,或者/xx,或者/xx/yy,对应的action的访问路径为/index.action,/xx/index.action,或者/xx/yy/index.action
namePace最好用模块来命名
Package:<package>标签是用来解决重命名的问题,例如当系统的前台和后台都有一个action的名叫hello,这时就需要package来区分,前台<package name="font">
后台<package name="back"> struts2中的package和java中的都是相同的作用
Action 返回视图:
具体的视图的返回可以由用户自己定义的Action来决定,
具体的手段是根据返回的字符串找到对应的配置顶,来决定视图的内容,有三种手段
1.定义一个普通的java类,定义一个 execute()方法
配置action:
<action name="LoginTestAction" class="com.zxj.action.LoginTestAction">
<result name="success">/add.jsp</result>
2.省略action配置文件中的class,定义一个实现Action接口
3.继承ActionSupport
动态调用方法(不能因为需要每访问一个action就去创建一个action类):
1.通过method方法去指定调用哪个方法
<action name="LoginTestAction" class="com.zxj.action.LoginTestAction" method="add">
<result name="success">/add.jsp</result>
</action>
只要这个类中有add方法,就会找到这个类的方法
2.!方法调用(action+!+方法名字)
第一种方法需要大量的action配置,只要动态的在action配置执行某个方法
3.通配符
星号表示所有(*)
{数字} 表示第几个通配符
<action name="*_*" class="com.zxj.action.{1}TestAction" method="{2}">
<result name="success">/{1}_{2}add.jsp</result>
</action>
参数接受:
1.在action类中添加成员属性接收参数
例如请求:http://localhost:8080/StrursHelloWord/HelloWord?name=a&age=12;
只需要在HelloWord里面分别设置name,age的get和set方法
2.域模型(就是利用对象来传参数)
定义对象传参数
3.ModelDriven接受参数
让Action实现com.opensymphony.xwork2.ModelDriven.ModelDriven<T>
通过 getModel(),实现返回对象
中文问题:2.7之前设置这个方法无效
<constant name="struts.devMode" value="true"></constant>
//开启模式开发模式,正事运行时需要开闭,减少消耗
<constant name="struts.il18.encoding" value="gbk"></constant>