zoukankan      html  css  js  c++  java
  • struts2入门之准备工作

    使用struts2开发项目分四个步骤:

    1、导入jar包

    2、创建action

    3、配置struts.xml

    4、配置过滤器

    下面分别介绍以上四步骤:

    首先struts2是由struts1进化而来,但是二者差别很大,struts2集成了struts1和webwork的优势,详细差别请参考:http://blog.csdn.net/john2522/article/details/7436307/

    I、导入jar包到WEB-INF/lib中。具体是哪些jar包呢?首先下载struts2的压缩包,官网上自己下载,然后解压,会有

      以下几个目录:

    然后打开apps这个文件夹,会看到struts2-blank.war这个压缩文件,

    进而将这个文件继续解压,会出现WEB-INF这个文件夹,找到WEB-INF/lib下的所有jar包,拷贝到项目WEB-INF/lib下面;

    II、创建action有多种方式,我这里介绍三种吧:

      1)、直接新建一个类,这个类中要有execute方法,返回值为String。比如: 

    1 public class DogAction{
    2       public String execute(){
    3            return "success";
    4       }  
    5 }

      2)、实现Action接口,并实现execute方法,比如:      

    1 import com.opensymphony.xwork2.Action;
    2 
    3 public class DogAction implements Action {
    4     @Override
    5     public String execute() throws Exception {
    6         return "success";
    7     }
    8 }

      3)、继承ActionSupport这个类,比如:    

    1 import com.opensymphony.xwork2.ActionSupport;
    2 
    3 public class DogAction2 extends ActionSupport {
    4     @Override
    5     public String execute() throws Exception {
    6         return "success";
    7     }
    8 }

        4)、这里有个疑问,为啥每次都要写execute方法呢?其实这在后面配置struts.xml文件的时候,如果action标签不配置method属性的话,action会默认

         找execute方法的返回值,然后根据result标签去找要访问的具体页面或者是action。

     3、配置struts.xml文件:  

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6     <package name="dogDemo" extends="struts-default" namespace="/">
     8         <action name="dog" class="com.cczhao.struts.DogAction">
     9             <result name="success">/hello.jsp</result>
    10         </action>
    11     </package>
    12 </struts>

     4、设置过滤器,在WEB-INF/web.xml文件中写:  

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     5 
     6     <display-name>Dog-Filter</display-name>
     7 
     8     <filter>
     9         <filter-name>struts2</filter-name>
    10         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    11     </filter>
    12 
    13     <filter-mapping>
    14         <filter-name>struts2</filter-name>
    15         <url-pattern>/*</url-pattern>
    16     </filter-mapping>
    17 </web-app>

     截至到目前,准备工作已经完成,在地址栏中输入:localhost:8080/test/dog.action,正常的话会跳转到hello.jsp页面中去。当然这里有写步骤我也省略了,

    比如我的项目名称是test,hello.jsp是在webContent目录下。

    5、接下来详细说一下struts.xml文件中的几个标签:根标签是struts,在根标签下,可以有多个package标签,在package标签中有三个属性,本别是name、extends、namespace。name属性本身对于某个项目来说影响不大,你爱怎么命名就怎么命名,但是如果在这个struts标签内有多个package时,这个name属性不能重复;extends表面就是继承的意思,在这里是为了说明package标签下的类具有action的功能,这个值也是固定的,就是extends="struts-default";namespace属性它和接下来的

    action中的name属性共同构成访问路径,例如在上面的例子中访问路径就是:localhost:8080/项目名称/dog ,其实namespace属性是有默认值的,默认就是”/“,上面的例子中可以把这个省略掉;action标签中的name属性就不说了,它和上面package中的namespace共同构成访问路径;class属性就是指定类的全路径;

    result标签中name属性是和类中的方法的返回值对应的,DogAcion这个类中默认有个execute方法,它的返回值是"success"的话,会找到请求最后去访问哪个页面。本例中,就是成功的话访问/hello.jsp这个页面。
    另外在配置过滤器时候,还可以配置常量;contant标签一般只有两个属性,name、value.

    ===============================分割线=======================================

    struts.xml文件中的标签介绍还不完善,这里进行一个补充:

    action标签除了有name属性和class属性之外,还有method属性,用来指定当访问这个action的时候要去具体执行哪个方法,然后根据返回值再去找指定的页面后者是action;

    result标签除了有name属性外,还有type属性,这个type属性指定了请求访问具体页面的方式,比如是转发(dispatcher),还是重定向(redirect),这两个参数

    对访问页面有效果,如果是要访问action的话,分别是chain(转发)和redirectAction(重定向)。

    ========================================分割线========================================

    另外再说一下result的全局结果配置和局部结果配置:先上代码,如下:

    <struts>
        <package name="test02" extends="struts-default" namespace="/">
            <global-results>
                <result name="success">/hello.jsp</result>
            </global-results>
            <action name="book" class="com.cczhao.struts.action.BookAction">
                <result name="success" type="redirectAction">orders</result>
            </action>
            <action name="orders" class="com.cczhao.struts.action.OrdersAction">
                <result name="success">/world.jsp</result>
            </action>
        </package>
    </struts>

    这个配置全局结果页面是有这么一种需求的时候,方法的返回值一样,前往的页面也一样,此时没有必要分别去对一个这样的action去配置结果页,用一个全局结果配置就能搞定。用的最多的,404页面,500页面等。

    另外如果方法的返回值是空,可以在struts.xml中的action标签下不配置result标签,因为返回值为空嘛,也就意味这不准备往下再访问其他页面了。

  • 相关阅读:
    Remote desktop manager共享账号
    content is not supported outside 'script" or asp content' region
    How to pass values across the pages in ASP.net without using Session
    GitLab Flow
    C#如何获取系统downloads和documents路径
    sql server查询结果复制出来,没有换行(存进去的数据是换行的)
    Type Interceptors
    JsonNode、JsonObject常用方法
    java获取当前时间戳的方法
    Java中float/double取值范围与精度
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/7075286.html
Copyright © 2011-2022 走看看