https://blog.csdn.net/key0323/article/details/50773499

在项目中想要使用Struts2框架,我该怎么做?从哪里开始?这是我的疑惑,我想也是很多初学者最大的疑惑。网上的论知识应有尽有,详细的说明与操作过程却是凤毛麟角。这两天的学习过程很有收获,因此在这里记录下来分享给大家,感觉会对初学者很有帮助。如果您对Struts框架已经有所了解,那么请抱着分析指正的态度来看。

之前学习JavaWEB的时候曾经粗略的学习过一段时间的Struts2框架,相关概念与原理了解了很多。但转了一大圈下来,还是一头雾水,最大的疑问来自于。我现在想要搭建一个Struts的项目,那么究竟应该从哪开始怎么去做呢?。最近正在准备做毕业设计,项目打算使用SSH2的框架,因为作为一个未来的JavaWEB开发者,感觉Struts最基本的了解和使用还是应该掌握的,因此强逼着自己照着书上的案例一步一步做,完成几个小的案例。经过两天时间的努力,终于对于如何使用Struts搭建一个项目有了初步的认识。感觉网上这样详细而且具体的搭建流程几乎没有,但作为初学者却是最为需要的。因此在这里整理发布出来

这篇博文不讲任何的原理与概念,因为相关的知识网上一抓一大把。由于个人的水平所限,因此本文所有的观点仅代表我个人的理解,不保证完全正确。如果有什么错误还请各位及时指正。

本文的案例来自于《JavaWeb入门经典》一书

下面开始正题

第一个struts程序——最简单的Struts程序

个人对于struts运行过程的理解:

1、项目启动时会读取 web.xml 中配置的内容

2、在web.xml中配置struts的过滤器,这样我们就把struts加入了项目当中
3、struts的过滤器会去读取struts的配置文件struts.xml,因此我们要在struts.xml文件中进行配置
 
使用MyEclipse/Eclipse搭建一个Struts2项目
一、项目创建
1、新建项目-这里要注意JAVA版本的选择以及Target runtime的选择
2、MyEclipse中-右键项目名-MyEclipse-Project Facets-install Apache Struts 2.x Facets
(Eclipse中这一步应该是把struts需要用的jar包以库的形式导入,或加入到WEB-INF-lib文件夹下)
这一步是要向项目中导入struts2的jar包,这一步使用MyEclipse的话会非常简单,并且会自动在web.xml文件中注册struts2的过滤器,并且会自动创建struts的struts.xml配置文件
这里需要注意的另外一点是,myelipse是以库的形式导入的struts2的jar包,在项目中的lib文件夹下并没有相应的jar包,未来如果有项目移植或者发布的情况注意要手动把jar包放到lib文件夹下
 
二、让我们开始吧
1、修改web.xml,在<web-app>节点下新增struts2的过滤器(如果使用的是MyEclipse,那么这一步已经自动帮我们完成了)
  1. <filter-name >struts2 </filter-name >
  2. <filter-class>
  3. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  4. </filter-class>
  5. </ filter>
  6. < filter-mapping>
  7. <filter-name >struts2 </filter-name >
  8. <url-pattern >/* </url-pattern >
  9. </ filter-mapping></span>
 

这段代码基本上是固定不变的

 
 
2、修改src文件夹下的struts.xml(这个文件夹实际上存放在 WEB-INF的classes文件夹)

  1. <span style="font-size:18px;"><struts>
  2. <package name ="welcomePackage" extends="struts-default">
  3. <action name ="first">
  4. <result >/first.jsp </result >
  5. </action >
  6. </package >
  7. </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程序。

普通的Action对象都是通过重写execute()方法处理浏览器请求。
动态Action处理方式通过请求Action对象中一个具体的方法来实现动态操作,操作方式是通过在请求Action的URL地址后加上请求字符串(方法名)与Action对象中的方法匹配,注意Action地址与请求字符串之间以!分隔
     eg:userAction!add

开始:

1、新建项目,添加struts 特性/jar包,在web.xml中注册struts 2过滤器。具体操作前面已经介绍,这里不再赘述

2、创建Action,分别在其中编写相应的方法

  1. <span style="font-size:18px;">import com.opensymphony.xwork2.ActionSupport;
  2. public class UserAction extends ActionSupport {    //注意这里要继承ActionSupport类
  3. private String info;
  4. public String getInfo() {
  5. return info;
  6. }
  7. public void setInfo(String info) {
  8. this. info = info;
  9. }
  10. public String add () throws Exception {
  11. setInfo( "添加用户信息" );
  12. return "add";    //返回到struts.xml中,struts根据返回的字符串选择要跳转的result页面
  13. }
  14. public String update() throws Exception {
  15. setInfo( "修改用户信息" );
  16. return "update";
  17. }
  18. }</span>

3、配置Struts.xml,加入我们需要的action以及相应的返回页面

  1. <span style="font-size:18px;"><struts>
  2. <package name ="user" extends="struts-default">
  3. <action name ="userAction" class= "com.dukew.UserAction">
  4. <result name ="add">user_add.jsp</ result>      <!-- 在这里设置不同返回值要跳转到的页面 -->
  5. <result name ="update">user_update.jsp</ result>
  6. </action >
  7. </package >
  8. </struts></span>
4、在请求提交页面中添加下面两个链接
<a href ="userAction!add"> 添加用户</a >
<a href ="userAction!update"> 修改用户</a >
     注意href中地址的写法
     点击链接,程序会直接跳入到userAction相应的方法当中。不同的方法返回不同的值,struts.xml根据返回的不同的值跳转到相应的JSP页面
     在响应页面中可以使用struts标签<s:property value="info"/>获取到Action中的属性值,但这里要注意一点,必须在页面头加入struts标签库的引用<%@taglib uri="/struts-tags"prefix="s"%>

这样我们就完成了一个简单的具有动态Action Struts程序

第三个Struts程序——制作一个简单的用户注册表单

认真的完成了前两个程序加上之前学习的Struts2的理论基础(如果对Struts理论性知识还有不明白的可以参考作者之前的笔记

【JavaWeb】【笔记】《JavaWeb入门经典》 第15章 Struts框架

决定自己动手来制作一个简单却很常用的用户注册表单

开始:

  1. 新建项目
  2. 加入struts特性/jar包
  3. 在web.xml中注册struts2过滤器
  4. 创建jsp页面
    index.jsp
    1. <span style="font-size:18px;">  <body>
    2. <h1>用户注册</h1>
    3. <fieldset>
    4. <legend>注册信息</legend>
    5. <form action="userRegister">
    6. <ul style="list-style-type: none;">
    7. <li>用户名:<input type="text" name="name">
    8. <li>密  码:   <input type="password"  name="password">
    9. <li>性  别:
    10. 男<input type="radio" name="sex" id="male" value="male">
    11. 女<input type="radio" name="sex" id="female" value="female">
    12. <li>提交信息是否正确:
    13. 正确<input type="radio" name="validate" id="validate_true" value="true">
    14. 错误<input type="radio" name="validate" id="validate_false" value="false">
    15. <li>  <input type="submit" value="注册">
    16. </ul>
    17. </form>
    18. </fieldset>
    19. </body></span>

    这里我们添加了一个单选钮,让我们可以模拟页面中出现错误的情况

  5. 创建Action
    1. <span style="font-size:18px;">import com.opensymphony.xwork2.ActionSupport;
    2. public class UserRegister extends ActionSupport {
    3. private static final long serialVersionUID = 1L;
    4. private String name;
    5. private String password;
    6. private String sex;
    7. private boolean validate;
    8. public String getName() {
    9. return name;
    10. }
    11. public void setName(String name) {
    12. this.name = name;
    13. }
    14. public String getPassword() {
    15. return password;
    16. }
    17. public void setPassword(String password) {
    18. this.password = password;
    19. }
    20. public String getSex() {
    21. return sex;
    22. }
    23. public void setSex(String sex) {
    24. this.sex = sex;
    25. }
    26. public boolean isValidate() {
    27. return validate;
    28. }
    29. public void setValidate(boolean validate) {
    30. this.validate = validate;
    31. }
    32. @Override
    33. public String execute() throws Exception{
    34. if(validate==true){
    35. return SUCCESS;
    36. } else {
    37. return ERROR;
    38. }
    39. }
    40. }</span>

    注意action中的属性名要和jsp页面中表单的 name 属性保持一致(这样就可以完成属性值的自动装配)

  6. 编写struts.xml配置文件
    1. <span style="font-size:18px;"><struts>
    2. <package name="myPackage" extends="struts-default">
    3. <action name="userRegister" class="com.dukew.UserRegister">
    4. <result name="success">success.jsp</result>
    5. <result name="error">error.jsp</result>
    6. </action>
    7. </package>
    8. </struts>  </span>

    注意action name属性要和jsp页面form提交的action保持一致
    根据不同的result返回相应的页面,注意这里的result要和Action中return的值相同,如果Action中返回的是5个常量状态,result的name属性应写成小写。

  7. 编写result返回的JSP页面
    这个页面可以使用strust的s:property标签获取到Action中的属性
    success.jsp
    1. <span style="font-size:18px;">  <body>
    2. <ul style="list-style-type: none;">
    3. <li>欢迎:<s:property value="name"/>!</li>
    4. <li>您现在的密码是:<s:property value="password"/></li>
    5. <li>您的性别是:<s:property value="sex"/></li>
    6. </ul></span>

    error.jsp
    页面内容不重要,这里不再贴出

         这样,我们就完成了我们自己创建的一个小程序,一个简单的用户注册表单。根据注册页面中是否出错的选择,我们可以跳转到不同结果的页面。
第三个程序的流程是作者做项目时候的流程,和之前书中的例子的流程不大相同。但我个人认为这样的流程清晰易懂,不易出错,完全属于个人喜好。大家可以根据自己的情况来选择合适的工作流程。
 
总结:经过三个小项目,基本上可以熟练的搭建起一个基本的struts程序了。strust中包含的内容还有很多,比较重要的拦截器这里并没有讲到,因为作者对这部分的知识还存在一些疑惑,需要再做研究。
再总结一次struts项目的搭建流程:
1、创建项目
2、加入jar包
3、修改web.xml
4、修改struts.xml
5、编写Action
6、编写JSP页面
 
最后想说:动手是最快速的学习方式,发现错误并解决是最好的成长方式。希望各位初学者们都能够放下理论,动手去做,发现问题。
 
祝大家能学有所成,工作顺利!

转载 初学者必看——最简单最清晰的Struts2项目搭建流程的更多相关文章

  1. 15个初学者必看的基础SQL查询语句

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...

  2. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  3. java初学者必看之构造方法详细解读

    java初学者必看之构造方法详细解读 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法. 格式 public 类名称(参数类型 参数名称){ 方法体 } 注 ...

  4. web前端开发初学者必看的学习路线(附思维导图)

    很多同学想学习WEB前端开发,虽然互联网有很多的教程.网站.书籍,可是却又不知从何开始如何选取.看完网友高等游民白乌鸦无私分享的原标题为<写给同事的前端学习路线>这篇文章,相信你会有所收获 ...

  5. 超简单的react和typescript和引入scss项目搭建流程

    1.首先我们先创建一个react项目,react官网也有react项目搭建的命令 npx create-react-app my-app cd my-app 2.安装我们项目需要的样式依赖,这个项目我 ...

  6. Yii初学者必看(转载)

    Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术. 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表示 ...

  7. springmvc最简单的搭建,初学者必看

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  8. Python初学者必看(1)

    python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  9. UI设计初学者必看,这款设计神器教你快速入门

    网络时代,网页和手机App已经深入到人们生活的方方面面.这也使得App界面设计越来越受青年求职者们的青睐,并纷纷投入这个行业.但是,作为UI设计初学者,究竟如何才能快速的入门?当今市场上,是否有那么一 ...

随机推荐

  1. Celery与Django的结合

    一.什么是Celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以实现任务的异步处理以及定时任务的处理,它的基本工作流程是: 先启动任务执行单元Worker,让它一 ...

  2. [BZOJ5073] [Lydsy1710月赛]小A的咒语 后缀数组+dp+贪心

    题目链接 首先这种题一看就是dp. 设\(dp[i][j]\)表示\(A\)序列中到\(i\)位之前,取了\(j\)段,在\(B\)中的最长的长度. 转移也比较简单 \[ dp[i][j] \to d ...

  3. boost intrusive

    1. the advantages of intrusive container (1) Intrusive containers don't allocate memory dynamically. ...

  4. 每天一个linux命令:head(15)

    head head命令用于显示文件的开头的内容.在默认情况下,head命令显示文件的头10行内容. 格式 head [参数] [文件] ​ 参数选项 参数 备注 -q 不显示文件名的头信息 -v 总是 ...

  5. 重写UIlabel的setText:方法,过滤或者拦截text设置

    因为项目中很多地方都有对UIlabel的赋值,但是text.length == 0 或者为空时并没有去给默认值,导致很多界面空间是白板, 所以不想一个一个去改.希望能重写UIlabel 的setTex ...

  6. vue工程本地代码请求http发生跨域提示错误解决方法

    这个可以使用代理进行跨域,这样看来跨域的方法就有几种了,对于iframe中的用postmassage,对于vue工程中的跨域则使用代理模式. 代理模式配置如下: 在config文件夹下找到index. ...

  7. AGC033 D~F——[ 值放到角标的DP ][ 思路+DP ][ 思路 ]

    地址:https://atcoder.jp/contests/agc033/ D Complexity dp[ i ][ j ][ k ][ l ] 表示左上角是 ( i , j ) .右下角是 ( ...

  8. 【靶场练习_sqli-labs】SQLi-LABS Page-1(Basic Challenges)

    GET篇 Less-1:  1.用order by得出待查表里有三个字段 http://192.168.40.165/sqli-labs-master/Less-1/?id=1' order by 3 ...

  9. [CSP-S模拟测试73]题解

    A.小P的2048 作为一个看B哥玩了一个寒假的人这种题闭眼切好吧 模拟即可.程序模块化后直接复制粘贴. 说什么模拟不能复制粘贴的都没水平 #include<cstdio> #includ ...

  10. H5页面二次分享

    对于H5页面来说二次分享还是蛮重要的,毕竟qq还是微信发出去之后习惯性的使用自带的分享功能.和PC端不同,PC直接复制地址了.前两天在做请柬,踩了不少的雷,个人开发和公司开发还是不一样,各种问题,其他 ...