Struts2 基础知识学习总结

  Struts2 概述:Struts2 是一个用来开发 MVC 应用程序的框架,他提供了 Web 应用程序开发过程中的一些常见问题的解决方案,比如对于用户输入信息合法性的验证,统一的布局,国际化等,既然有 Struts2 那么肯定有 Struts1,但是从本质上讲 Struts2 不是从 Struts1 扩展而来的,更应该说是一种换了品牌标签的 WebWork 更合适。

  • struts1 VS struts2

    • struts1 里使用 ActionServlet 作为控制器,Struts2 使用过滤器作为控制器
    • Struts1 中每个 HTML 表单都对应一个 ActionForm 实例,Struts2 中 HTML 表单将被直接映射到一个 POJO
    • Struts1 的验证逻辑编写在 ActionForm 中,Struts2 中的验证逻辑编写在 Action 中
    • Struts1 中 Action 类必须继承 org.apache.struts.action.Action 类,Struts2 中任何一个 POJO 都可以是一个 Action 类
    • Struts2 在页面里使用 OGNL 来显示各种对象模型,可以不再使用 EL 和 JSTL
  • Struts2 环境搭建

    • 新建 Model,并勾选 Struts2 ,之后选择 Struts2 所要使用的 library,你可以直接在新建页面中选择 Download 进行下载,也可以提前下载好 Struts2 所需要的 jar 包自己构建(这里我选择自己构建的 library)
    • http://struts.apache.org/download.cgi#struts2516 在此页面可以选择自己所要使用 Struts2 版本

    • 点击下一步之后为自己的 struts2 项目命名(在命名的时候建议在第二栏 Content Root 的路径后改名,若在第一栏中更改只是更改第一栏的,其余两栏不会被更改)

    • 点击 Finish 完成 Struts2 项目的创建,所创建的项目如下
  • IDEA VS Eclipse

    • 若我们使用 Eclipse 去创建 Struts2 项目则需要在下载的 Struts2 包中已有的项目中去拷贝 struts2 文件的格式和 web.xml 文件的配置;IDEA 会为我们自动构建好
    • web.xml 文件在 struts2 包下的 struts\apps\struts2-blank1\WEB-INF\web.xml
    • struts.xml 文件在 struts2 包下的 struts\apps\struts2-blank\WEB-INF\classes,将其创建于 src 目录下

Struts2 HelloWorld

  搭建好 Struts2 的开发环境之后我们开始第一个 Struts2 程序的编写,其要求为在一个表单中输入用户的基本信息点击提交后跳转到另一个页面显示用户所输入的信息,在没有学习 Struts2 之前这对于我们来说非常简单,仅需要将页面请求发送到 Servet 中响应请求到另一个页面,使用 EL 和 JSTL 将信息显示即可。对于 Struts2 这当然也算是一个 HelloWorld,我们将借此实例开始 Struts2 各方面的知识讲解。

  • 在 index.jsp 中编写页面代码,供用户输入基本信息,如下:
  • 依据表单 name 属性编写实体类,并创建 getXxx 和 setXxx 方法,Customer.java
  • 在 struts.xml 文件中编写代码处理 struts2 请求
  • 返回显示页面 show.jsp
    • 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="helloWorld" extends="struts-default">
      <action name="input" class="com.struts2.hello.test.Customer" method="print">
      <result name="print">/show.jsp</result>
      </action>
      </package>
      </struts>
    • Customer.java

        package com.struts2.hello.test;
      
        /**
      * Created by shkstart on 2018/03/24.
      */
      public class Customer {
      private String userName;
      private String email;
      private String address; /*
      * getXxx() setXxx() 方法
      **/
      public String print() {
      System.out.println(new Customer());
      return "print";
      } @Override
      public String toString() {
      return "Customer{" +
      "userName='" + userName + '\'' +
      ", email='" + email + '\'' +
      ", address='" + address + '\'' +
      '}';
      }
      }
    • index.jsp

        <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>Input</title>
      </head>
      <body>
      <table>
      <form action="input.action" method="post">
      <tr>
      <td>UserName</td>
      <td><input type="text" name="userName"></td>
      </tr>
      <tr>
      <td>Email</td>
      <td><input type="text" name="email"></td>
      </tr>
      <tr>
      <td>Address</td>
      <td><input type="text" name="address"></td>
      </tr>
      <tr>
      <td><input type="submit" value="Submit"></td>
      </tr>
      </form>
      </table>
      </body>
      </html>
      • show.jsp(只展示 Body 标签内容)

          UserName: ${userName}<br>
        Email: ${email}<br>
        Address: ${address}<br>

代码详解

  • Customer.java 中成员变量和 index.jsp 中的属性一一对应,不忽略大小写;
  • show.jsp 中用于显示的和 Customer.java 中的成员变量一致,否则无法显示
  • index.jsp 中的 form 表单 action 值应该设置为struts.xml 文件中的 action 的name 属性
  • struts.xml 文件中的 action 节点的 method 属性应 Custome.java 中的 String print() 方法,result 节点的 name 属性为 String print() 方法的返回值
  • result 节点的值为处理了该 struts2 请求后所响应的页面

   对于 show.jsp 页面的显示我们在后面会详细讲解有关知识,至此我们 Struts2 的 HelloWorld 就到这里,我相信和我一样的小白跟着做下去应该不会出什么大的差错!!

struts.xml 文件节点

  • package 属性 --- struts2 使用 package 来组织模块

    • name 属性为必须的,用于其他包应用当前包;
    • extends 表示当前包所继承的包,即可以继承其中所有的配置,通常为 struts-default
    • nameSpace默认值为 /,当设置此属性的时候应在 URL中的 servletPath 前加上所设置的值
  • action 属性 --- 一个 struts2 请求就是一个 action

    • result (action 的子标签)标签体表示响应结果
    • name 对应 struts2 请求的名字,不包含扩展名(扩展民默认为 .action);
    • class 为该 struts2 请求将要去的类的全类名;
    • method 为所要去执行的该类的方法,该方法返回值必须为 String,且需要和 result 节点的 name 属性一致
    • result 的 name 属性值默认为 SUCCESS,class 默认属性为 ActionSupport,method 默认值为 execute
  • 一个 action 可以有多个 result 子节点,多个 result 子节点使用 name 属性区分

  • result 节点的 type 属性默认为 dispatcher(转发),表示结果的响应类型

Action VS action

  • 在此案例中 Customer.java 就是 struts2 中所说的 Action 类,index.jsp 发送的请求为一个 action 请求;
  • action 代表一个 struts2 请求,Action 类代表能够处理该 struts2 请求的类
  • Action 类的成员变量必须遵循与 JavaBean 属性名相同的命名规则,属性的类型可以是任意类型,需与表单的 name 属性相同
  • 至少有一个供 struts2 执行这个 action 请求时所要调用的方法
  • 同一个 Action 也可以包含多个 action 方法
  • Action 类必须有一个无参的构造器,因为会用到反射赋值

Struts2 学习之小白开始的更多相关文章

  1. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  4. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  5. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  6. Struts2学习:interceptor(拦截器)的使用

    对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...

  7. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  8. Java后台处理框架之struts2学习总结

    Java后台处理框架之struts2学习总结 最近我在网上了解到,在实际的开发项目中struts2的使用率在不断降低,取而代之的是springMVC.可能有很多的朋友看到这里就会说,那还不如不学str ...

  9. struts2学习之旅三 权限管理和导航设计

    1,权限管理的db设计和dao实现,尽量简单快速有效: db的设计如下:权限按照角色来赋给用户: 权限对应每一个具体的功能,有菜单级别的,有导航级别的,还有页面级别的功能: 涉及到权限的敏感操作一般都 ...

随机推荐

  1. 内存映射mmap的几个api及其使用

    内存映射 mmap 内存映射mmap函数的作用是建立一段可以被两个或者多个程度读写的内存段,一个程序对他进行任何修改,对其它程序可见.同样,这个功能可以用在对文件的处理上,mmap函数创建一个指向一个 ...

  2. Android 插件化方案(动态加载)总结

    1.作用 大多数Android开发人员开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限,因而便有了插件化的概念,将一个 App 划分为多个插件(Apk ...

  3. R语言︱画图

    笔者寄语:不论画啥,你先plot准没错. plot 二维坐标绘图 dotchart 点图 barplot 条形图 hist 直方图 pie 饼图 points 添加点 lines 添加线 text 添 ...

  4. JSP标签c:forEach实例

    JSP标签c:forEach实例 1.实例源码 <%@ page language="java" import="java.util.*" pageEnc ...

  5. Python Numpy包安装

    1,下载python 下载地址: https://www.python.org/downloads/windows/ 2,配置python环境变量 在电脑的系统属性的系统变量path中添加python ...

  6. json数据的转义

    { "DSGA": { "approval": "qatest_nj" }, "applydetailId": &quo ...

  7. Neo4J图库的基础介绍(一)

    •Neo4j是一个高性能的,NOSQL图形数据库,它完全支持ACID(原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability))数据 ...

  8. Python Cookbook(第3版)中文版:15.20 处理C语言中的可迭代对象

    15.20 处理C语言中的可迭代对象¶ 问题¶ 你想写C扩展代码处理来自任何可迭代对象如列表.元组.文件或生成器中的元素. 解决方案¶ 下面是一个C扩展函数例子,演示了怎样处理可迭代对象中的元素: s ...

  9. 【BZOJ2134】单位错选(数学期望,动态规划)

    [BZOJ2134]单位错选(数学期望,动态规划) 题面 BZOJ 题解 单独考虑相邻的两道题目的概率就好了 没了呀.. #include<iostream> #include<cs ...

  10. [BZOJ1306] [CQOI2009] match循环赛 (搜索)

    Description Input 第一行包含一个正整数n,队伍的个数.第二行包含n个非负整数,即每支队伍的得分. Output 输出仅一行,即可能的分数表数目.保证至少存在一个可能的分数表. Sam ...