• Struts2 入门介绍(一)


    一、什么是Struts2

      1、Struts2是一个开发框架,应用于JavaEE三层架构中的web层。 

      2、Struts2框架是在Struts1和webwork基础上发展的一个全新的框架。

      3、Struts2解决的问题:在servlet中,每一个操作都要对应于一个servlet类,这样当操作非常多的时候,需要写非常多的类

                   这样就在维护时带来了许多的不变;而使用Struts2后,只需要一个类,所有的操作对应于类中的每

                   一个方法,这样就减少了代码文件,便于维护。

      4、本文中使用的Struts2版本为2.3.24.

      5、web层常见的操作除了Struts2框架,常见的还要springMVC框架。

    二、如何搭建一个Struts2项目

      由于Struts2是一个应用于web层的框架,因此必须是web项目,才可以使用此框架。下面就一步步介绍如何使用Struts2框架

     进行简单的项目搭建。

    1、首先创建一个动态web项目。

           

       

    2、导入依赖

        要使用struts2框架,必须要导入struts2依赖的jar包,在WEB-INF目录中的lib文件夹下导入需要的jar包。jar包下载地址:jar包

       

    3、创建一个Action类

      Action类是struts2中的操作类,相当于servlet。

      在Action的编写中有以下的点要注意:

        • Action类中的方法可以没有返回值,也可以有返回值。
        • 如果方法有返回值,则返回值类型必须是String类型。
        • 没有返回值的方法可以声明返回值为void,也可以返回none字符串。    
        • 如果有返回值,并且返回值不是none,就必须要在配置文件中配置该返回值。
        • 当action类被访问时,会默认执行execute方法(类似于servlet中的service方法)。
        • action的编写有三种方式:(1)直接写一个普通类 (2)实现Action接口 (3)继承ActionSupport类。

      示例代码:

        (1)第一种:直接写一个普通的类。

    public class HelloAction1 {
        /**
         * 1、当访问action时,struts2会默认执行execute方法。
         * 2、action里面的方法可以没有返回值,如果有返回值,则返回值类型必须为String。
         * 3、当action没有返回值或者返回值为none时,在struts.xml文件中不用配置result标签。
         * 4、当action有返回值时,在struts.xml中必须要配置result标签,
         *         标签中的name的属性值必须要和返回值一致。
         */
        
        /**
         * 该方法在Action被访问时默认执行
         */
        public String execute(){
            System.out.println("execute被执行");
            return "success";
        }
        /**
         * 该方法没有返回值。
         */
        public void test1(){
            System.out.println("test1被执行");
        }
        /**
         * 该方法返回的值为none,相当于void,没有返回值
         */
        public String test(){
            System.out.println("test被执行");
            return "none";
        }
        /**
         * 该方法有返回值
         * 该返回值必须要配置,不然会出现404
         */
        public String hello(){
            System.out.println("hello被执行");
            return "ok";
        }
    }

      (2)第二种:实现Action接口 

    public class HelloAction2 implements Action{
        /**
         * 1、当访问action时,struts2会默认执行execute方法。
         * 2、action里面的方法可以没有返回值,如果有返回值,则返回值类型必须为String。
         * 3、当action没有返回值或者返回值为none时,在struts.xml文件中不用配置result标签。
         * 4、当action有返回值时,在struts.xml中必须要配置result标签,
         *         标签中的name的属性值必须要和返回值一致。
         */
        
        /**
         * 继承Action接口,需要重写execute方法
         * 在Action接口中提供了五个常量可以使用,分别为:
         * (1)SUCCESS:相当于字符串success。
         * (2)NONE:相当于none字符串。
         * (3)ERROR:相当于字符串error。
         * (4)INPUT:相当于字符串input。
         * (5)LOGIN:相当于字符串login。
         */
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
        /**
         * 该方法没有返回值。
         */
        public void test1(){
            System.out.println("test1被执行");
        }
        /**
         * 该方法返回的值为none,相当于void,没有返回值
         */
        public String test(){
            System.out.println("test被执行");
            return NONE;
        }
        /**
         * 该方法有返回值
         * 该返回值必须要配置,不然会出现404
         */
        public String hello(){
            System.out.println("hello被执行");
            return "ok";
        }
    
    }

      (3)第三种方法:继承ActionSupport类。

    public class HelloAction3 extends ActionSupport{
        /**
         * 1、当访问action时,struts2会默认执行execute方法。
         * 2、action里面的方法可以没有返回值,如果有返回值,则返回值类型必须为String。
         * 3、当action没有返回值或者返回值为none时,在struts.xml文件中不用配置result标签。
         * 4、当action有返回值时,在struts.xml中必须要配置result标签,
         *         标签中的name的属性值必须要和返回值一致。
         */
        
        /**
         * 该方法在Action被访问时默认执行
         */
        public String execute(){
            System.out.println("execute被执行");
            return "success";
        }
        /**
         * 该方法没有返回值。
         */
        public void test1(){
            System.out.println("test1被执行");
        }
        /**
         * 该方法返回的值为none,相当于void,没有返回值
         */
        public String test(){
            System.out.println("test被执行");
            return "none";
        }
        /**
         * 该方法有返回值
         * 该返回值必须要配置,不然会出现404
         */
        public String hello(){
            System.out.println("hello被执行");
            return "ok";
        }
    }

    4、编写struts2的核心配置文件。

      struts2框架类似于Hibernate框架,也需要一个核心的配置文件,该文件有以下主要特点

        • 位置和名称固定
        • 位置:在src目录下。
        • 名称:struts.xml

      该文件的详细编写和说明见代码: 

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 引入dtd约束 -->
       <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
        
        <struts>
            <!-- 
                配置package标签:该标签类似于Java中的包,Struts标签中可以有多个package标签
                                 这些package标签的name属性的值必须不同
                name属性的值:这个名称可以随意起名,它表示一个包名,用来区分不同的package
                extends属性的值:这个属性的值是固定的,其值为“struts-default”,只有在此配置了
                                 这个属性,该类采有action的功能,类似于Java中的继承
                namespace属性的值:该属性是名称空间,该属性的值一般为“/”,用于和action标签中得
                                name属性组成访问路径
             -->
            <package name="demo" extends="struts-default" namespace="/">
               <!-- 
                       配置action标签:该标签用来配置action,一个package标签中可以有多个action
                                     标签,这些action标签的name属性的值必须不同
                       name属性的值:name属性的值可以随意起,该值用来和package标签中的namespace
                                      属性的值一起构成该action的访问路径
                       class属性的值:该值是要配置的action所在类的全路径。
                       method属性的值:该属性用来配置该action对应于类中的哪一个方法,其值为要访问的类中的
                                     那个方法的方法名(execute方法默认访问,不用配置)。
                -->
                <action name="hello" class="com.jack.action.HelloAction1" method="hello">
                    <!-- 
                        配置result标签:如果配置的该action方法中有返回值,并且返回值不是none,则必须
                                      要配置该标签,否则会出现404错误
                        
                        name属性的值:该属性的值就是action方法所返回的那个值。
                        该标签中的值为:action返回该属性后,要重定向到那个路径
                     -->
                    <result name="ok">/hello.jsp</result>
                </action>
            </package>
        </struts>

    5、编写简单的测试jsp页面

      由于hello方法有一个返回值,在接受到该返回值后需要重定向到一个路径,示例中为一个jsp页面。

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>Hello Struts2</h1>
    </body>
    </html>

    6、配置struts2的过滤器

      要使用struts2必须要在web.xml中配置struts2的过滤器,该代码是固定的。

     <filter>
          <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>

    7、测试示例项目

      访问地址:http://ip:端口号/项目名称/配置中action的name值,本示例为:http://127.0.0.1:8080/Struts2_01/hello.action

      测试结果:

        

    至此,我们就完成了一个简单的struts2框架的项目。

           

          

      

  • 相关阅读:
    虚拟目录
    【C/C++学习】之十四、RTTI
    【C/C++学习】之十五、内存管理
    【C/C++学习】之十六、关于空指针NULL、野指针、通用指针
    统计在线人数
    [置顶] 分步实现具有分页功能的自定义DataList控件【附源代码】
    进制转换
    栈和队列2 数据结构和算法24
    二进制跟十六进制
    进制转换
  • 原文地址:https://www.cnblogs.com/jack1995/p/6958010.html
Copyright © 2020-2023  润新知