Struts2 环境的搭建
一、 Stuts2 下载网址 http://struts.apache.org/ 下载 Struts2 文件
二、 在使用 Struts2 之前 首先要配置其开发环境
(1). 找到 Struts2 文件目录下的 lib 文件 里面是 Struts2 的 jar 文件 找到以下文件
commons-loggin-1.0.4.jar
commons-fileupload-1.2.1.jar
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar
freemarker-2.3.13.jar
ognl-2.6.11.jar
xwork-2.1.2.jar
基本可以这样记忆:两个玩 CS 的在逮一只 Fox
(2). 在 Myeclipse 中 Window à Preferences à Java à BiuldPath à UserLibraries à 建立一个新的类库 Struts2 2.1.6 Libraries 然后将上面的所需要的 jar 文件添加进去
完成后 右击工程 à BiuldPath à addLibraries à User Library à 将 Struts 2.1.6 Library 添加到工程中
至此 完成了 Struts2 类库的添加
(3). 找到 WEB-INF 下的 web.xml 文件 加入一个过滤器的配置
< filter > < filter-name > struts2 </ filter-name > < filter-class > org.apache.struts2.dispatcher.FilterDispatcher </ filter-class > </ filter > < filter-mapping > < filter-name > struts2 </ filter-name > < url-pattern > /* </ url-pattern > </ filter-mapping > |
也可以将 < filter-class > 中的类写成
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter |
如果记不得如何写 可以参考 Struts2 导入的 jar 文件找到 Struts2-core-2.1.6 可以在其中找到 , 或者参考 Struts2 文件中的实例程序
(4). 在 src 目录下新建一个 struts.xml 文件 该文件类似与 Struts1.x 中的 struts-config 文件 表单提交需要通过它来找到对应的 action
Struts.xml 文件该写上什么内容?可以参考 Struts2 文件目录下的 apps 文件夹下的 实例程序 将其 struts.xml 文件的头部声明内容 copy 下来 , 并在其中添加配置内容
<? xml version = "1.0" encoding = "UTF-8" ?> <! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts > < package name = "struts2" extends = "struts-default" > < action name = "login" class = "org.cgz.struts2.action.LoginAction" > < result name = "success" type = "dispatcher" > /result.jsp </ result > </ action > </ package > </ struts |
解释: action 中的 name=”login” 表单提交的 action 的内容 , 而 class 则对应要处理表单提交信息的 action 类
Result 表示处理完成之后需要跳转的路径 , 而 result 中 name=”success” 对应 action 中 execute 方法的返回内容
result 中的 type 属性 表示跳转的方式 可以是 请求转发 :dispatcher, 也可以是重定向 redirect
两种跳转的区别
1 、 请求转发( Dispatcher )在转发到的另一页面 还能保留 request 域里的东西
重定向( Redirect )的话,就 跟它的名字 “ 重定向 ” 一样 , 只是跳转到另一个页面 不会保存原来页面 Request 域的东西。
2 、请求转发 地址栏不变化
重定向 地址栏发生变化
总结: Struts2 环境的配置
1. 导入需要的 jar 文件
2. 配置 web.xml 文件 添加一个过滤器的配置
3. 创建 struts.xml 文件 并做相应配置
三、测试
(1). 建立 LoginAction
public class LoginAction { 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 ; } public String execute() throws Exception { return "success" ; } } |
注:实际上 , 当表单提交过来信息时 , 并不是直接去找 action 中的属性 而是调用相应的 setter 方法 将属性赋值上去
(2). 在 WebRoot 下新建 login.jsp 文件
在 JSP 中要使用 Struts2 标签 需要在 JSP 页面中添加
<%@ taglib prefix = "s" uri = "/struts-tags" %> |
< form action = "login.action" method = "post" > username: < input type = "text" name = "username" >< br > password: < input type = "password" name = "password" >< br > < input type = "submit" value = " 提交 " > </ form > |
(3). 建立 result.jsp 文件 用于显示表单提交的结果
< body > username:${requestScope.username } < br > password:${requestScope.password } </ body > |
在 JSP 中显示接受到的参数,还可以这样获取
< body > Username:<%= request.getParameter( "username" ) %> Password: <%= request.getParameter( "password" ) %> </ body > |
注:此处的获取的参数是表单提交的参数 而不是 requst 通过 setAttribute() 在 request 中设置的参数 ,struts.xml 中默认跳转是通过请求转发的方式 也就是 Dispatcher 的方式 因此可以保存表单提交的数据
四、 使用 Struts2 做简单的验证
(1) 、要使用验证 一般将创建的 action 继承自 ActionSupport 类 覆写其中的 validate 方法 和 execute 方法
public class LoginAction 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 { if ( "login" .equals( this .getUsername ().trim()) && "5982285" .equals( this .getPassword().trim())) { return "success" ; } else { return "failure" ; } } public void validate() { if ( null == this .getUsername () || "" .equals( this .getUsername ())) { this .addFieldError( "username" , " 用户名不能为空 " ); } if ( null == this .getPassword() || "" .equals( this .getPassword())) { this .addFieldError( "password" , " 密码不能为空 " ); } } } |
注:一般 validate 做一些与业务逻辑无关的验证 例如非空 长度等验证
ActionSupport 类中的 addFiledError() 方法 可以将错误的信息添加进去 不同于 struts1.x 的错误信息显示
Struts2 不需要在 jsp 页面使用错误信息显示的标签 如果出错 可以直接将错误信息添加到表单中错误属性的前面
addFiledError(“ 表单中提交的属性 ” , ” 错误信息 ”) 如果要使用国际化 也可以将错误信息添加到资源文件
< struts > < package name = "test01" extends = "struts-default" > < action name = "login" class = "com.cgz.struts2.test01.action.LoginAction" > < result name = "input" > /01_enviromentConfig/login.jsp </ result > < result name = "success" > /01_enviromentConfig/result.jsp </ result > < result name = "filure" > /01_enviromentConfig/login.jsp </ result > </ action > </ package > </ struts > |