美文网首页
struts2学习第一天

struts2学习第一天

作者: 暮爱深秋 | 来源:发表于2019-10-29 11:10 被阅读0次

Stuts2是基于MVC设计模式成熟的Web应用框架。不仅仅是Struts1的下一个版本,是一个全新的Struts架构。由WebWork社区跟Strut社区联手打造的。(教程来自W3Cschool

Struts2框架的特性

  • POJO表单和POJO操作——Struts2去掉了Struts中的Action Forms部分。在Struts框架中,你可以用任意pojo来接收表单输入,同样的,你可以把任意pojo是为一个Action类。
  • 标签支持——Struts2改进了标签表单,让开发人员写更少的代码。
  • AJAX支持——Struts2被认可接受进Web2.0技术,并创建了功能类似标准Struts2标签的AJAX标签,把AJAX支持整合到其结果中。
  • 易整合——可以与现在多种框架整合。
  • 模板支持——支持使用模板生成视图。
  • 插件支持——有大量的插件可用于Struts2.
  • 性能分析——Struts2 为调试和配置应用程序提供综合的性能分析,此外,Struts也以嵌入调试工具的形式提供集成调试。
  • 标签易修改——在Struts2 中,可使用Freemarker的模板对标签标记进行调整,而修改标签不需要JSP或是Java知识,基本的HTML、XML和CSS知识就足够了
  • 促进减少配置——Struts2 使用各种设置的默认值促进减少配置,而你不需要再配置什么除非是偏离了Struts2 设定的默认设置
  • 视图技术——Struts2为多种视图技术提供支持。

Struts2框架的缺点

  • 更大的学习曲线——使用Struts MVC,你必须要熟悉JSP、Servlet APIs标准以及一个大型、复杂的框架。
  • 文档缺乏——相比于Servlet和JSP APIs标准,Struts的在线资源较少,许多初学者会发现Apache在线文档混乱并缺乏整理。
  • 不够透明——相比于使用正常的基于Java的Web应用程序,使用Struts的应用程序有许多是进行在后台,这使得框架不易于理解。

Struts2架构

MVC拉动的框架,通过以下五个部分实现的。

  • 操作(Actions)
  • 拦截器(Interceptors)
  • 值栈(Value Stack)/OGNL
  • 结果(Resut)/结果类型
  • 视图技术
Struts2高级系统架构下的模型、视图及控制器

上图描述了Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。

请求的生命周期

  • 用户发送一个资源需求的请求到服务器。
  • 核心控制器查看请求后确定适当的动作。
  • 使用验证、文件上传等配置拦截器功能。
  • 执行选择的动作来完成请求的操作。
  • 如果有需求,配置的拦截器可做任何后期处理。
  • 视图显示结果并返回给用户。

Hello World

示例查看 https://www.w3cschool.cn/struts_2/struts_examples.html

注意:W3Cschool中示例用的struts-2.2.3,在我使用struts-2.50版本的时候出异常:Class not found:FilterDisparcture
自2.1.3版本开始,ActionContextCleanUp和FilterDispatcher都由StrutsPrepareAndExecuteFilter代替。

<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"  
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"  
    version="3.1">  
    <display-name>Struts</display-name>  
    <welcome-file-list>  
        <welcome-file>index.html</welcome-file>  
        <welcome-file>index.htm</welcome-file>  
        <welcome-file>index.jsp</welcome-file>  
        <welcome-file>default.html</welcome-file>  
        <welcome-file>default.htm</welcome-file>  
        <welcome-file>default.jsp</welcome-file>  
    </welcome-file-list>  
    <filter>  
        <filter-name>Struts2</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>Struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
</web-app>  

struts2配置文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"  
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"  
    version="3.1">  
    <display-name>Struts</display-name>  
    <welcome-file-list>  
        <welcome-file>index.html</welcome-file>  
        <welcome-file>index.htm</welcome-file>  
        <welcome-file>index.jsp</welcome-file>  
        <welcome-file>default.html</welcome-file>  
        <welcome-file>default.htm</welcome-file>  
        <welcome-file>default.jsp</welcome-file>  
    </welcome-file-list>  
    <filter>  
        <filter-name>Struts2</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>Struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
</web-app>  

struts.xml

<?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>
   <constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">
     
      <action name="hello" 
            class="cn.w3cschool.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
      <-- more actions can be listed here -->

   </package>
   <-- more packages can be listed here -->

</struts>

用<package>标签声明不同的包,这里的<package>标签允许配置的分离和模块化。这在你进行一个大的项目并且项目分为多个不同的模块时,是非常有用的
<package>标签具有以下属性:

属性 描述
names(必许) 为package的唯一标识
extends 指定package指定另一package的所有配置。通常情况下使用struts-default作为package的基础
abstract 定义package是抽象的,如果定义为true,则package不能被最终用户使用。
namespace Actions的唯一命名空间

<constant>标签以及name和value属性将用于覆盖default.properties中定义的任意属性,就像我们设置的struts.devMode属性一样。设置struts.devMode属性允许我们在日志文件中查看更多的调试消息。

我们定义<action>标签对应我们每一个想要访问的url,并且使用excute()方法定义一个访问相应的URL时将要访问的类。

<reuslt>(结果)确定到执行操作后返回到浏览器的内容,而从操作返回的字符串应该是结果的名称。<result>按照上述操作或作为“全局”配置结果,可用于包中的每个操作。<result>有name和type属性可选,默认的name值是“success”

struts.xml文件可以随着时间的推移而增长,因此通过包打破它是使它模块化的一种方式,但struts提供了另外一种模块化struts.xml的方法,可以将文件拆分成多个xml文件,并用以下方式导入他们:

<?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>
     <include file="my-struts1.xml"/>
     <include file="my-struts2.xml"/>
</struts>

struts-default.xml文件包含struts的标准配置设置,所以不必在很多项目中重复这些配置。

struts-config.xml

struts-config.xml文件是Web Client中View和Model组件之间的链接。一般不会使用这些设置。主要包含元素:

序号 拦截器和说明
1 struts-config
这是配置文件的根节点
2 form-beans
这是你将ActionForm映射到name的位置,你可以在struts-config.xml文件的其余部分,甚至在JSP页面上,将这个name用作ActionForm的别名
3 global fowards
此部分将你web-app上的页面映射到name,你可以使用这个name来引用实际页面。这避免了你对网页上的url进行硬解码。
4 action-mappings
这是你声明表单处理程序的地方,也被称为操作映射(action mappings)。
5 controller
这部分是配置struts内部,在实际情况中很少使用。
6 plug-in
这部分是告诉struts在哪里找到属性文件,它包含提示和错误消息

示例:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config>

   <!-- ========== Form Bean Definitions ============ -->
   <form-beans>
      <form-bean name="login" type="test.struts.LoginForm" />
   </form-beans>

   <!-- ========== Global Forward Definitions ========= -->
   <global-forwards>
   </global-forwards>

   <!-- ========== Action Mapping Definitions ======== -->
   <action-mappings>
      <action
         path="/login"
         type="test.struts.LoginAction" >

         <forward name="valid" path="/jsp/MainMenu.jsp" />
         <forward name="invalid" path="/jsp/LoginView.jsp" />
      </action>
   </action-mappings>

   <!-- ========== Controller Definitions ======== -->
   <controller 
      contentType="text/html;charset=UTF-8"
      debug="3"
      maxFileSize="1.618M"
      locale="true"
      nocache="true"/>

</struts-config>

详细内容查看官网文档。

struts.properties

这个配置文件提供了一种机制来改变框架的默认行为。
struts.properties配置文件中的所有属性也可以在web.xml中配置使用init-param,以及在struts.xml文件中使用constant标签,但如果你想保持时间独立以及保留更多的struts细节,那么你可以在WEB—INF/classes文件夹下创建这个文件。struts.properties中的配置将被覆盖。default.properties中配置的默认值,这些值分布在struts2-core-x.y.z.jar分布中。有一些属性,你可以考虑使用struts.properties文件:

### When set to true, Struts will act much more friendly for developers
struts.devMode = true

### Enables reloading of internationalization files
struts.i18n.reload = true

### Enables reloading of XML configuration files
struts.configuration.xml.reload = true

### Sets the port that the server is run on
struts.url.http.port = 8080

Action动作

Action是struts2的核心,因为它们使用与所有的MVC框架。每个URL映射到特定的action,其提供处理用户请求所需的处理逻辑。
action的两个重要功能:

  1. action在将数据从请求到视图(无论是JSP还是其他类型的结果)方面起着重要的作用。
  2. action必须协助框架确定那个结果应该响应在请求的视图中。

创建Action

必须有一个无参方法返回String或者Result对象,必须是POJO。
没有指定无参方法时默认使用excute()方法。

可以扩展ActionSupport类,该类实现六个接口,包括Action接口:

public interface Action(){
    public static final String SUCCESS = "success";
    public static final String NONE = "none";
    public static final String ERROR = "error";
    public static final String INPUT = "input";
    public static final Stirng LOGIN = "login";
    public String execute() throws Exception;
}

可以扩展上例中的HelloWorldAction方法:

packge com.kfw5264.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{
    private String name;

    public String excute() throws Exception{
        if("SECRET".equals(name)){
            return SUCCESS;
        }else{
            return ERROR;
        }
    }

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }
}

由于继承了ActionSupport类,所以我们可以使用String常量。此时,可以将struts.xml修改为:

<?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>
      <constant name="struts.devMode" value="true" />
      <package name="helloworld" extends="struts-default">
         <action name="hello" 
            class="cn.w3cschool.struts2.HelloWorldAction"
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
            <result name="error">/AccessDenied.jsp</result>
         </action>
      </package>
    </struts>

创建多个Actions

  1. 定义不同类
package com.kfw5264.struts2;
import com.opensymphony.xwork2.ActionSupport;

   class MyAction extends ActionSupport{
      public static String GOOD = SUCCESS;
      public static String BAD = ERROR;
   }

   public class HelloWorld extends ActionSupport{
      ...
      public String execute()
      {
         if ("SECRET".equals(name)) return MyAction.GOOD;
         return MyAction.BAD;
      }
      ...
   }

   public class SomeOtherClass extends ActionSupport{
      ...
      public String execute()
      {
         return MyAction.GOOD;
      }
      ...
   }
  1. xml配置action
<?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>
<constant name="struts.devMode" value="true" />
<package name="helloworld" extends="struts-default">
   <action name="hello" 
      class="cn.w3cschool.struts2.HelloWorld" 
      method="execute">
      <result name="success">/HelloWorld.jsp</result>
      <result name="error">/AccessDenied.jsp</result>
   </action>
   <action name="something" 
      class="cn.w3cschool.struts2.SomeOtherClass" 
      method="execute">
      <result name="success">/Something.jsp</result>
      <result name="error">/AccessDenied.jsp</result>
   </action>
</package>
</struts>

相关文章

  • structs2相关

    Struts2第一天 Struts2的学习路线 今天的课程内容 案例一:使用Struts2框架完成登录功能 需求分...

  • Struts2_day01

    Struts2_day01 Struts2课程安排 第一天 struts2 入门 2017年10月27日 第二天 ...

  • Struts2_day02

    Struts2_day02 Struts2课程安排 第一天 struts2 入门 2017年10月27日 第二天 ...

  • Struts下

    Struts2 第三天 学习目标 在struts2框架下怎么实现文件的上传下载 在struts2框架中怎么使用js...

  • Struts基础知识

    下一篇:struts2核心文件 Struts基础知识 参考: Struct2 入门(Struts2学习系列一)My...

  • 【Java中级】14.0 SSH之Struts2框架(一)——基

    1.0 Struts2知识路线 Struts2的概述、Struts2的入门、Struts2常见的配置、Struts...

  • struts2学习第一天

    Stuts2是基于MVC设计模式成熟的Web应用框架。不仅仅是Struts1的下一个版本,是一个全新的Struts...

  • Struts2系列之-----入门

    主要内容 Struts2简介 环境搭建 Struts2的执行过程及原理 Struts2的基本配置 Struts2的...

  • struts2的核心和工作原理

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 S...

  • struts2的核心和工作原理

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 S...

网友评论

      本文标题:struts2学习第一天

      本文链接:https://www.haomeiwen.com/subject/souwvctx.html