zoukankan      html  css  js  c++  java
  • 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个常量,并集成了校验(推荐)

  • 相关阅读:
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS01-线性表
    C博客作业06-结构体&文件
    C博客作业05--指针
    C博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
  • 原文地址:https://www.cnblogs.com/zhouyeqin/p/7159423.html
Copyright © 2011-2022 走看看