Struts2初认识(1)
来源:互联网 发布:打谱软件overture4.0 编辑:程序博客网 时间:2024/04/27 21:00
最近刚学习了Struts2,作为一个菜鸟,下面简单整理一下Struts2的基础知识。
一、Action
Action在我看来就是一个动作,这个动作类每个属性必须有一个get和一个set方法,属性命名遵循JavaBean命名规则。其次动作类必须有一个不带任何参数的构造器。如果Action中没有定义构造器,那么编译器会自动增加一个不带参数的构造器,但是如果我们定义了一个构造器,那么我们必须保证要有一个不带参数的构造器
。 每个动作类至少有一个方法供Struts2在执行该动作时调用。
1.实现action的方法
(1)普通类实现action,只需要有一个无参数构造方法,以及public String execute(){}方法。
(2)实现com.opensymphony.xwork2.Action接口,同时这个接口定义了一个execute的方法。
(3)通过继承ActionSuppor类来实现,这个类其实也实现了action接口,除此之外还实现了一下接口
com.opensymphony.xwork2.Validateable:提供validate()方法来为Action增加验证的功能
com.opensymphony.xwork2.Validateaware:提供方法来保存和恢复action或field级的错误信息
com.opensymphony.xwork2.TextProvider:提供获取本地信息文本的功能
com.opensymphony.xwork2.LocaleProvider:提供getLocale()方法来获取本地消息。
2.动态调动
(1)在struts2的配置文件中在,
<action name="TagsAction" class="cmm.so.action.TagsAction" <span style="color:#FF0000;">method=""></span>
<pre name="code" class="java">在method中加上要调用的方法即可。(2)动态调动,actionName!method,即调用的action的名字后面加<span style="color:#FF0000;">“!”</span>,再加上要调用的方法名。3.通配符
<action name="*_*" class="com.neusoft.method.{1}Action" method="{2}"> <result name="{2}">/{1}_{2}.jsp</result> </action>
使用要“约定优于配置”,必须要先约定好命名规范,{1}代表第几个*号
4.接受参数的的方法
(1)使用Action属性接受参数
在action中定义与请求参数同名的属性,struts2便自动接收请求参数并赋予给同名属性
public class ParamAction extends ActionSupport{ private String username; public String getUsername() { return username; } public void setUsername(String username) {//struts2通过反射技术调用与请求参//数同名的属性的setter方法来获取请求参数值 this.username = username;} public String execute() {System.out.println("username:"+username); return SUCCESS;}}
(2)使用DomainModel接收参数
在前台jsp页面中必须使用"对象.属性“来命名,在action中只需定义该对象,并生成set,get
public class ParamAction extends ActionSupport{private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String execute(){System.out.println("username:"+user.getUsername());return SUCCESS;}}
public class User {private String username;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}}
(3)使用ModelDriver<T>接收参数
ModelDriven接口只有一个方法
public Object getModel(){
returnnull;
}
该方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)userName来访问
但是必须要
private User user=new User();new出这个对象来
5.访问web元素。
Struts2中访问web元素有四种方法,两种与servlet api解耦的,两种与servlet api耦合。
解耦的、Map类型:
(1)通过ActionContext来访问Map类型的request、session、application对象
public class AttributeAction extends ActionSupport{private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;public AttributeAction(){request=(Map<String,Object>)ActionContext.getContext().get("request");session=ActionContext.getContext().getSession();application=ActionContext.getContext().getApplication();}public String execute(){request.put("req", “req");session.put("ses", “ses");application.put("app", “app");return SUCCESS;}}
(2)通过实现RequestAware、SessionAware、ApplicationAware接口来访问Map类型的request、session、application对象(IoC方式-控制反转)
public class StudentAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{private Map<String, Object> request;private Map<String, Object> session;private Map<String, Object> application;public StudentAction(){request=(Map<String, Object>) ActionContext.getContext().get("request");session=ActionContext.getContext().getSession();application =ActionContext.getContext().getApplication();}private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}private String pwd;public String add(){System.out.println("name"+name);System.out.println("pwd"+pwd);request.put("r", "r");session.put("s", "s");application.put("a", "a");return SUCCESS;}public String delete(){System.out.println("delete");return SUCCESS;}public void setRequest(Map<String, Object> request) {// TODO Auto-generated method stubthis.request=request;}public void setSession(Map<String, Object> session) {// TODO Auto-generated method stubthis.session=session;}public void setApplication(Map<String, Object> application) {// TODO Auto-generated method stubthis.application=application;}}
耦合的、真实类型(httpxxxx类型):
(1)通过ServletActionContext来访问Servlet API类型的HttpServletRequest、 HttpSession、 ServletContext对象(依赖于Servlet API 方式)
public class AttributeAction extends ActionSupport{private HttpServletRequest request;private HttpSession session;private ServletContext application;public AttributeAction(){request=ServletActionContext.getRequest();session=request.getSession();application=session.getServletContext();}public String execute(){request.put("req", “req");session.put("ses", “ses");application.put("app", “app");return SUCCESS;}}
(2)通过实现ServletRequestAware接口来访问Servlet API类型的HttpServletRequest、 HttpSession、 ServletContext对象(IoC方式)
public class AttributeAction4 extends ActionSupport implements ServletRequestAware{private HttpServletRequest request;private HttpSession session;private ServletContext application;public void setServletRequest(HttpServletRequest request) {session=request.getSession();application=session.getServletContext();}public String execute(){request.setAttribute("req", "aaa3");session.setAttribute("ses", "bbb3");application.setAttribute("app", "ccc3");return SUCCESS;}
6.包含文件配置
每个模块一个struts配置文件,使用<include file=“”/>导入其他配置文件即可。
命名规则一般建议如下:
<include file="xxx\xxxxxx\struts-user.xml" />
7.默认action
如果访问一个不存在的action,就会默认的访问<default-action-ref>标签中name属性定义的action,此处为名称为index的action。
<default-action-ref name="index" />放在package的第一行。
8.常见的常量
<!-- 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
<constant name="struts.action.extension" value="do"/>
<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false"/>
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 默认的视图主题 -->
<constant name="struts.ui.theme" value="simple" />
<!– 与spring集成时,指定由spring负责action对象的创建 -->
<constant name="struts.objectFactory" value="spring" />
<!–该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。-->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<!--上传文件的大小限制-->
<constant name="struts.multipart.maxSize" value=“10701096"/>
9.Action中result的转发类型
chain:处理action链,跳转到下一个action
redirectAction:重定向到一个action
redirect:重定向到一个URL
dispatcher:转发到Jsp。。。。。。。。。。。。。。。。类似于forward
httpheader:控制特殊http行为
stream:向浏览器发送InputStream对象
FreeMarker:跳转到模板文件
velocity:处理velocity模板
xslt:处理xml/xlst
plaintext:显示原始文件内容,例如:当我们需要原样显示jsp文件源代码 的时候,我们可以使用此类型。
如果重定向或者转发的action在别的命名空间下:
<result type="redirectAction">
<param name="actionName">helloworld</param>
<param name="namespace">/test</param>
</result>
在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:
<package name="param" namespace="/param" extends="struts-default">
<action name="param" class="com.neusoft.global.ParamAction">
<result>/param.jsp?age=${age}</result>
</action>
</package>
当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。struts1中提供了全局forward,struts2中也提供了相似功能:
<package ....>
<global-results>
<result name=”success”>/main.jsp</result>
</global-results>
</package>
- Struts2初认识(1)
- struts2 初认识
- 认识Struts2
- Struts2认识
- 认识struts2
- struts2-认识struts2
- Struts2初认识,入门小练习
- Struts2深入详解--- 认识Struts2
- struts2的初步认识!
- Struts2 01.初步认识
- Struts2的认识
- 001-认识struts2框架
- Struts2初步认识
- struts2的认识
- 再次认识Struts2(一)
- 再次认识Struts2(二)
- 再次认识Struts2(三)
- 再次认识Struts2(四)
- STL algorithm算法mismatch(37)
- jquery学习笔记之选择器
- js 把非数数字不允许输入
- ksum 问题
- 安防
- Struts2初认识(1)
- Flex 页面空白或Error #2032
- java中的控制台输入
- Android的bootloader
- 打印菱形
- DES加密算法—实现(C语言)
- 【转载】Ubuntu终端常用的快捷键
- POJ 2365 Rope(水题)
- 操作系统意义上的堆和栈的概念以及数据结构意义上的堆和栈的概念