struts2_1学习笔记
2013-07-30 14:34
204 查看
1. struts.xml文件要copy到src目录下
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!
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学习笔记三——Namespace与访问路径
- [原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用
- [原创]java WEB学习笔记69:Struts2 学习之路-- 消息处理与国际化,概述,配置国际资源文件,访问国际化消息,通过超链接切换语言
- Struts2学习笔记----使用POJO
- Struts2学习笔记
- Struts2学习笔记之自定义拦截器
- Struts2知识点学习笔记
- struts2——学习笔记1——struts2封装表单数据方式(三种)
- Struts2学习笔记
- struts2系列学习笔记(9)---------------编程方式的验证
- struts2学习笔记之拦截器(Interceptor)
- struts2学习之基础笔记5
- [原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理
- Struts2 学习笔记 2
- 黑马程序员——struts2学习笔记二(结果类型)
- 【SSH学习笔记】整合spring3-struts2的小项目(四)
- Struts2学习笔记02 之 使用
- struts2学习笔记 -- day09 Struts2的拦截器
- Struts2 学习笔记
- struts2学习笔记