尚学堂马士兵struts2 课堂笔记(二)
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 课堂笔记(二)相关推荐
- 尚学堂-马士兵-专题-正则表达式
一.最简单的正则表达式 String类的一个方法matches. package com.string;public class RegexTest {public static void main( ...
- 马士兵JVM课程笔记
马士兵JVM课程笔记 GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? ...
- 马士兵Hibernate学习笔记
马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...
- 尚硅谷2021新版spring5课堂笔记
文章目录 一.Spring5 框架概述 二.IOC 概念和原理 BeanFactory 接口 IOC 操作 Bean 管理(基于 xml 方式) xml基础 1.基于 xml 方式创建对象 2.基于 ...
- 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
一,把面向过程的程序改写成面向对象的程序 1.前提 所有的程序都在onload里面 2.改写 不能函数嵌套,可以全局变量 3.onload-------------------->构造函 ...
- struts2学习笔记二--准备struts2的学习和开发环境
准备struts2的学习和开发环境 1 导包 2 参照开发包自带的例子在web.xml文件中配置 3 参照开发包自带的例子编写Action类和配置struts.xml文件 <struts> ...
- Linux的快速使用_jdk安装_tomcat安装_mysql安装-尚学堂~百战程序员学习笔记
一.Linux 简介 1.发展历史 丹尼斯·里奇 肯·汤普逊 系统内核汇编. B 语言. C 语言做为内核语言,发明 unix linus 召集 unix 原班人马.发明了系统 linus 后更名为 ...
- 马士兵java教程笔记_马士兵java教程笔记4
File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...
- 马哥python课堂笔记_马哥-python-课堂笔记12-python核心数据类型及类型显示转换
标签: python的核心数据类型(内置) 数字:int,long,float,complex(复数),bool(布尔型) 字符:str,unicode 列表:list 字典:dict 元组:tupl ...
- java马士兵笔记_马士兵java教程笔记4
File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...
最新文章
- python 正则表达式 截取特定字符串之后的全部内容
- 数据合并设计_八秒搞定合并相同内容的单元格,你却加班了1小时
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
- 1.设计模式中监听模式(观察者模式)(Python实现)
- html+id选择器如何使用方法,id选择器_HTML+CSS前端基础知识教程_腾讯视频
- JavaScript ES6对Proxy的原生支持的一个例子:开发人员学习额外的编程语言
- sqoop将hive导出到mysql_Sqoop hive导出到mysql[转]
- java 熔断_熔断理解 - THISISPAN - 博客园
- 强悍的 ubuntu —— samba 实现 ubuntu 与 windows 之间的文件共享
- textfilestream_C#里的文件流(FileStream)
- 转载:别人使用的工具
- 【js练习】鼠标移入和移出事件
- Unity动态加载资源
- 利用Hexo GitHub Page和 travis CI搭建播客
- 无人机开发-介绍Mavlink协议的消息组成、如何看懂繁杂的mavlink官网介绍、简单介绍地面站与飞控的通讯流程
- linux 关键字搜索文件
- 谷歌又要来了?陆齐离开百度,拒绝巨头选YC | 一周学习排行
- 【向题看齐】408之计算机组成原理概念记忆总结
- Could not load file ‘/etc/sysconfig/network-scripts/ifcfg-lo‘
- 3分钟了解入门「机器学习」该学习什么?(上)
热门文章
- 自然数简化到素数:黎曼猜想RiemannHypothesis及其解释(公号回复“黎曼猜想”下载PDF经典收藏版彩标资料)
- 【机器学习】十大 Java 机器学习工具和库
- 【线性代数】矩阵的特征值分解(对角化、谱分解)
- m3u8在线播放工具,在线播放地址
- Redis——修改redis配置文件,并使配置生效
- Terrasolid 安装教程
- 计算机基础知识进制的转换,计算机基础之各进制间的相互转换
- 狗都能看懂的Pytorch MAML代码详解
- ArcGISServer 10.2发布地理处理服务:以CAD数据至地理数据库为例(2)发布地理处理服务
- 复仇者联盟3:无限战争 | 细节-台词-镜头 详细分析复3预测复4结局