14通配符问题

其实这个问题看一个例子就ok

    <package name="actions" extends="struts-default" namespace="/"><action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}"><result>/Student{1}_success.jsp</result></action><action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}"><result>/{1}_{2}_success.jsp</result></action>   </package>

例如当我访问 http://localhost:8900/BJSXT_struts2/Teacher_delete

struts就会匹配第二个action,name里面有两个* 很清楚的 第一个*对应着Teacher第二个*对应这个delete

那么要找到类就是com.bjsxt.struts2.action.TeacherAction

调用的方法就是上面那个类的里面的delete方法

返回调用的jsp就是 Teacher_delete_success.jsp

第一个Student*就不用说了吧

类如下

package com.bjsxt.struts2.action;import com.opensymphony.xwork2.ActionSupport;public class TeacherAction extends ActionSupport {public String add() {return SUCCESS;}public String delete() {return SUCCESS;}
}

项目图如下

其中Studentadd_success.jsp 里面就显示"添加学生成功" 其余三个类似

15-17 action接受参数

有三种方式

第一种

url 如此写 http://localhost:8900/BJSXT_struts2/user/user!add?age=15&name=a

struts.xml如下

    <package name="user" extends="struts-default" namespace="/user"><action name="user" class="com.bjsxt.struts2.user.action.UserAction"><result>/user_add_success.jsp</result></action></package>

类如下

package com.bjsxt.struts2.user.action;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String name;private int age;public String add() {System.out.println("name=" + name);System.out.println("age=" + age);return SUCCESS;}
}
//省略get/set方法

第二种方法

url如下

http://localhost:8900/BJSXT_struts2/user/user!add?user.name=a&user.age=8

与第一种方法相比 参数被封装了起来

package com.bjsxt.struts2.user.action;import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private User user;public String add() {System.out.println("name=" + user.getName());System.out.println("age=" + user.getAge());return SUCCESS;}
}
//省略get/set方法 User类也就是两个属性 及相应的getset方法也不再赘述

struts.xml不变

这里就出现了一个问题 如果我给User这个类里面加上一个参数或两个参数的构造函数会怎么样呢?

大家可以自己试试 会报如下的错

java.lang.InstantiationException: com.bjsxt.struts2.model.User

InstantiationException 实例化错误!!

奇怪了 如果我把构造函数都去掉 由一切ok

问题就是 我们忘掉了关于构造函数最基本的几个知识点

当一个类没有构造函数的时候 编译器会自动为它增加一个参数为空 内部什么都不写的构造函数

如果我们给类加了构造函数 那么编译器就不管了

而struts是通过无参的构造函数来实例化user这个对象的 你自己写了构造函数 让struts情何以堪??

所以两个解决方案 要么去掉加上的构造函数 要么就再加一个无参的构造函数

另一方面如果user里面的参数和传过来的参数数目不匹配 可以加上一个UserDto类做中间转换

第三种方法的url和struts.xml与第一种的一样

不一样的是类

package com.bjsxt.struts2.user.action;import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;public class UserAction extends ActionSupport implements ModelDriven<User>{private User user = new User();public String add() {System.out.println("name=" + user.getName());System.out.println("age=" + user.getAge());return SUCCESS;}@Overridepublic User getModel() {return user;}}

这里有三个要注意的地方

1:实现了ModelDriven接口,(要写清楚类型!)

2user对象要初始化

3要有getModel的方法.

其实最经常用的是第二种方法 第一种与第三种方法用的较少 但是我们应该明白三种方法的内部原理

尚学堂马士兵struts2 课堂笔记(二)相关推荐

  1. 尚学堂-马士兵-专题-正则表达式

    一.最简单的正则表达式 String类的一个方法matches. package com.string;public class RegexTest {public static void main( ...

  2. 马士兵JVM课程笔记

    马士兵JVM课程笔记 GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? ...

  3. 马士兵Hibernate学习笔记

    马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...

  4. 尚硅谷2021新版spring5课堂笔记

    文章目录 一.Spring5 框架概述 二.IOC 概念和原理 BeanFactory 接口 IOC 操作 Bean 管理(基于 xml 方式) xml基础 1.基于 xml 方式创建对象 2.基于 ...

  5. 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)

    一,把面向过程的程序改写成面向对象的程序 1.前提   所有的程序都在onload里面 2.改写   不能函数嵌套,可以全局变量 3.onload-------------------->构造函 ...

  6. struts2学习笔记二--准备struts2的学习和开发环境

    准备struts2的学习和开发环境 1 导包 2 参照开发包自带的例子在web.xml文件中配置 3 参照开发包自带的例子编写Action类和配置struts.xml文件 <struts> ...

  7. Linux的快速使用_jdk安装_tomcat安装_mysql安装-尚学堂~百战程序员学习笔记

    一.Linux 简介 1.发展历史 丹尼斯·里奇 肯·汤普逊 系统内核汇编. B 语言. C 语言做为内核语言,发明 unix linus 召集 unix 原班人马.发明了系统 linus 后更名为 ...

  8. 马士兵java教程笔记_马士兵java教程笔记4

    File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...

  9. 马哥python课堂笔记_马哥-python-课堂笔记12-python核心数据类型及类型显示转换

    标签: python的核心数据类型(内置) 数字:int,long,float,complex(复数),bool(布尔型) 字符:str,unicode 列表:list 字典:dict 元组:tupl ...

  10. java马士兵笔记_马士兵java教程笔记4

    File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...

最新文章

  1. python 正则表达式 截取特定字符串之后的全部内容
  2. 数据合并设计_八秒搞定合并相同内容的单元格,你却加班了1小时
  3. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
  4. 1.设计模式中监听模式(观察者模式)(Python实现)
  5. html+id选择器如何使用方法,id选择器_HTML+CSS前端基础知识教程_腾讯视频
  6. JavaScript ES6对Proxy的原生支持的一个例子:开发人员学习额外的编程语言
  7. sqoop将hive导出到mysql_Sqoop hive导出到mysql[转]
  8. java 熔断_熔断理解 - THISISPAN - 博客园
  9. 强悍的 ubuntu —— samba 实现 ubuntu 与 windows 之间的文件共享
  10. textfilestream_C#里的文件流(FileStream)
  11. 转载:别人使用的工具
  12. 【js练习】鼠标移入和移出事件
  13. Unity动态加载资源
  14. 利用Hexo GitHub Page和 travis CI搭建播客
  15. 无人机开发-介绍Mavlink协议的消息组成、如何看懂繁杂的mavlink官网介绍、简单介绍地面站与飞控的通讯流程
  16. linux 关键字搜索文件
  17. 谷歌又要来了?陆齐离开百度,拒绝巨头选YC | 一周学习排行
  18. 【向题看齐】408之计算机组成原理概念记忆总结
  19. Could not load file ‘/etc/sysconfig/network-scripts/ifcfg-lo‘
  20. 3分钟了解入门「机器学习」该学习什么?(上)

热门文章

  1. 自然数简化到素数:黎曼猜想RiemannHypothesis及其解释(公号回复“黎曼猜想”下载PDF经典收藏版彩标资料)
  2. 【机器学习】十大 Java 机器学习工具和库
  3. 【线性代数】矩阵的特征值分解(对角化、谱分解)
  4. m3u8在线播放工具,在线播放地址
  5. Redis——修改redis配置文件,并使配置生效
  6. Terrasolid 安装教程
  7. 计算机基础知识进制的转换,计算机基础之各进制间的相互转换
  8. 狗都能看懂的Pytorch MAML代码详解
  9. ArcGISServer 10.2发布地理处理服务:以CAD数据至地理数据库为例(2)发布地理处理服务
  10. 复仇者联盟3:无限战争 | 细节-台词-镜头 详细分析复3预测复4结局