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

作为一个刚学习完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扮演模型的角色,而不是控制器,虽然这样会有一些重叠。
使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第1张图片
上图描述了Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。
除了上述部分,还有许多组件相关的信息。web应用程序组件、Actions组件、拦截器组件、结果组件等等。我们目前只需要大致了解,通过后续代码将会初步学习到该框架的架构。

那么第一步,新建一个Project:
使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第2张图片

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

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

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

使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第3张图片

第三步,创建model、action类:

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

package model;

public class MessageStore {
    private String message;

    public MessageStore() {
        message = "Welcome to HelloWorld Page.\nHelloWorld!";
        }

    public String getMessage() {
        return message;
    }
}
model的方法都是由action类来调用的,相当于model是为action类服务的工具类。那么下面我们在src目录下创建一个action文件夹,添加一个action类, HelloWorldAction.java
package action;

import com.opensymphony.xwork2.ActionSupport;
import model.MessageStore;

public class HelloWorldAction extends ActionSupport {
    private MessageStore messageStore;

    @Override
    public String execute() throws Exception {
        messageStore = new MessageStore();
        return SUCCESS;
    }

    public MessageStore getMessageStore() {
        return messageStore;
    }
}

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

第四步:创建视图

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>


    Index


Welcome to struts2 learning! It's an index page.


Clike HERE to Enter HelloWorld page!

在这里用到了一个strutsAPI中的自定义标签,如果不想用自定义标签,可以使用来代替<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> Hello World

This is HelloWorld page.


Use <s:property value="messageStore.message"/> to call getMessageStore().getMessage() to get messageStore.message from ValueStack(值栈) of the action.
The message is :

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

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

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






    
    
        
            /index.jsp
        
        
            /HelloWorld.jsp
        
    

这里我们设定常数struts.devMode的值为真,因为我们是在开发环境下工作,需要查看一些有用的日志消息。然后,我们定义一个名为basicstruts2的数据包。当你想要把你的Actions集合在一起时,创建一个数据包是非常有用的。extends="struts-default"表示该package继承了默认包。这个包的位置在我们下载的struts的lib中。如果你的extends="struts-default"显示找不到该包,那么需要在设置中把它设置好。File - Project Structure:
使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第4张图片
首先把所有的都删掉,然后再添加:

使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第5张图片

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

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

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

       

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

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




    BasicSrtuts2
    
        index.jsp
    
    
    
        struts2
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    
    
        struts2
        /*
    
学习过JavaWeb基础知识的同学知道,这相当于配置了一个全局过滤器,对应的java处理类为

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

第六步:运行

现在我们应该已经得到了一个完整的IDEA项目,项目架构是这样的:
使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第6张图片
Tomcat服务器的配置就使用默认配置即可。运行该web应用:
使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第7张图片
点击链接:
使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第8张图片

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

此时IDEA会自动生成一个out文件夹:
使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第9张图片
这个..exploded文件夹中的文件就是可以不通过IDEA而直接部署在Tomcat服务器中所需的文件,通过这个目录下的文件,可以将web应用发布在互联网。

分析:

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

使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用_第10张图片


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

你可能感兴趣的:(Java,Web框架)