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. tcp/ip 卷一 读书笔记(5)arp和rarp 同网段和不同网段之间的通信过程

    arp和rarp 同网段和不同网段之间的通信过程 IPv6中已经没有arp rarp协议,所以这里都是IPv4. 链路层使用以太网地址来确定目的地址,应用则常使用ip地址通信 arp协议是指从ip地址 ...

  2. Effective Java 第三版——34. 使用枚举类型替代整型常量

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  3. visual studio调试功能简述

    vs调试简述 1.调试功能简述 vs提供了很强大的调试功能,能够让我们一步步执行中找到每个变量的值,便于查错改错.很多IDE都有调试功能,在使用调试功能时,记得先创建一个项目,哪怕是一个文件,也创建一 ...

  4. SyntaxError: Missing parentheses in call to 'print'

    C:\Users\konglb>python Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 17:26:49) [MSC v.1900 32 bit (I ...

  5. android自定义Notification通知栏实例

    项目有个需求,需要在发送Notification的时候动态给定url的图片.大概思路如下:自己定义一个Notification的布局文件,这样能够很方便设置View的属性. 首先加载网络图片,使用Bi ...

  6. Ubuntu的shell之bash和dash

    Ubuntu的 shell 默认安装的是 dash,而不是 bash. 运行以下命令查看 sh 的详细信息,确认 shell 对应的程序是哪个: $ls -al /bin/sh dash 比 bash ...

  7. 运行项目Tomcat报错

    1.具体报错如下: Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the serve ...

  8. java并发:Synchronized 原理

    1.同步代码块: 反编译结果: monitorenter : 每个对象有一个监视器锁(monitor).当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取moni ...

  9. linux下直接拷贝新版本R

      如果要使用新版本的R,除了直接安装,也可以直接拷贝R的文件夹.这样既可以保留原始的R版本和R包,也可以使用新版本的R和R包,R包存放在R目录下的library文件夹. 文件放路径 R: /usr/ ...

  10. cfDNA基本知识

    定义 Circulating free DNA or Cell free DNA (cfDNA):循环游离DNA或者细胞游离DNA,释放到血浆中的降解的DNA片段. https://en.wikipe ...