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 版本
      rVvDhG5.png
    • 点击下一步之后为自己的 struts2 项目命名(在命名的时候建议在第二栏 Content Root 的路径后改名,若在第一栏中更改只是更改第一栏的,其余两栏不会被更改)
      MvEag2k.png
    • 点击 Finish 完成 Struts2 项目的创建,所创建的项目如下
    • f6EoNa7.png


  • 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 中编写页面代码,供用户输入基本信息,如下:fe0U2UP.png
  • 依据表单 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";}@Overridepublic 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>

代码详解

iOcmDnd.png

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

转载于:https://www.cnblogs.com/bgzyy/p/8639893.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习的数学基础 - 信息论

机器学习的数学基础 - 信息论 信息论 信息论本来是通信中的概念&#xff0c;但是其核心思想“熵”在机器学习中也得到了广泛的应用。比如决策树模型ID3&#xff0c;C4.5中是利用信息增益来划分特征而生成一颗决策树的&#xff0c;而信息增益就是基于这里所说的熵。所以它的重要…

了解ElasticSearch分析器

令人遗憾的是&#xff0c;许多早期的互联网啤酒配方不一定采用易于消化的格式。 也就是说&#xff0c;这些食谱是通常在电子邮件或论坛帖子中最初组成的非结构化的方向和成分混合列表。 因此&#xff0c;尽管很难轻松地将这些配方放入传统的数据存储中&#xff08;表面上看是为…

c++简单程序设计-2

1.验证性实验部分①函数声明和函数定义各自的作用及二者的区别&#xff1a;函数声明就是调用函数之前提示一下有这个函数函数定义就是写一个函数②什么是形参&#xff1f;什么是实参&#xff1f;函数参数和返回值在函数中起到什么作用&#xff1f;函数定义时写的参数叫做形参&a…

java 同步的方法_关于Java中的同步方法

我有一个关于Java中方法同步的问题.考虑一个具有3个同步方法的类.class MyClass{public synchronized void methodA(){ ... }public synchronized void methodB(){ ... }public synchronized void methodC(){ ... }}考虑myObject,myClass的一个实例.以下内容哪些是对的&#xf…

jQuery获取隐藏域和radio单项框的值

获得只有Name的隐藏Input的值$("input[typehidden][name隐藏Input的名称]").val() 或 $("input[name隐藏Input的名称]:hidden").val()radio设值$("input[typeradio][value值]").attr("checked",true);eg.$("input[typeradio][v…

Linux虚机安装配置Tomcat

d第一步&#xff1a;下载Tomcat包&#xff0c;网址http://tomcat.apache.org/ 选择tar.gz包下载&#xff0c;并传到虚机中 第二步&#xff1a;解压下载好的Tomcat包 命令&#xff1a;tar -zxvf apache-tomcat-8.0.53.tar.gz 第三步&#xff1a;配置环境变量 进入到Tomcat下bin包…

Java Comparable接口的陷阱

Java Comparable接口提供了一种对实现该接口的类进行自然排序的方法。 自然顺序对标量和其他非常简单的对象有意义&#xff0c;但是当我们使用面向业务的领域对象时&#xff0c;自然顺序就变得更加复杂。 从业务经理的角度来看&#xff0c;交易对象的自然顺序可以是交易的价值&…

mysql 创建视图

CREATE VIEW v_image_org_user_album AS--创建视图并命名v_image_org_user_album SELECT --先开from中表的命名 a.id AS imgid,--将a表中的id命名为新的表&#xff08;视图&#xff09;中的imgid字段&#xff0c;剩下的都一样&#xff0c;就是将之前的字段重新命名到…

jQuery.ajaxPrefilter()函数的使用

jQuery.ajaxPrefilter( [dataTypes ], handler(options, originalOptions, jqXHR) )返回: undefined 描述: 在每个请求之前被发送和 $.ajax()处理它们前处理&#xff0c;设置自定义Ajax选项或修改现有选项。 添加的版本: 1.5jQuery.ajaxPrefilter( [dataTypes ], handler(optio…

linux php自动执行_linux下实现定时执行php脚本

在linux中输入命令复制代码 代码如下:crontab -e然后使用vim的命令编辑打开的文件&#xff0c;输入复制代码 代码如下:0 * * * * /usr/bin/php -f /home/userxxx/update.php保存&#xff0c;退出&#xff0c;好了&#xff0c;现在系统会在每个0点自动执行update.php脚本&#x…

Nginx安装及配置详解

nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器&#xff1b;同时也是一个IMAP、POP3、SMTP代理服务器&#xff1b;nginx可以作为一个HTTP服务器进行网站的发布处理&#xff0c;另外nginx可以作为反向代理进行负载均衡的实现。 这里主要通过三个方面…

Gradle:我们需要另一个构建工具吗?

在Java开发的早期&#xff0c;我们要么没有太多的构建工具需求&#xff0c;要么就使用了其他环境中的工具。 我仍然记得构建shell脚本并创建用于开发Java的文件。 生成文件特别有趣&#xff0c;因为这是一个在设计时就没有考虑Java的工具。 迁移到不同的操作系统环境也很困难。…

servlet简单概括总结

最近在看java web的相关内容&#xff0c;不管是整体还是细节&#xff0c;要学习的知识有很多&#xff0c;所以有一个好的学习体系非常重要。在阅读学习一些博客和教程中关于servlet的内容后&#xff0c;现将知识体系和自己的总结体会进行梳理&#xff0c;希望在更深入理解的同时…

jquery学习之-查找父元素方法parent() parents() closest()的区别

parent()、parents()与closest()方法两两之间有类似又有不同&#xff0c;本篇简短的区分一下这三个方法。通过本篇内容&#xff0c;大家将会在以后使用.parent()、parents()和closest()时不会显得无从下手。 我们直接看例子来来说明一下这三个方法的使用区别&#xff1a; <u…

二叉树的递归遍历与复制

1 #include <iostream>2 3 //定义树的数据结构4 struct BiTNode5 {6 int data;7 struct BiTNode *lchild, *rchild;8 };9 10 typedef struct BiTNode BiTNode;11 typedef struct BiTNode* BiTree;12 13 14 //前序遍历15 void preOrder(BiTNode *root)16 {17…

php超强后门在任意位置创建文件,php大马:.user.ini文件构成的超强PHP后门

这个估计很多同学看了不屑&#xff0c;认为是烂大街的东西了&#xff1a;那么我来个新的吧&#xff1a;。它比用的更广&#xff0c;不管是nginx/apache/IIS&#xff0c;只要是以fastcgi运行的php都可以用这个方法。我的nginx服务器全部是fpm/fastcgi&#xff0c;我的IIS php5.3…

CSS3-字体渐变色

示例&#xff1a;Maugers Blog <!DOCTYPE HTML> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>Maugers Blog</title><style type"text/css…

Restlet框架– Hello World示例

Restlet是用于Java平台的轻量级&#xff0c;全面的开源REST框架。 Restlet适用于服务器和客户端Web应用程序。 它支持主要的Internet传输&#xff0c;数据格式和服务描述标准&#xff0c;例如HTTP和HTTPS&#xff0c;SMTP&#xff0c;XML&#xff0c;JSON&#xff0c;Atom和WAD…

BZOJ2809 dispatching 【可并堆】

题目分析&#xff1a; yy一下就知道了&#xff0c;合并用可并堆少个log。 代码&#xff1a; 1 #include<bits/stdc.h>2 using namespace std;3 4 const int maxn 102000;5 6 int n,m;7 int b[maxn],c[maxn],l[maxn],sz[maxn];8 long long tot[maxn];9 int dis[maxn],v…

php ci 框架 扩展缓存类,CodeIgniter扩展核心类实例详解

本文实例讲述了CodeIgniter扩展核心类的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;CI中对核心类、辅助类和函数的扩展是相当方便的&#xff0c;配置文件中指定了subclass_prefix扩展前缀&#xff0c;默认为MY_&#xff0c;扩展时需要以该配置为前缀&#xff…