`
foryougeljh
  • 浏览: 116434 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2笔记

 
阅读更多

struts.xml文件中配置常量

<!-- 指定默认编码集,作用于HttpServletRequestsetCharacterEncoding方法 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"/>

Struts2的处理流程

StrutsPrepareAndExecuteFilterStruts 2框架的核心控制器,它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到ActionStruts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。

为应用指定多个struts配置文件

<struts>

<include file="struts-user.xml"/>

<include file="struts-order.xml"/>

</struts>

通过这种方式,我们就可以将Struts 2Action按模块添加在多个配置文件中。

动态方法调用

使用通配符定义action

<package name="itcast" namespace="/test" extends="struts-default">

<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">

<result name="success">/WEB-INF/page/hello.jsp</result>

</action>

</package>

public class HelloWorldAction{

private String message;

....

public String execute() throws Exception{

return "success";

}

public String other() throws Exception{

return "success";

}

}

要访问other()方法,可以通过这样的URL访问:/test/helloworld_other.action

接收请求参数

采用基本类型接收请求参数(get/post)

Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名属性。

请求路径: http://localhost:8080/test/view.action?id=78

public class ProductAction {

private Integer id;

public void setId(Integer id) {//struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值

this.id = id;

}

public Integer getId() {return id;}

}

采用复合类型接收请求参数

请求路径: http://localhost:8080/test/view.action?product.id=78

public class ProductAction {

private Product product;

public void setProduct(Product product) { this.product = product; }

public Product getProduct() {return product;}

}

Struts2中与请求参数同名的属性的setter方法来获取请求参数值。首先通过反射技术调用Product的默认构造器创建product对象,然后再通过反射技术调用product

自定义类型转换器

java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值。

但如果我们需要接收格式为20091221的请求参数,我们必须定义类型转换器,否则struts2无法自动完成类型转换。

import java.util.Date;

public class HelloWorldAction {

private Date createtime;

public Date getCreatetime() {

return createtime;

}

public void setCreatetime(Date createtime) {

this.createtime = createtime;

}

}

自定义类型转换器

public class DateConverter extends DefaultTypeConverter {

@Override

public Object convertValue(Map context, Object value, Class toType) {

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

try {

if(toType == Date.class){//当字符串向Date类型转换时

String[] params = (String[]) value;//匹配getParameterValues()

return dateFormat.parse(params[0]);

}else if(toType == String.class){//Date转换成字符串时

Date date = (Date) value;

return dateFormat.format(date);

}

} catch (ParseException e) {}

return null;

}

}

将上面的类型转换器注册为局部类型转换器:

Action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassNameAction的类名,后面的-conversion.properties是固定写法,对于本例而言,文件的名称应为HelloWorldAction-conversion.properties 。在properties文件中的内容为:

属性名称=类型转换器的全类名

对于本例而言, HelloWorldAction-conversion.properties文件中的内容为:

createtime= cn.itcast.conversion.DateConverter

自定义全局类型转换器

将上面的类型转换器注册为全局类型转换器:

WEB-INF/classes下放置xwork-conversion.properties文件 。在properties文件中的内容为:

待转换的类型=类型转换器的全类名

对于本例而言, xwork-conversion.properties文件中的内容为:

java.util.Date= cn.itcast.conversion.DateConverter

访问或添加request/session/application属性

ActionContext ctx = ActionContext.getContext();

ctx.getApplication().put("app", "应用范围");//ServletContext里放入app

ctx.getSession().put("ses", "session范围");//session里放入ses

ctx.put("req", "request范围");//request里放入req

获取HttpServletRequest / HttpSession / ServletContext / HttpServletResponse对象

HttpServletRequest request = ServletActionContext.getRequest();

ServletContext servletContext = ServletActionContext.getServletContext();

request.getSession()

HttpServletResponse response = ServletActionContext.getResponse();

自定义拦截器

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:

public class PermissionInterceptor implements Interceptor {

private static final long serialVersionUID = -5178310397732210602L;

public void destroy() {

}

public void init() {

}

public String intercept(ActionInvocation invocation) throws Exception {

System.out.println("进入拦截器");

if(session里存在用户){

String result = invocation.invoke();

}else{

return “logon”;

}

//System.out.println("返回值:"+ result);

//return result;

}

}

配置拦截器

<package name="itcast" namespace="/test" extends="struts-default">

<interceptors>

<interceptor name=“permission" class="cn.itcast.aop.PermissionInterceptor" />

<interceptor-stack name="permissionStack">

<interceptor-ref name="defaultStack" />

<interceptor-ref name=" permission " />

</interceptor-stack>

</interceptors>

<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">

<result name="success">/WEB-INF/page/hello.jsp</result>

<interceptor-ref name="permissionStack"/>

</action>

</package>

因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以自己定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。

如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-ref name=“permissionStack”/>把拦截器定义为默认拦截器。注意:每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。

分享到:
评论

相关推荐

    Struts2笔记,看完一遍,保证你学会Struts2,最权威的笔记!!!

    Struts2笔记 本人工作中积累的,故做成笔记以供大家一起学习进步. 模块分的非常详细,各个细节都会关注到,只挑选其精华,工作中用得到的技术!!! 不要看资源小,起到的作用却非常大!!!

    黑马程序员Struts2笔记

    本笔记主要涵盖了Struts2的基础知识,包括但不限于配置、Action、拦截器、结果类型以及异常处理等内容。 1. **Struts2框架简介** Struts2是Apache软件基金会的一个开源项目,它是Struts1的升级版,弥补了Struts1在...

    马士兵Struts2笔记2013

    Struts2是一个流行的Java web框架,...以上就是"马士兵Struts2笔记2013"中涉及的主要知识点,这些内容涵盖了Struts2的基础配置、数据处理、验证、调试以及与视图层的交互等方面,对于理解和掌握Struts2框架非常有帮助。

    Struts2笔记

    ### Struts2框架核心概念与工作原理 #### 一、框架概述 Struts2是Apache组织维护的一个开源项目,它是Struts1的升级版本,在设计理念和技术实现上都有较大的改进。Struts2是一个基于MVC(Model-View-Controller)...

    struts2笔记html版本

    8. ** strut2显示图笔记**:这个笔记可能包含了Struts2架构的可视化表示,帮助理解各个组件之间的关系和工作流程,包括Action、Interceptor、Value Stack等的交互过程。 通过阅读这个HTML版的Struts2笔记,开发者...

    圣思园struts2笔记

    本笔记主要涵盖了圣思园张龙老师在教学过程中讲解的Struts2核心概念与实战技巧。 首先,我们来了解Struts2的基本架构。Struts2框架通过拦截器(Interceptor)机制实现了对HTTP请求的处理,这些拦截器可以实现如日志...

    赵栋struts2 笔记

    赵栋的Struts2笔记主要涵盖了2013年的相关知识,以下是根据笔记内容提炼出的一些关键知识点: 1. **URL与Action方法绑定**: 在Struts2中,通过URL直接调用Action类的方法是可能的。如果在URL中附加"!"后跟方法名...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    **Struts2笔记** Struts2是MVC(模型-视图-控制器)设计模式的一个实现,它为Java Web开发提供了强大的控制层。Struts2的核心是Action类,它处理用户请求并调用业务逻辑。以下是一些关键知识点: 1. **...

    struts2笔记_初步修改版_.

    在“Struts2笔记_初步修改版_”中,我们可能会涵盖以下关键知识点: 1. **Struts2架构**:Struts2的核心是Action类,它是处理用户请求的中心。Action类与业务逻辑层交互,并通过Result返回视图。Struts2使用拦截器...

    struts2笔记 Word文档

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了...通过阅读"struts2笔记[初步修改版].doc",读者将能够更深入地了解这个框架,并在实际项目中灵活运用。

    struts2笔记和代码

    总的来说,"struts2笔记和代码"涵盖了Struts2框架的基本原理、配置、拦截器、Action实现、视图展现以及实践应用等多个方面,对于学习和掌握Struts2具有很高的价值。通过深入研究这些笔记和代码,开发者不仅可以理解...

    Struts2 笔记代码

    在这个"Struts2笔记代码"压缩包中,很可能是包含了一系列与Struts2相关的示例代码和学习资料。 Struts2的核心特性包括: 1. **Action类和结果类型**:Action类是业务逻辑的载体,负责处理用户的请求。每个Action...

    servlet和struts2笔记

    ### servlet和struts2笔记 #### 一、Servlet 基础 **Servlet** 是 Java Web 开发中的一种核心技术,它被设计用于处理客户端发送到服务器的 HTTP 请求,并且能够生成响应。Servlet 可以看作是服务器端的小程序,...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2学习笔记(完美总结)——转自OPEN经验库

    Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...

    Struts2 笔记

    Struts2笔记PDF文件可能包含了对这个框架的深入理解和实践指导。 在Struts2中,核心概念包括Action、Result、Interceptor(拦截器)和Value Stack。Action是业务逻辑的载体,它处理用户请求并执行相应的业务操作。...

    三、Servlet_jsp_Struts2笔记

    Servlet、JSP、Struts2笔记 Servlet基础 Servlet是运行在服务器上的程序,使用Java语言编译,并且使用Servlet接口来实现动态界面。Servlet需要接受客户端发送的请求,并将处理结果以响应的形式响应给客户端。 ...

Global site tag (gtag.js) - Google Analytics