Struts2
第一节
HelloWorld案例
- 新建项目
Servlet API 2.4
JSP API 2.0
Java 5
- 导入Jar
- 配置xml
添加filter
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
- 新建xml文件
Src目录下新建struts.xml
- 新建Action
- 新建class 继承ActionSupport
- 重写execute方法
添加返回值
- 配置xml
/result.jsp
- 启动Tomcat 访问action
第二节
Struts2工作原理
Struts2 struts.xml配置
/error.jsp
/error.jsp
/error.jsp
/result.jsp
http://www.sina.com
Struts.Properties
#指定默认编码集
struts.i18n.encoding=UTF-8
#是否每次请求重新加载国际化资源文件, 默认false
struts.i18n.reload=false
#struts改动后是否重新加载 开发阶段建议开启
struts.configuration.xml.reload = true
#是否使用struts2开发模式, 获得更多的报错信息
struts.devMode = false
#是否缓存静态内容, 默认是true 。 开发阶段可以关闭
struts.server.static.browserCache=false
#Struts2默认是 .action 。 .action不需要配置 action/do都可以
struts.action.extension=action,do,struts2
#配置服务器占用端口
struts.url.http.port = 8080
第三节
Struts2详解
- 访问Servlet API
- ActionContext
- 实现***Awaer接口
- ServletActionContext
- Action搜索顺序
http://localhost:8080/struts2/path1/path2/path3/hello.action
第一步:判断package是否存在如path1/path2/path3/
存在
第二步:判断action是否存在,如果不存在则去默认的
Namespace的package里面寻找action
第三步:如果没有则报错
不存在
第二步:检查上一级路径的package是否存在(直到默认的namespace),重复第一步
第三步:如果没有,则报错
- 动态方法调用
<action name="helloworld" method="add" class="com.admxj.actions.HelloWorldAction">
struts.xml添加
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
修改请求 /path/hello!add.action
<action name=
"_" method=
"{2}" class=
"com.admxj.actions.{1}Action">
<result name=
"add">/{2}.
jsp</result>
</action>
- 指定多个配置文件
<include file="login.xml"></include>
- 默认Action
配置错误页面action
<default-action-ref name="error"></default-action-ref>
<action name=
"error">
<result>/error.jsp</result>
</action>
- Struts2 后缀
struts.Xml
<constant name="struts.action.extension" value="html"></constant>
struts.properties文件
struts.action.extension=action,do,struts2
web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>action</param-value>
</init-param>
</filter>
- 接收参数
在action里面新建属性和setters和getters方法
- 新建实体类User生成getters和setters方法
public class User {
String username =
null;
String password =
null;
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;
}
}
- Action中新建实体类对象并生成setters和getters方法
(不需要实例化)
User user =
null;
- 修该前台页面
<form action=
"test/user_login.action">
<input name=
"user.username" type=
"text">
<input name=
"user.password" type=
"password">
<input type=
"submit">
</form>
- 实例化实体类对象
User user =
new User();
- Action实现ModelDriven接口
public class LoginAction extends ActionSupport
implements ModelDriven<User>{
- 实现getModel方法
public User getModel() {
//
TODO Auto-generated method stub
return user;
}
- 不需要修改前台页面
- 获取List数据
- 前台界面
<input name=
"bookList[0]" type=
"text">
<input name=
"bookList[1]" type=
"text">
<input name=
"bookList[2]" type=
"text">
- 实体类新建List属性并且实例化
- <result name="input">/login.jsp</result>
input
接收参数类型转换失败
发生错误或者添加错误
this.addFieldError("username","用户名为空");
如果
this.addFieldError()
不放在
public voidvalidate() { }里面不会自动跳转到input
- 处理结果类型
SUCCESS Action正确执行完成, 返回相应的视图succes是name属性的默认值
NONE 表示Action正确执行, 但不返回任何视图
ERROR 表示Action执行失败, 返回到错误处理视图
LOGIN Action 因为用户没有登录的原因没有正确执行将返回该登录视图要求用户登录验证
INPUT 对参数经行验证,如没有验证通过将自动返回该视图