struts2_1学习笔记
来源:互联网 发布:sci e数据库 编辑:程序博客网 时间:2024/06/07 01:49
2. 对struts.xml进行配置,加上<constant name="struts.devMode" value="true" />
意思是开发模式,这样更改配置文件后不用重新启动apache server。默认是false。
3. myeclipse window -> preferences -> catalog -> add
uri = http://struts.apache.org/dtds/struts-2.3.dtd
location 在本地的structs中找apps -> WEB_INF -> lib -> struts_core ->dtd文件
4. struts: browser -> tomcat -> filter -> *.jsp
请求经过中转再得到视图,把请求和结果分开;
5. namespace 如果设为“”,或者不写,这样只要url地址中出现了action的名字,就能执行。
namespace要以/开头;namespace为空的话,只要url中出现了这个action的名字就会被处理。
namespace为空,能够包含其它namespace处理不了的action;
6. 更改默认的jsp编码: windows -> preferences -> 搜JSP -> 改编码
补充: Struts1只提供一个action类,Struts2每次访问一个action就new一个对象出来;
action后面没有配置class的话,默认是ActionSupport.class
(ActionSupport.class实现了Action.class接口,里面有excute()方法)
7. 一个普通的java类,包含一个public String execute()方法,就能被当成一个action;
或者也可以implements Action,重写execute()方法;或者implements ActionSupport
7.1 我们一般只用implements ActionSupport这种方法;
8. 每次访问一个action时都会new 出一个action对象。
9. action后面如果不指定class,则会执行默认的ActionSupport类;
10. struts2 发出请求统一使用绝对路径,要取到当前的context 路径作为前缀;
在jsp页面上加上,新建jsp的时候一般会自己生成啦~
<% String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
在<head>标签内部加上:<base href="<%=basePath%>">这样就直接写根目录下的相对路径就行了;
11.Action执行的时候并不一定要执行execute方法,可以在struts.xml配置文件中配置Action的时候用method=""来指定执行哪个方法, 也可以在url地址中动态指定(动态方法调用DMI)(推荐)
<a href="<%=context %>/user/userAdd">添加用户</a>
<br />
<a href="<%=context %>/user/user!add">添加用户</a>
<br />
前者会产生太多的action,/user是一个package,也是一个namespace,里面有一个userAdd的action,如果有userDelete,userUpdate等,就要写多个对应的action,用第二种DMI比较好,只要一个user的Action,里面写要用到的方法就ok了,调用的时候用一个!隔开就行~
12.用通配符来配置:
<package name="Student" namespace="/" extends="struts-default">
<action name="*_*" class="{1}Action" method="{2}">
<result>
/jsps/{1}_{2}_success.jsp
</result>
</action>
</package> {1}代表第一个星号对应的字符串,{2}代表第二个星号对应的字符串,以此类推。比如调用的时候:
<a href="Student_add">添加学生</a>
<a href="Student_delete">删除学生</a><br>
<a href="Teacher_add">添加老师</a>
<a href="Teacher_delete">删除老师</a><br> {1}代表"Student",{2}代表"add","delete",这样只要约定得好,配置文件就可以写得特别简单,叫"约定优于配置",Action的名字,方法的名字都按规定写,这样就不用去改配置文件!
13.使用action属性接收参数<a href="user/user!add?name=a&age=8">添加用户</a> 在链接地址上直接输入参数&参数,这样是直接把参数传到action的属性当中;
14.用域模型接收参数:<a href="User_add!add?user.name=aaa&user.age=21">添加用户</a>,UserAction类中有一个User类的实体user,作为一个域模型接收action传来的参数:
public class UserAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String add(){
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
}
但是这样其实存在一个问题,就是传过去的参数跟user对象的属性不一定完全配对,比如缺少或者多出一些属性,这时候就要用到所谓的DTO(Data Transfer Object),比如上面的例子,新建一个UserDTO类,确保能完全接受action传来的参数,然后再根据DTO的实体来构造出一个User对象。
15.jsp页面,表单传中文的时候,method尽量用post,在struts.xml中加入这句话<constant name="struts.i18n.encoding" value="GBK" /> 就能解决中文乱码问题!
另外,做实验的时候发现,如果用post方式传参数的话,要注意:如果是用domain model接收参数的话,比如有个user model,则传参数的时候应该用user.name 和 user.age
<form action="User_add!add" method="post">
姓名:<input type="text" name="user.name" />
年龄:<input type="text" name="user.age" />
<input type="submit" name="添加" />
</form>
16.配置文件中,一个namespace不能对应多个package!
- struts2_1学习笔记
- struts2_1
- struts2_1
- struts2_1:strust2的设计模式
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- CentOS 6.0 系统 LAMP(Apache+MySQL+PHP)安装步骤
- sql server 登陆前握手期间发生错误
- 如何区分网站排名和网站优化
- 6410之点灯程序的反汇编代码分析
- Android 监听wifi广播的两种方式
- struts2_1学习笔记
- replace(/\s/g,"")中的/g是什么意思?
- [转]转第二天叫醒我的不是闹钟,其实还是梦想!
- jQueryDom操作之删除节点
- seo优化-外部链接的原则
- android的system下的目录以及根目录下的文件夹
- js学习笔记(一)
- IOS基础
- C++: 二维数组作函数参数