Struts的优点:
1、实现MVC模式,结构清晰
2、丰富的标签(tag)
3、通过配置文件页面导航,便于后期维护
4、与Servlet API松耦合,便于测试
Structs2=Structs1的知名度和市场+WebWork的技术
二、Struts2 获取
1、http://struts.apache.org/download.cgi
2、Struts-2.3.16.3-all.zip
三、Struts2 主要目录
apps :该文件夹下包含了基于Struts2的示例应用
docs:该文件夹下包含了Struts2的相关文档,包括Struts2的快速入门、Struts2的文档以及API文档等内容
lib :该文件夹下包含了Struts2框架的核心类库,以及
Struts2的第三方插件类库
src :该文件夹下包含了Struts2框架的全部源代码
四、Struts2 搭建所需 jar 包
commons-fileupload-1.3.1.jar:Struts文件的上传和下载
commons-io-2.2.jar:文件读取
commons-lang3-3.1.jar:为java.lang包提供扩展
freemarker-2.3.19.jar:FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具(.ftl)
ognl-3.0.6.jar:支持ognl表达式
javassist-3.11.0.GA.jar:分析、编辑和创建JAVA字节码的类库(可以重写.class文件)
struts2-core-2.3.16.3.jar:Struts2的核心包(WebWork)
xwork-core-2.3.16.3.jar:xwork的核心包(WebWork)
asm-*.jar :类似javassits
log4j-1.2.17.jar: 日志类库
有三种方式实现Action:
1.创建自己的java类:增加方法:
public String execute(){
return "success";
}
配置struts2.xml
<package name = "default" namespace="/" extends="struts-default"
<action name = "hello" class="…">
<result>hello.jsp</result>
</action>
</package>
2.实现接口Action
3.继承ActionSupport
Action接收参数(属性方式)
//以属性方式接收用户登录输入的用户名和密码 public class UserAction extends ActionSupport { private String userName;//用户名 private String password;//密码 public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() throws Exception { return "success"; } }
控制业务逻辑
表单参数名称必须在Action中有对应的setter以及getter
解决乱码
修改struts.xml,添加代码<constantname="struts.i18n.encoding" value="编码格式" />
页面显示
<%@taglib uri="/struts-tags" prefix="s"%>
<s:property value="属性名"/>
应用场景
接收的参数字段个数少的时候适合使用,比如对于搜索应用,接收用户输入的搜索条件
Action接收参数(JavaBean方式):将模型数据从Action中分离了出来
//以javaBean方式接收用户登录输入的用户名和密码 public class UserAction2 extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { return "success"; } }
定义实体类,为实体添加属性以及setter和getter
com.pb.entity.User
为Action添加实体属性以及setter和getter
User user
修改表单参数name为实体对象名.属性名
<input type="text" name="user.userName"/>
取值通过<s:property value=“对象名.属性名”/>的形式
<s:property value="user.userName"/>
Action接收参数的方式
使用method属性
访问Action时,默认调用的是execute()方法
可以在Action中定义多个业务方法
方法签名要与execute( )方法相同
配置多个<action>标签
method属性指定调用的方法 public class HouseAction extends ActionSupport { public String add() { return "success"; } public String update() { return "success"; } }
<action name="house_add" class="com.pb.web.action.HouseAction" method="add"> <action name="house_update" class="com.pb.web.action.HouseAction" method=“update">
使用动态方法调用(默认情况下是关闭的)
动态方法调用
DMI(dynamic method invocation)
一个Action类中可以有多个业务方法
public class HouseAction extends ActionSupport { public String add() { return "success"; } public String update() { return "success"; } }
只需要配置一个<action>标签
不需要使用method属性
调用时指出Action名和业务方法
<action name="house"class="com.pb.web.action.HouseAction">
调用时指出Action名和业务方法
http://localhost:8080/struts2/house!add
<result>的name属性
根据Action业务方法的返回值跳转到不同的结果视图
public String add() throws Exception { return "addSuccess"; } public String update() throws Exception { return "updateSuccess"; }
<action name="house" class="com.pb.web.action.HouseAction" > <result name="addSuccess">/houseAddSuccess.jsp</result> <result name="updateSuccess">/houseUpdateSuccess.jsp</result> </action>