首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

第二章 Struts2 配置文件讲授

2012-10-07 
第二章 Struts2 配置文件讲解一:配置文件?? (1).环境搭建和上一章一样,需要导入6个jar包。?? (2).将struts.

第二章 Struts2 配置文件讲解

一:配置文件

?? (1).环境搭建和上一章一样,需要导入6个jar包。

?? (2).将struts.xml放置到web工程src目录下。

???(3).web.xml配置。

??

二:示例

?? action层??

package com.struts.chapter2.action;public class UserAction{private String message;public String getMessage() {return message;}public String execute(){message = "我的第一个Struts2程序";return"success";}}

?? struts.xml配置??

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!-- 设置一些全局的常量开关 --><constant name="struts.i18n.encoding" value="UTF-8" /><constant name="struts.action.extension" value="do,action" /><constant name="struts.serve.static.browserCache " value="false" /><constant name="struts.configuration.xml.reload" value="true" /><constant name="struts.devMode" value="true" /><constant name="struts.enable.DynamicMethodInvocation" value="false" /><include file="chapter2.xml" /></struts>

?? chapter2.xml??

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="chapter2" namespace="/chapter2" extends="struts-default"><action name="execute" name="code"><%@ page language="java" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:set var="basePath" value="${pageContext.request.contextPath}" /><c:redirect url="/chapter2/execute.do" />

?? chapter2.jsp(该文件放到WEB-INF下)??

<%@ page language="java" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:set var="basePath" value="${pageContext.request.contextPath}" /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title></title>  </head>  <body>  ${message}  </body></html>

???? 注意:这里用到EL表达式,而EL表达式只能取出Page、request、session、application四个范围之一里面的数据,但是我们这里并没有放置到四个范围中,是怎么去出来的呢?

???? UserAction是个普通类,它不是servlet,它怎能处理用户的请求呢?

?????Struts2用于处理用户请求的Action,没有与Servlet API耦合,显示无法处理用户请求,而Struts2提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并调用Action的execute方法来处理用户的请求.

???? Struts2框架中使用包来管理action,避免了Servlet在web.xml中难以管理的与维护的局面.包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action,在实际应用中,我们应该把一组业务功能相关的action 放在同一个包下.

???? 配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,如果其他包要继承该包,必须通过该属性进行引用,包的namespace属性用于定义该包的命名空间,命名空间作用为访问该包下的action路径的一部分,见示例.namespace属性可以不配置,如果不指定该属性,默认的命名空间为””

???? 通常每个包都应该继承struts-default包,因为struts2很多核心功能都是拦截来实现的。

???? package还有一个abstract=”true”属性,指定此包为抽象包,和抽象类的概念差不多,说明此包只能被其他包继承,则它里面不允许包含action元素.

???? <result name="success">/WEB-INF/Page/chapter2/chapter2.jsp</result>

???? result元素主要定义视图的跳转和返回的行为及类型.

?

三:常用开关的介绍

?? (1).<constant name="struts.i18n.encoding" value="UTF-8" />

??? 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法。

?? (2).<constant name="struts.action.extension" value="do,action" />

????该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。?? 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。

??? 在请求时,路径后的后缀action可要可不要,即下面的两种请求都是可以的?

???(3).<constant name="struts.serve.static.browserCache " value="false" />

????设置浏览器是否缓存静态内容,默认值为true,开发阶段最好false

?? (4).<constant name="struts.configuration.xml.reload" value="true" />

??? 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好true

?? (5).<constant name="struts.devMode" value="true" />

??? 开发模式下设为true,这样可以打印出更详细的错误信息

?? (6).<constant name="struts.enable.DynamicMethodInvocation" value="false" />

??? 动态方法调用,可以解决多个请求对应一个Servlet的问题,后面详细讲解,默认为true,关闭则设为false.

?

四:Action配置中的各项默认值

?? 下面代码:???

<action name="Login"><result>/WEB-INF/Page/chapter2/Login.jsp</result></action>

??? 当我们请求的路径为http://localhost:8080/Struts2/chapter2/Login时,同样可以实现页面的跳转,这是怎么回事呢?

?? (1).如果没有为action指定class,默认是ActionSupport类

?????<action name="Login">相当于

?????<action name="Login" method="execute">

???(3).如果没有指定result的name属性,默认值为success

????<result>相当于??<result name="success">

?

?? 问是题ActionSupport这个类到底是个什么类呢?

??? 首先要肯定的一点是他是一个具有execute方法的类,并且execute方法返回”success”字符串,因为只有这样,前面的运行结果才能说的通. ActionSupport还实现了很多其他的结果,提供了许多定制的功能.

???

五:ActionSupport类的作用

?? ?struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。?

??? Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。

????

热点排行