在项目中想要使用Struts2框架,我该怎么做?从哪里开始?这是我的疑惑,我想也是很多初学者最大的疑惑。网上的论知识应有尽有,详细的说明与操作过程却是凤毛麟角。这两天的学习过程很有收获,因此在这里记录下来分享给大家,感觉会对初学者很有帮助。如果您对Struts框架已经有所了解,那么请抱着分析指正的态度来看。
之前学习JavaWEB的时候曾经粗略的学习过一段时间的Struts2框架,相关概念与原理了解了很多。但转了一大圈下来,还是一头雾水,最大的疑问来自于。我现在想要搭建一个Struts的项目,那么究竟应该从哪开始怎么去做呢?。最近正在准备做毕业设计,项目打算使用SSH2的框架,因为作为一个未来的JavaWEB开发者,感觉Struts最基本的了解和使用还是应该掌握的,因此强逼着自己照着书上的案例一步一步做,完成几个小的案例。经过两天时间的努力,终于对于如何使用Struts搭建一个项目有了初步的认识。感觉网上这样详细而且具体的搭建流程几乎没有,但作为初学者却是最为需要的。因此在这里整理发布出来
这篇博文不讲任何的原理与概念,因为相关的知识网上一抓一大把。由于个人的水平所限,因此本文所有的观点仅代表我个人的理解,不保证完全正确。如果有什么错误还请各位及时指正。
本文的案例来自于《JavaWeb入门经典》一书
下面开始正题
第一个struts程序——最简单的Struts程序
个人对于struts运行过程的理解:
1、项目启动时会读取 web.xml 中配置的内容
<filter-name >struts2 </filter-name > <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </ filter> < filter-mapping> <filter-name >struts2 </filter-name > <url-pattern >/* </url-pattern > </ filter-mapping></span>
<span style="font-size:18px;"><struts> <package name ="welcomePackage" extends="struts-default"> <action name ="first"> <result >/first.jsp </result > </action > </package > </struts></span>
<action>标签里写的是action的名字
<result>标签里写的是处理过后返回的页面,这里没有写result的name属性,默认为success也就是处理成功返回的页面,关于Action中自带的5中状态,这里不再多讲。
3、创建相应的JSP页面
请求页Index.jsp
在body中加入这个链接<a href="first.action">请求struts</a>
响应页first.jsp
这里我们只演示页面成功跳转,因此first页面什么都不写也可以
4、向Tomcat服务器发布项目
这里要注意一点 在MyEclipse中Deploy type时选择Packaged Archive(production mode)这样做,系统会把库中所依赖的jar包复制到WEB-INF的lib文件夹下,这样在tomcat服务器启动的时候,系统会从lib中读取到依赖的jar包
至此,我们的项目就可以运行了。打开Index.jsp页面点击链接,我们可以看到页面地址栏中显示的是first.action,而页面正常跳转到了first.jsp。
这样我们就搭建了一个最简单的Struts项目
第二个Struts程序——一个带有动态Action的Struts程序
通过动态Action程序的学习,就可以掌握普通Action的方式,因此在这里讲述一个动态Action的Struts程序。
1、新建项目,添加struts 特性/jar包,在web.xml中注册struts 2过滤器。具体操作前面已经介绍,这里不再赘述
2、创建Action,分别在其中编写相应的方法
<span style="font-size:18px;">import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { //注意这里要继承ActionSupport类 private String info; public String getInfo() { return info; } public void setInfo(String info) { this. info = info; } public String add () throws Exception { setInfo( "添加用户信息" ); return "add"; //返回到struts.xml中,struts根据返回的字符串选择要跳转的result页面 } public String update() throws Exception { setInfo( "修改用户信息" ); return "update"; } }</span>
3、配置Struts.xml,加入我们需要的action以及相应的返回页面
<span style="font-size:18px;"><struts> <package name ="user" extends="struts-default"> <action name ="userAction" class= "com.dukew.UserAction"> <result name ="add">user_add.jsp</ result> <!-- 在这里设置不同返回值要跳转到的页面 --> <result name ="update">user_update.jsp</ result> </action > </package > </struts></span>
这样我们就完成了一个简单的具有动态Action Struts程序
第三个Struts程序——制作一个简单的用户注册表单
认真的完成了前两个程序加上之前学习的Struts2的理论基础(如果对Struts理论性知识还有不明白的可以参考作者之前的笔记
【JavaWeb】【笔记】《JavaWeb入门经典》 第15章 Struts框架)
决定自己动手来制作一个简单却很常用的用户注册表单
开始:
- 新建项目
- 加入struts特性/jar包
- 在web.xml中注册struts2过滤器
-
创建jsp页面
index.jsp
<span style="font-size:18px;"> <body> <h1>用户注册</h1> <fieldset> <legend>注册信息</legend> <form action="userRegister"> <ul style="list-style-type: none;"> <li>用户名:<input type="text" name="name"> <li>密 码: <input type="password" name="password"> <li>性 别: 男<input type="radio" name="sex" id="male" value="male"> 女<input type="radio" name="sex" id="female" value="female"> <li>提交信息是否正确: 正确<input type="radio" name="validate" id="validate_true" value="true"> 错误<input type="radio" name="validate" id="validate_false" value="false"> <li> <input type="submit" value="注册"> </ul> </form> </fieldset> </body></span>
-
创建Action
<span style="font-size:18px;">import com.opensymphony.xwork2.ActionSupport; public class UserRegister extends ActionSupport { private static final long serialVersionUID = 1L; private String name; private String password; private String sex; private boolean validate; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public boolean isValidate() { return validate; } public void setValidate(boolean validate) { this.validate = validate; } @Override public String execute() throws Exception{ if(validate==true){ return SUCCESS; } else { return ERROR; } } }</span>
注意action中的属性名要和jsp页面中表单的 name 属性保持一致(这样就可以完成属性值的自动装配) -
编写struts.xml配置文件
<span style="font-size:18px;"><struts> <package name="myPackage" extends="struts-default"> <action name="userRegister" class="com.dukew.UserRegister"> <result name="success">success.jsp</result> <result name="error">error.jsp</result> </action> </package> </struts> </span>
根据不同的result返回相应的页面,注意这里的result要和Action中return的值相同,如果Action中返回的是5个常量状态,result的name属性应写成小写。 -
编写result返回的JSP页面
这个页面可以使用strust的s:property标签获取到Action中的属性
success.jsp
<span style="font-size:18px;"> <body> <ul style="list-style-type: none;"> <li>欢迎:<s:property value="name"/>!</li> <li>您现在的密码是:<s:property value="password"/></li> <li>您的性别是:<s:property value="sex"/></li> </ul></span>
error.jsp
页面内容不重要,这里不再贴出