zoukankan      html  css  js  c++  java
  • struts2系列(一):struts2入门(struts2的产生、struts2的工作流程、搭建struts2开发环境)

    一. struts2的产生

    struts1的缺点:
                             1. ActionForm过多,而且这个ActionForm在很大程度上又和VO(POJO)重复
                             2. 为了解决ActionForm过多的问题,使用了验证框架,但是配置复杂,因为是后期的产物
                             3. 与Spring的整合开发难度太大,配置过多
    struts1之所以有这些问题,是因为在struts1产生的年代之中没有将POJO的概念提到一个重要的领域上来。但是与struts1同时产生的MVC设计框架(JSF、WebWork)开始逐步解决了这些问题,而其中仅次于struts1框架的就是WebWork,WebWork解决了所有Struts1的所有问题,而且使用起来更加简单,但是Struts1已经成为了行业的标准,名气比WebWork大,所以WebWork的发展比较难。后来Apache组织发现了WebWork的优点,就将其收为自己的一个子项目,利用这个子项目推出了一个新的框架——Struts2.0。因为在最早的Struts2.0之中,基本上就是将<webwork>节点更换成了<struts>节点,除此之外没有任何的变化,甚至连核心包Xwork.jar都是一样的,所以struts2=struts1的名气+WebWork的易用性

    二. struts2的工作流程

    1.struts 1.x的工作流程
    struts 1.x所有的请求以".do"的形式发送到ActionServlet之中,之后由ActionServlet根据struts-config配置文件指定的操作找到对应的Action及ActionForm,默认调用ActionForm中的validate()方法,之后如果此方法返回null或者ActionErrors的集合中没有任何内容,则表示一切正确,如果有错误了,则跳转到struts-config文件中配置的input路径进行跳转,并通过<html error>进行错误显示,如果没有错误则继续交给Action执行。

    2. struts 2.x的工作流程
    从代码的角度来讲struts 2.x的代码更加简单,因为ActionForm没有了,而且配置也不麻烦了。
    从工作流程上来讲,由于 struts 2.x配置的操作是一个过滤器:StrutsPrepareAndExecuteFilter,现在所有的请求肯定先找到过滤器上(struts 2.1之后过滤器有两种:StrutsPrepareFilter和StrutsExecuteFilter),之后根据请求的操作从struts.xml文件之中取出配置的信息,调用ActionSupport的子类中的excute()方法,并根据<result>节点的路径进行跳转操作。

    三、搭建struts2开发环境

    1.在eclipse里面新建一个maven的web项目,名称为TestStruts2,参考文章:http://www.cnblogs.com/NieXiaoHui/p/5990570.html

    2.引入struts2的相关依赖,见pom.xml

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <groupId>com.study</groupId>
     5     <artifactId>TestStruts2</artifactId>
     6     <packaging>war</packaging>
     7     <version>0.0.1-SNAPSHOT</version>
     8     <name>TestStruts2 Maven Webapp</name>
     9     <url>http://maven.apache.org</url>
    10     <dependencies>
    11         <dependency>
    12             <groupId>commons-fileupload</groupId>
    13             <artifactId>commons-fileupload</artifactId>
    14             <version>1.2.1</version>
    15         </dependency>
    16         <dependency>
    17             <groupId>commons-io</groupId>
    18             <artifactId>commons-io</artifactId>
    19             <version>1.3.2</version>
    20         </dependency>
    21 
    22         <dependency>
    23             <groupId>commons-logging</groupId>
    24             <artifactId>commons-logging-api</artifactId>
    25             <version>1.1</version>
    26         </dependency>
    27         <dependency>
    28             <groupId>org.freemarker</groupId>
    29             <artifactId>freemarker</artifactId>
    30             <version>2.3.15</version>
    31         </dependency>
    32         <dependency>
    33             <groupId>ognl</groupId>
    34             <artifactId>ognl</artifactId>
    35             <version>2.7.3</version>
    36         </dependency>
    37         <!--struts2的核心配置文件 begin  -->
    38         <dependency>
    39             <groupId>org.apache.struts</groupId>
    40             <artifactId>struts2-core</artifactId>
    41             <version>2.1.8.1</version>
    42         </dependency>
    43         <dependency>
    44             <groupId>org.apache.struts.xwork</groupId>
    45             <artifactId>xwork-core</artifactId>
    46             <version>2.2.1</version>
    47         </dependency>
    48         <!--struts2的核心配置文件 end  -->
    49     </dependencies>
    50     <build>
    51         <finalName>TestStruts2</finalName>
    52     </build>
    53 </project>

    3.在src/main/java目录下新建一个struts2的主配置文件struts.xml和一个struts-user.xml配置文件,在struts.xml里面引入struts-user.xml,配置内容如下

    struts.xml:

    1 <?xml version="1.0" encoding="UTF-8" ?>
    2 <!DOCTYPE struts PUBLIC
    3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    4     "http://struts.apache.org/dtds/struts-2.0.dtd">
    5 
    6 <struts>
    7   <include file="struts_user.xml" />
    8 </struts>

    struts-user.xml:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     4     "http://struts.apache.org/dtds/struts-2.0.dtd">
     5 
     6 <struts>
     7 
     8     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
     9     <constant name="struts.devMode" value="false" />
    10 
    11     <package name="default" namespace="/" extends="struts-default">
    12      
    13    
    14         
    15     </package>
    16 
    17 </struts>

    4.web.xml里面引入struts2的过滤器StrutsPrepareAndExecuteFilter

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="3.0" 
     3     xmlns="http://java.sun.com/xml/ns/javaee" 
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     6     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     7   <display-name></display-name>    
     8   <welcome-file-list>
     9     <welcome-file>index.jsp</welcome-file>
    10   </welcome-file-list>
    11   
    12   <!--struts2的核心过滤器,所有的请求都先到这里,之后根据请求的操作从struts.xml文件之中取出配置的信息,
    13          调用ActionSupport的子类中的excute()方法  -->
    14     <filter>
    15       <filter-name>struts2</filter-name>
    16       <filter-class>
    17          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    18          </filter-class>
    19     </filter>
    20     
    21     <filter-mapping>
    22       <filter-name>struts2</filter-name>
    23        <url-pattern>/*</url-pattern>
    24     </filter-mapping>
    25   
    26 </web-app>

    5. 在src/main/java新建一个包com.study.struts2.demo,在里面编写一个HelloWorldAction.java,在struts-user.xml里面配置这个action

    HelloWorldAction.java:

     1 package com.study.struts2.demo;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 
     5 public class HelloWorldAction extends ActionSupport {
     6 
     7     /**
     8      * 
     9      */
    10     private static final long serialVersionUID = 6522825387249101847L;
    11 
    12     private String msg;
    13 
    14     @Override
    15     public void validate() {
    16         if (msg == null || "".equals(msg)) {
    17             super.addFieldError("msg", "信息不能为空");
    18 
    19         }
    20     }
    21 
    22     @Override
    23     public String execute() throws Exception {
    24 
    25         // 通过request取得jsp的内置对象
    26         // this.msg="hellowrold123";
    27         return SUCCESS;
    28     }
    29 
    30     public String getMsg() {
    31         return msg;
    32     }
    33 
    34     public void setMsg(String msg) {
    35         this.msg = msg;
    36     }
    37 
    38 }

    struts-user.xml:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     4     "http://struts.apache.org/dtds/struts-2.0.dtd">
     5 
     6 <struts>
     7 
     8     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
     9     <constant name="struts.devMode" value="false" />
    10 
    11     <package name="default" namespace="/" extends="struts-default">
    12         <default-action-ref name="index" />
    13         <action name="index">
    14             <result name="success">index.jsp</result>
    15         </action>
    16         
    17         <action name="hello" class="com.study.struts2.demo.HelloWorldAction"
    18         method="execute">
    19             <result name="success">index.jsp</result>
    20             <result name="input">index.jsp</result>
    21         </action>
    22         
    23     </package>
    24 
    25 </struts>

    6.编写index.jsp

     1 <%@ page language="java" pageEncoding="UTF-8"%>
     2 <!--引入struts2的标签  -->
     3 <%@ taglib prefix="s" uri="/struts-tags"%>
     4 <body>
     5     <p>
     6         <a href="<s:url action='hello'/>">Hello World</a>
     7     </p>
     8 
     9     <!--struts2的取值标签  value="<s:property value="msg" />"输入正确的被保留 -->
    10     <form action="hello.action">
    11         信息:<input type="text" name="msg" value="<s:property value="msg" />" />
    12         <s:property value="fieldErrors['msg'][0]" />
    13         <br> <input type="submit" value="提交">
    14     </form>
    15 
    16     <!--验证通过后显示  -->
    17     <h2>
    18         <s:property value="msg" />
    19     </h2>
    20 </body>
    21 </html>

    经过上面的几步struts2的开发环境已经搭建完成,下面在tomcat里面启动项目,在浏览器输入地址http://localhost:8080/TestStruts2访问验证

     

  • 相关阅读:
    QT 手式编译步骤
    Linux QT 连接 Sqlite数据库
    JDK_1.8的Windows和Linux环境下的下载与安装
    聚焦BPM弹窗
    SQL查重去重
    sql函数使用
    SQL游标
    转载:《TypeScript 中文入门教程》 2、枚举
    《TypeScript 中文入门教程》 1、基础数据类型
    转载:《TypeScript 中文入门教程》
  • 原文地址:https://www.cnblogs.com/leeSmall/p/7749582.html
Copyright © 2011-2022 走看看