尚学堂马士兵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; } @Override public User getModel() { return user; } }
这里有三个要注意的地方
1:实现了ModelDriven接口,(要写清楚类型!)
2user对象要初始化
3要有getModel的方法.
其实最经常用的是第二种方法 第一种与第三种方法用的较少 但是我们应该明白三种方法的内部原理
尚学堂马士兵struts2 课堂笔记(二)的更多相关文章
- 尚学堂马士兵struts2 课堂笔记(一)
06_尚学堂马士兵_Struts2_Struts2_HelloWorld_5 <constant name="struts.devMode" value="true ...
- 尚学堂马士兵struts2 课堂笔记(四)
27 结果类型 主要就四种种 dispatch和rediret chain和drdirectaction <package name="resultTypes" namesp ...
- 尚学堂马士兵struts2 课堂笔记(三)
19-20 简单数据验证 例如 前台jsp 及struts.xml <a href="user/user!add?name=a" >添加用户</a> < ...
- 尚学堂马士兵Oracle教程笔记
检查Oracle安装 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba 然后,解除对scott用户的锁 alter user scott account ...
- struts2学习笔记二
一.分文件编写框架配置文件 1.不分文件开发可能产生的问题 就类似于我们在写java类时,所有代码都写在一个类里,甚至写在一个方法里. 当3个人都checkout了struts.xml文件时,第一个人 ...
- Struts2.0笔记二
Mvc与servlet 1.1 Servlet的优点 1. 是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的.所以掌握servle ...
- Struts2学习笔记(二):第一个Struts2应用
一.创建Action类. 创建工程Struts2Demo struts 2中的Action类并不需要继承struts 2中的某个父类,普遍的java类就可以. 在org.sunny.user.acti ...
- Struts2学习笔记二 配置详解
Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的name ...
- Struts2学习笔记二:开发流程
一:创建项目,添加依赖包 二:在web.xml配置核心控制器 <filter> <filter-name>struts2</filter-name> <fil ...
随机推荐
- Lintcode393 Best Time to Buy and Sell Stock IV solution 题解
[题目描述] Say you have an array for which the i th element is the price of a given stock on day i. Desi ...
- Linux部分常用命令整理
./ 相当于双击 [oracle@linux01 ~]$ PWD 查看绝对路径 [oracle@linux01 ~]$ cd - 返回上一次操作的目录 [oracle@linux01 ~]$ cd . ...
- ES6(es2015)新增实用方法汇总
Array 1.map() [1,2,3,4].map(function(item, index, array){ return item * 2; }) 对数组中的每一项执行一次回调函数,三个参数 ...
- 克拉默法则(Cramer's Rule)的证明
克拉默法则: 先说一下为什么要写这个,作为一个大一新生,必须要学的就包括了线性代数,而且线性代数等数学知识对计算机专业也有很大帮助.但是在学习过程中遇到一个讲解的不清楚的知识点(Cramer's Ru ...
- seaborn使用(绘图函数)
seaborn使用(绘图函数) 数据集分布的可视化 分类数据的绘图 线性关系可视化 一.数据集分布的可视化 distplot kdeplot rugplot 1.distplot() 灵活的绘制单变量 ...
- 利用Bioperl的SeqIO模块解析fastq文件
测序数据中经常会接触到fastq格式的文件,比如说拿到fastq格式的原始数据后希望查看测序碱基的质量并去除低质量碱基.一般而言大家都是用现有的工具,比如说fastqc这个Java写的小程序,确实很好 ...
- win 10 和 CentOS 7 双系统安装
工具及材料 1.一台PC 2.一个U盘,8G以上 3.需要的文件:CentOS-7-x86_64-DVD-1511.iso 4.需要的软件:UltraI ...
- Win7 环境下虚拟机内 Samba 服务器的安装、配置以及与主机的通信实现
考虑到window和linux虚拟机之间互传文件较为麻烦,遂打算在虚拟机中安装Samba服务器,以此实现共享文件给window使用.然而安装配置过程曲折,遂作记录如下: 一.samba服务器的安装 正 ...
- 谈一谈CloudBlog的系统架构
---------------------------------------------------------------------------------------------[版权申明:本 ...
- Linux SWAP 交换分区配置说明
一.SWAP 说明1.1 SWAP 概述 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的 ...