struts2入门

(一)Struts2的概念和工作流程

  1. 概念

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2Struts1的下一代产品,是在 struts 1WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新Struts 2体系结构Struts 1的体系结构差别巨大。Struts 2WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

 

  1. 工作流程

 

注:图中明黄色部分为编程人员需要书写的部分。

1 客户端发送请求;

2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。FilterDispatcher的功能如下: 

  (1)执行Actions(2)清除ActionContext(3)维护静态内容(4)清除request生命周期内的XWork的interceptors

4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6 ActionProxy创建一个ActionInvocation的实例。

 7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

 (二)Struts2案例实现

搭建Struts2环境时,一般需做以下几步操作:

  1. 创建javaweb工程
  2. 找到开发Struts2应用需要使用到的jar文件并加入到工程中
  3. 创建jsp文件
  4. 创建action文件
  5. 编写Struts2的配置文件
  6. web.xml中加入Struts2 框架启动配置

登录案例:

Login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

 %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>login page</title>

  </head>

  <body>

    <form action="<%=path %>/struts/login.action" >

     <table>

     <tr>

     <td>用户名:</td>

     <td><input type="text" name="userName" /></td>

     </tr>

     <tr>

     <td>密   码:</td>

     <td><input type="password" name="passWord" /></td>

     </tr>

     <tr>

     <td colspan="2"><input type="submit" value="登录" /></td>

     </tr>

     </table>

    </form>

  </body>

</html>

 

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <package name="struts2" extends="struts-default" namespace="/struts">

        <action name="login" class="com.inspur.action.LoginAction">

            <result name="SUCCESS">/index.jsp</result>

            <result name="ERROR">/login.jsp</result>

        </action>

    </package>

</struts>

Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" 

xmlns="http://java.sun.com/xml/ns/javaee" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <display-name></display-name>

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

  

  <welcome-file-list>

    <welcome-file>login.jsp</welcome-file>

  </welcome-file-list>

</web-app>

LoginAction.java

package com.inspur.action;

 

public class LoginAction {

public String userName;

public String passWord;

/**

 * 请求action的时候执行该action当中的execute方法

 * @return

 */

public String execute(){

//验证成功后返回success字符串

if("ross".equals(userName) && "111".equals(passWord)){

return "SUCCESS";

}else{

//验证失败后返回error字符串

return "ERROR";

}

}

省略Get/set方法……

}

 

访问地址:http://localhost:8080/01struts_introduction/

其中01struts_introduction为项目访问地址,一般默认为项目名称。

 

(三)Action创建方法

1 不依赖任何借口或者类

2 实现Action接口的方法,可以重用5个常量(这5个常量的定义,有利于编程的规范化和程序的移植性)

3 继承ActionSupport类,可以重用5个常量,并集成了校验(推荐)

posted @ 2017-07-13 11:10  silvan_happy  阅读(150)  评论(0编辑  收藏  举报