使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/MustangJy/article/details/80280205

作为一个刚学习完JavaWeb必要储备知识的人,早已经急不可耐地想要学习运用MVC设计模式的Web框架了。目前Java的三大框架仍然是ssh(Struts、Spring、Hibernate),而struts2对于struts1的一些缺点进行了改进,那么本着了解MVC设计模式和基础web框架学习的目的,开始学习struts2。开发工具IDEA(没有用过Eclipse,但是已经习惯了IDEA,就不改了)。

经过之前Tomcat的学习,现在已经在IDEA中部署好了tomcat服务器。如果你没有部署好,网上一大堆IDEA部署Tomcat的教程,也可以参照本人其他博客中的教程。

大致了解Struts2框架:Struts 2的架构与传统的MVC框架略有不同,因为它由Action扮演模型的角色,而不是控制器,虽然这样会有一些重叠。

上图描述了Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。
除了上述部分,还有许多组件相关的信息。web应用程序组件、Actions组件、拦截器组件、结果组件等等。我们目前只需要大致了解,通过后续代码将会初步学习到该框架的架构。

那么第一步,新建一个Project:

之所以选择Set up library later是因为选择别的的话,lib文件夹的位置不一定是对的。

第二步,将所需jar包添加到lib中:

访问Struts的官网(点击打开链接)下载所需jar包:struts-2.5.16-min-lib.zip 。 解压并将其中的jar包复制到工程的web/WEB-INF/lib目录下,然后不要忘记右键jar包选择添加到库中。完毕之后,所需要的依赖包都已经搞定了。

第三步,创建model、action类:

model类和Action类共同作用web应用的业务逻辑,其中model可以用来与数据库通信等获取数据的操作。我们在src目录下创建一个directory名为model,在该目录下添加一个model类,MessageStore.java


   
   
  1. package model;
  2. public class MessageStore {
  3. private String message;
  4. public MessageStore() {
  5. message = "Welcome to HelloWorld Page.\nHelloWorld!";
  6. }
  7. public String getMessage() {
  8. return message;
  9. }
  10. }
model的方法都是由action类来调用的,相当于model是为action类服务的工具类。那么下面我们在src目录下创建一个action文件夹,添加一个action类, HelloWorldAction.java

   
   
  1. package action;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. import model.MessageStore;
  4. public class HelloWorldAction extends ActionSupport {
  5. private MessageStore messageStore;
  6. @Override
  7. public String execute() throws Exception {
  8. messageStore = new MessageStore();
  9. return SUCCESS;
  10. }
  11. public MessageStore getMessageStore() {
  12. return messageStore;
  13. }
  14. }

在这个action类中调用了model类的构造方法。注意,在上面两个model类和action类中,都有一个getter方法,是为了在JSP中分别对messageStore和message进行获取,这里用到了JavaBean的规范。 另外,HelloWorldAction类继承了ActionSupport类,它是Action接口的实现类。并且HelloWorldAction类重载了ActionSupport类的execute()方法,该方法返回一个字符串。后续我们可以看到在哪里调用了该方法。

第四步:创建视图

我们需要JSP来呈现最终的信息,当一个预定义动作发生时这个页面将被Struts2 框架调用,并且这个映像会定义到 struts.xml 文件里。首先是一个index.jsp(在web文件夹下):


   
   
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ taglib prefix="s" uri="/struts-tags" %>
  3. <html>
  4. <head>
  5. <title>Index </title>
  6. </head>
  7. <body>
  8. <h1>Welcome to struts2 learning! It's an index page. </h1> <br>
  9. Clike <a href="<s:url action='hello'/> ">HERE </a> to Enter HelloWorld page!
  10. </body>
  11. </html>

在这里用到了一个strutsAPI中的自定义标签,如果不想用自定义标签,可以使用<a href="hello.action">来代替<a href="<s:url action='hello'/>。

这个index页面上有一个超链接,指向hello.action。在我们的例子中,这个action要导航至HelloWorld.jsp


   
   
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ taglib prefix="s" uri="/struts-tags" %>
  3. <html>
  4. <head>
  5. <title>Hello World </title>
  6. </head>
  7. <body>
  8. <h3>This is HelloWorld page. </h3> <br>
  9. Use &lt;s:property value="messageStore.message"/&gt; to call getMessageStore().getMessage() to get messageStore.message from ValueStack(值栈) of the action.
  10. <br>The message is : <br>
  11. <h3> <s:property value="messageStore.message"/> </h3>
  12. </body>
  13. </html>

这个HelloWorld.jsp中也使用了自定义标签<s:property>用来获取action值栈中的对象和值。值栈的概念暂时不讲,目前我们只需要知道这个标签是调用HelloWorldAction类和MessageStore类中定义的getMessageStore().getMessage()方法来获取值。

第五步:配置文件struts.xml,web.xml,使得视图与action之间相关联:

建立工程的时候src目录下会有一个struts.xml,它是负责视图与action之间的关联关系的配置的,将其修改为:


   
   
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <constant name="struts.devMode" value="true"/>
  7. <package name="basicstruts2" extends="struts-default">
  8. <action name="index">
  9. <result>/index.jsp </result>
  10. </action>
  11. <action name="hello" class="action.HelloWorldAction" method="execute">
  12. <result name="success">/HelloWorld.jsp </result>
  13. </action>
  14. </package>
  15. </struts>

这里我们设定常数struts.devMode的值为真,因为我们是在开发环境下工作,需要查看一些有用的日志消息。然后,我们定义一个名为basicstruts2的数据包。当你想要把你的Actions集合在一起时,创建一个数据包是非常有用的。extends="struts-default"表示该package继承了默认包。这个包的位置在我们下载的struts的lib中。如果你的extends="struts-default"显示找不到该包,那么需要在设置中把它设置好。File - Project Structure:

首先把所有的都删掉,然后再添加:

最终结果就是只有一个FileSet,该FileSet包含struts.xml和struts-default.xml.  这时候在struts.xml中就可以正常引用extends="struts-default"了。

现在我们继续回来看struts.xml的内容:
        <action name="index">               这个标签定义了一个名为index的action,其子标签是该action的描述。
            <result>/index.jsp</result>      表示action执行的结果将会返回index.jsp的内容。
        </action>     
        <action name="hello" class="action.HelloWorldAction" method="execute"> 

定义了一个名为hello的action,可以表示为"hello.action",该action会调用HelloWorldAction类的execute()方法。
            <result name="success">/HelloWorld.jsp</result>     
表示如果HelloWorldAction的execute()方法返回字符串为“success”,则将会返回HelloWorld.jsp的内容。

        </action>

这样,通过struts.xml的配置,就可以将整个工程的各个类型的文件的关系结构确定下来了。

最后,设置WEB-INF/web.xml


   
   
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation= "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5. version= "3.1">
  6. <display-name>BasicSrtuts2 </display-name>
  7. <welcome-file-list>
  8. <welcome-file>index.jsp </welcome-file>
  9. </welcome-file-list>
  10. <filter>
  11. <filter-name>struts2 </filter-name>
  12. <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class>
  13. </filter>
  14. <filter-mapping>
  15. <filter-name>struts2 </filter-name>
  16. <url-pattern>/* </url-pattern>
  17. </filter-mapping>
  18. </web-app>
学习过JavaWeb基础知识的同学知道,这相当于配置了一个全局过滤器,对应的java处理类为

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter。如果没有把下载的jar包配置好,那么可能就无法解析该类。

第六步:运行

现在我们应该已经得到了一个完整的IDEA项目,项目架构是这样的:

Tomcat服务器的配置就使用默认配置即可。运行该web应用:

点击链接:

可以看到,我们的应用是能够按照想法来正常运行的。

此时IDEA会自动生成一个out文件夹:

这个..exploded文件夹中的文件就是可以不通过IDEA而直接部署在Tomcat服务器中所需的文件,通过这个目录下的文件,可以将web应用发布在互联网。

分析:

认真分析整个流程,整理出了struts2各个组件的流程和架构关系:


建议学习者先对着本教程把步骤敲通一遍,然后自己回想着重新把这个工程重新写两遍,这样就可以记住哪些地方需要注意,哪些地方容易忘记。仔细体会,这个工程和初学javaweb时的工程有哪些不同,如果用基础的JavaWeb知识想要完成这样的项目,将会使用怎样的工程架构。从而试着去理解为什么我们说struts2使用了MVC的设计模式,以及MVC的设计模式有什么样的特点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值