您的位置:首页 > 编程语言 > Java开发

struts学习心得

2012-05-03 10:06 155 查看
一、MVC思想特点

(1)、多个视图对应一个模型

(2)、模型返回的数据与显示视图分离

(3)、应用分三层,减低了各层之间的耦合、提供了应用的可扩展性

(4)、控制层将不同的模型和不同的视图组合在一起,完成不同的请求

(5)、MVC更符合软件工程化管理的精神

二、web.xml配置文件中配置struts2的核心Filter

代码片段:

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

三、案例1

(loginDemo:)

loginAction:

public class LoginAcrion extends ActionSupport {

private static final long serialVersionUID = 1L;

private String name;

private String pass;

public void setPass(String pass) {

this.pass = pass;

}

public String getPass() {

return pass;

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

@Override

public String execute() throws Exception {

// TODO Auto-generated method stub

if(name.equals("zhangsan") && pass.equals("123")){

return SUCCESS;

}

return ERROR;

}

welcome.jsp

<body>

<s:debug></s:debug>

<s:form action="Login" method="post">

<s:textfield label="姓名" name="name"></s:textfield>

<s:password label="密码" name="pass"></s:password>

<s:submit value="登陆"></s:submit>

</s:form>

</body>

success.jsp

<body>

<s:debug/>

恭喜您: <s:property value="name"/>

登陆成功

</body>

error.jsp

<body>

出错啦~

</body>

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>

<package name="struts" extends="struts-default">

<action name="Login" class="com.struts.action.LoginAcrion">

<result name="success">/success.jsp</result>

<result name="error">/error.jsp</result>

</action>

</package>

</struts>

四、struts2应用的开发步骤

(1)、在web.xml中定义核心的Filter来拦截用户请求<见第二点>

(2)、如果需要一post方法提交请求,则需定义包含表单数据的jsp页面。如果只是以GET方法发送请求,则无须这一步

(3)、定义处理用户请求的action类

(4)、配置action<见第三点 struts.xml>

(5)、配置处理结果与物理视图资源之间的对应关系<见第三点 struts.xml>

(6)、编辑视图资源

五、struts2常用标签

(1)头文件:

<%@ taglib prefix="s" uri="/struts-tags"%> (s开头)

<%@ taglib prefix="sx"uri="/struts-dojo-tags"%> (sx开头)

(2)常用标签:《详细见struts2标签详解》

标签名 示例 效果

<a>超链接 a <s:a href="Register.action">注册</s:a> 形成超链接

<d>日期标签 datetimepicker: <sx:datetimepicker name="time" label="日期"></sx:datetimepicker> 在页面显示一个可下拉的日期控件

六、配置文件详解

package节点详解


package节点是整个配置的核心部分。每个package,从语义上讲,其实代表了每一个独立的模块。在这个模块中,你可以定义隶属于这个模块的行为方式,而与其他的模块没有关系。所以,每个package都有独立的interceptor、result-type和action的定义,绝大多数的Runtime配置定义都是通过package节点实现的。接下来我们就来详细讨论一下package中的属性和子节点。

基本属性

1. name


name属性为每个package设置一个唯一的标识,这个标识在所有的package定义中不能重复。

2. abstract

标识这个package的定义是一个抽象定义,也就是允许他仅包含声明式的定义,而不需要在package定义中包含action的定义。

3. extends

通过使用extends,你可以指定本package继承另外一个package的所有的配置。当某个package继承了另外一个package的所有配置,那么你就无需对父package中已经声明过的配置定义做再次的定义。

同时,如果重复定义父package中已声明过的配置定义,那么这些重复定义声明将覆盖父package中的相关定义。

4. namespace

Struts2 Reference 写道
The namespace attribute subdivides action configurations into logical modules, each with its own identifying prefix. Namespaces avoid conflicts between action names. Each namespace can have its own "menu" or "help" action, each with its
own implementation.

这段来自Struts2的Reference的引用,基本上阐明了namespace的作用:对于action配置进行逻辑划分。

如果我们不为package节点指定namespace,Struts2默认使用一个空字符串作为默认的namespace。当然,也可以使用"/"等字符串来表示namespace。

Struts2在根据URL进行寻址的时候,使用以下的步骤:

1) 根据URL进行Namespace和ActionName的计算

2) 根据计算的得到的Namespace和ActionName查找package节点中相应配置

3) 如果查找失败,则查找Namespace为空,ActionName为整个URL的配置

有关上述3点的详细信息,请参考Struts2的Reference:http://struts.apache.org/2.0.14/docs/namespace-configuration.html

result-types节点

在result-types节点中,我们可以声明在本package中所支持的Result类型。这些Result类型,将在action节点中被引用到。

chain 用来处理Action链

dispatcher 用来转向页面,通常处理JSP

freemarker 处理FreeMarker模板

tttpheader 用来控制特殊的Http行为

redirect 重定向到一个URL

redirectAction 重定向到一个Action

stream 向浏览器发送InputSream对象,通常用来处理文件下载

velocity 处理Velocity模板

xslt 处理XML/XLST模板

plainText 显示原始文件内容,例如文件源代码

interceptors节点

在interceptors节点中有两类节点:<interceptor>和<interceptor-stack>。这两个节点都用于声明拦截器。前者的作用,是真正定义一个拦截器。而后者则通过引用已经定义的拦截器,指定他们的执行顺序。

当我们在试图在Action中引用拦截器时,我们实际上是为某个Action指定需要执行哪些拦截器,并且为这些拦截器指定执行顺序。所以Action所引用的,是某个<interceptor-stack>中的定义。

缺省配置指向

为了简化配置,我们可以在package节点中指定本package内的缺省配置指向。这可以通过<default-interceptor-ref>、<default-action-ref>、<global-results>等子节点来完成。

action节点

action节点是所有的Runtime配置的核心内容。它的主要作用就是指定URL与Action之间的映射关系。同时,在action节点中你也可以指定action执行时的相关配置,例如action所引用的interceptor等。

使用include节点

plugin中的配置文件,实际上是位于classpath的JAR包中的,那么我们在项目中,如何对一个庞大的配置文件进行拆分呢?在Struts2中,可以使用include节点对所有的Struts2配置文件进行拆分和模块化管理。例如:

Xml代码

<struts>

<include file="struts-default.xml"/>
<include file="web/struts-config.xml"/>
<include file="web/struts-action.xml"/>

</struts>

其中,file所指定的文件是相对于classpath的相对目录中的文件。而每个配置文件的格式与struts-default.xml的格式也是相同的。

通过include节点,我们就可以对一个比较大的配置文件按照功能和模块进行拆分,这在一个大型的团队开发中,是相当有意义的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: