Struts2 学习之小白开始

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

  • show.jsp(只展示 Body 标签内容)

代码详解

  • 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 类必须有一个无参的构造器,因为会用到反射赋值

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员宝库

使用 Node.js 开发简单的脚手架工具

像我们熟悉的 vue-cli,react-native-cli 等脚手架,只需要输入简单的命令 vue init webpack project,即可快速帮我们...

17620
来自专栏我的博客

jquery特殊字符问题处理

问题:今天项目上有个地方使用 $(“#lamp”).load(‘/admin/checklogin.php?sid=’+sid); 这样传递的时候遇到空格就...

32640
来自专栏mySoul

node web模块 (服务器端和客户端)

web服务器指网站服务器,指驻留在因特网上的某种程序,web浏览器的基本功能,提供信息浏览服务

17170
来自专栏用户2442861的专栏

HTTP POST GET 本质区别详解

    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交

31020
来自专栏Linyb极客之路

分布式框架之Dubbo学习小记

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包括:

14320
来自专栏Java技术分享

Intellij IDEA调试功能使用总结

专注于Java领域,追求简洁,每天推送高质量技术文章,实用教程。

36670
来自专栏小勇DW3

RPC理论以及Dubbo的使用介绍

RPC 的主要功能目标是让构建分布式应用更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。

37230
来自专栏程序员阿凯

一条大河波浪宽 -- 数据库连接池实现

11940
来自专栏北京马哥教育

Python爬虫基础知识:urllib2的使用技巧

糖豆贴心提醒,本文阅读时间6分钟 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。 1.Proxy 的设置 urllib2 默认...

31450
来自专栏Java架构沉思录

如何优雅地用Redis实现分布式锁

什么是分布式锁 在学习Java多线程编程的时候,锁是一个很重要也很基础的概念,锁可以看做是多线程情况下访问共享资源的一种线程同步机制。这是对于单进程应用而言的,...

28960

扫码关注云+社区

领取腾讯云代金券