使用maven构建struts2

来源:互联网 发布:百度炒股软件 编辑:程序博客网 时间:2024/05/17 01:50

第一个Stuts2程序

struts2配置参考页面

struts2框架主要通过一个过滤器将Struts集成到Web应用,这个过滤器对象是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。通过该过滤器对象,Struts2就可以获得Web应用中的HTTP请求,并将这个HTTP请求转发到指定的Action进行处理,Action根据结果返回给客户端相应的页面。

(1)创建Web项目,将Struts的支持类型库文件添加到项目中。

这里写图片描述
pom.xml:

<!-- struts2依赖包 --><dependency>  <groupId>org.apache.struts</groupId>  <artifactId>struts2-core</artifactId>  <version>2.3.14</version></dependency>

(2)在web.xml文件中声明Struts2提供的过滤器,类名为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter:

<!DOCTYPE web-app PUBLIC<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app>  <!-- Struts2 过滤器 -->  <filter>    <!-- 过滤器名称 -->    <filter-name>struts2</filter-name>    <!-- 过滤器类 -->    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <!-- Struts2 过滤器映射 -->  <filter-mapping>    <!-- 过滤器名称 -->    <filter-name>struts2</filter-name>    <!-- 过滤器映射 -->    <url-pattern>/*</url-pattern>  </filter-mapping></web-app>

(3)在Web项目的源码文件夹(src/main/resources)中,创建名称为struts.xml的配置文件,此配置文件中定义Struts2中的Action对象:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"      "http://struts.apache.org/dtds/struts-2.1.dtd">   <struts> <!-- 声明包 -->  <package name="myPackage" extends="struts-default">    <!-- 定义action -->    <action name="first">      <!-- 定义处理成功后的映射页面 -->      <result>/first.jsp</result>    </action>  </package> </struts>
  • < package > 标签:声明一个包,通过name属性指定包的名称为myPackage,并通过extends属性指定此包继承于struts-default包。
  • < action > 标签:用于定义Action对象,它的name属性用于指定访问此Action的URL。
  • < result > 元素:用于定义处理结果和资源之间的映射关系,实例中 < result >子元素的配置为处理成功后,请求将其转发到first.jsp页面。

(4)创建程序中的主页面index.jsp。在该页面中编写一个超链接,用于访问上面所定义的Action对象,此链接所指向的地址为first.action:

<html><body><h2>Hello World!</h2><a href="first.action">struts2</a></body></html>

(5)创建first.jsp页面,此页面是Action对象first处理成功后的返回页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!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=UTF-8"><title>struts2</title></head><body><h1>Hello Struts2!</h1></body></html>

Action对象

主要用于对HTTP请求进行处理,在Struts2 API中,Action对象是一个接口,它位于com.opensymphony.xwork2包中。在Struts2项目开发中,创建Action对象都要直接或间接实现此对象。

Action接口中包含5个静态的成员变量,它们是Struts2 API为处理结果定义的静态变量:

  • SUCCESS
    代表Action执行成功的返回值。如在Action执行成功的情况下,需要返回到成功页面,此时就可以将返回值设置为SUCCESS。

  • NONE
    Action执行成功的返回值。但不需要返回到成功页面。主要用于处理不需要返回结果页面的业务逻辑。

  • ERROR
    Action执行失败的返回值。在一些信息验证失败的情况下,可以使Action返回此值。

  • INPUT
    代表需要返回到某个输入信息的页面的返回值。

  • LOGIN
    代表需要用户登录的返回值。在验证用户是否登录时,Action验证失败,需要用户重新登录,此时就可以将Action对象处理的返回值设置为LOGIN。

(一)请求参数的注入原理

在Struts2框架中,表单提交的数据会自动注入到与Action对象相对应的属性。通过Action对象为属性提供setter方法进行注入:

src/main/java/com.zj.action/UserAction.java:

package com.zj.action;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionSupport;/** * 用户 Action * * @author zhangjuan * */public class UserAction extends ActionSupport {  private static final long serialVersionUID = 1L;  // 用户名属性  private String userName;  // 为 userName 提供 getter 方法  public String getUserName() {    return this.userName;  }  // 为 userName 提供 setter 方法  public void setUserName(final String userName) {    this.userName = userName;  }  @Override  public String execute() {    return Action.SUCCESS;  }}

要注入属性值的Action对象,必须对属性提供setXXX()方法,Struts2的内部实现按照JavaBean规范中提供的setter方法,自动为属性注入值。在获取属性的数值时,通过getter方法获取。

(二)Action的基本流程

  • Struts2框架的工作,主要是通过Struts2的过滤器对象拦截HTTP请求,然后将请求分配到指定的Action进行处理。
  • Struts2的内部处理机制会判断HTTP请求是否与某个Action对象相匹配,如果找到匹配的Action,就会调用Action对象的execute()方法,并根据处理结果返回相应的值。
  • Struts2通过Action的返回值查找返回值所映射的页面。

在Struts2框架中,一个.*action请求的返回视图由Action对象决定,其实现手段是通过查找返回的字符串对应的配置项,确定返回的视图,如Action中execute()方法返回的字符串为success,那么Struts2就会到配置文件中查找名称为success的配置项,返回这个配置项对应的视图。

src/main/resources/struts.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"      "http://struts.apache.org/dtds/struts-2.1.dtd">   <struts> <!-- 声明包 -->  <package name="myPackage" extends="struts-default">    <!-- 定义action -->    <action name="UserAction" class="com.zj.action.UserAction">      <!-- 定义处理成功后的映射页面 -->      <result>user_add.jsp</result>    </action>  </package> </struts>

src/main/web-app/index.jsp:

<html><body>    <h2>Hello World!</h2>    <a href="UserAction">userAdd</a></body></html>

src/main/web-app/user_add.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!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=UTF-8"><title>userAdd</title></head><body>    Hello userAdd!</body></html>

这里写图片描述

(三)动态Action

这里写图片描述

动态Action的处理方式,是通过请求Action对象中一个具体的方法来实现动态的操作,通过在请求Action的URL地址后方加上请求字符串(方法名称),与Action对象中的方法进行匹配,Action地址与请求字符串之间以”!”进行分割。

例如在配置文件struts.xml中配置userAction,当请求其中的add()方法时,其请求方式:
/userAction!add

(1)创建Web项目,将Struts的支持类型库文件添加到项目中:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.zj.mvnbook</groupId>  <artifactId>HelloWorld</artifactId>  <packaging>war</packaging>  <version>0.0.1-SNAPSHOT</version>  <name>HelloWorld Maven Webapp</name>  <url>http://maven.apache.org</url>  <!-- 属性配置 -->  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <!-- struts2依赖包 -->    <dependency>      <groupId>org.apache.struts</groupId>      <artifactId>struts2-core</artifactId>      <version>2.3.14</version>    </dependency>  </dependencies>  <build>    <finalName>HelloWorld</finalName>  </build></project>

(2)在web.xml文件中注册Struts2提供的过滤器:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app>  <!-- Struts2 过滤器 -->  <filter>    <!-- 过滤器名称 -->    <filter-name>struts2</filter-name>    <!-- 过滤器类 -->    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <!-- Struts2 过滤器映射 -->  <filter-mapping>    <!-- 过滤器名称 -->    <filter-name>struts2</filter-name>    <!-- 过滤器映射 -->    <url-pattern>/*</url-pattern>  </filter-mapping></web-app>

(3)创建名称为UserAction的Action对象,并在这个对象中分别编写add()方法与update()方法,用于处理添加用户信息的请求及更新用户信息的请求,并将请求返回到相应的页面:

package com.zj.action;import com.opensymphony.xwork2.ActionSupport;/** * 用户 Action * * @author zhangjuan * */public class UserAction extends ActionSupport {  private static final long serialVersionUID = 1L;  // 提示信息  private String info;  /**   * 用于处理添加用户信息的请求   *    * @return   */  public String add() {    this.info = "添加用户信息";    return "add";  }  /**   * 用于处理更新用户信息的请求   *    * @return   */  public String update() {    this.info = "更新用户信息";    return "update";  }  public String getInfo() {    return this.info;  }  public void setInfo(final String info) {    this.info = info;  }}

(4)在src/main/resources文件夹下创建名称为struts.xml的配置文件,在此配置文件中配置UserAction:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"      "http://struts.apache.org/dtds/struts-2.1.dtd">   <struts> <!-- 声明包 -->  <package name="myPackage" extends="struts-default">    <!-- 定义action -->    <action name="UserAction" class="com.zj.action.UserAction">        <!-- 返回结果为add时,对应添加成功的映射页面 -->        <result name="add">user_add.jsp</result>        <!-- 返回结果为update时,对应更新成功的映射页面 -->        <result name="update">user_update.jsp</result>    </action>      </package> </struts>

(5)创建名为user_add.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!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=UTF-8"><title>userAdd</title></head><body>    <font color="red">    <s:property value="info"/>    </font></body></html>

(6)创建名称为user_update.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!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=UTF-8"><title>userUpdate</title></head><body>    <font color="blue">    <s:property value="info"/>    </font></body></html>

上述通过Sturts2标签输出UserAction中的信息:
<%@ taglib prefix="s" uri="/struts-tags" %>

(7)创建index.jsp:

<html><body>    <h2>Hello World!</h2>    <a href="UserAction!add">userAdd</a>    <br>    <a href="UserAction!update">userUpdate</a></body></html>

这里写图片描述

这里写图片描述

1 0