struts2在webwork2基础发展而来,struts2与struts1相比,没有跟ServletAPI和struts API有着紧密的耦合,struts2为无侵入式设计,而struts1却属于侵入式设计;struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能;struts2提供了类型转换器,struts1的数据类型转换是通过BeanUtil来实现的。

struts2在StrutsPrepareAndExcuteFilter的init()方法中将读取类路径下默认的配置文件struts.xml完成初始化操作,读取struts.xml的内容后,以javabean形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件。

struts2的基本配置:

web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
      <filter-name>helloAction</filter-name>
      <filter-class>control.center.HelloWordAction</filter-class>
  </filter>
  <filter-mapping>
     <filter-name>helloAction</filter-name>
     <url-pattern>/test</url-pattern>
  </filter-mapping>
</web-app>

struts-config.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>
    <!--
                     在struts2中将action放在包中
        namespace:指的是action的路径
        struts-default包:定义了拦截器和result类型,继承了该包才能使用struts2的核心功能
    -->
    <package name="default" namespace="/control/center" extends="struts-default">
        <action name="index">
            <!-- result相当于ActionForward -->
            <result name="success">/WEB-INF/pages/hello.jsp</result>
        </action>
    </package>

    <!-- Add packages here -->

</struts>

1,如果没有为aciton指定class,那么该类为ActionSupport类

2,如果没有为action指定method方法,那么默认执行execute方法

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

Action:

package control.center;

public class HelloWordAction {

 private String message;
 
 public String getMessage() {
  return message;
 }

 public void setMessage(String message) {
  this.message = message;
 }

 public String execute(){
  this.message="我的第一个struts应用";

   return "success";
 }
 
}

Action的收索顺序,首先查找此action前的命名空间包是否存在,如果不存在就查找上层目录的命名空间包,如果不存在则在查找上层目录的命名空间包,如果在包下查找不到action,那么就会到默认命名空间中去查找action。

重定向不能直接访问web-inf目录:

struts2的重定向:

 <action name="redirect">
            <!-- 重定向 -->
            <result type="redirect">/hello.jsp?username=${username}</result>
        </action>

其中${username}类似el表达式,可以取出javabean中的username属性。

result默认的是dispatcher在服务器端一次请求

URL编码:

URLEncoder.encode("星期三","UTF-8");

URL解码:

URLEncoder.decode(new String(request.getParameter("username").getBytes("ISO8859"),"UTF-8"),"UTF-8")

重定向到某个Action:

        <action name="index">
            <!-- result相当于ActionForward -->
            <result name="success">/WEB-INF/pages/hello.jsp</result>
        </action>
       
        <action name="redirect">
            <!-- 重定向到名为index的action -->
            <result type="redirectAction">index</result>
        </action>

重定向到某个包中的action:

        <action name="redirect">
            <!-- 重定向到名为index的action -->
            <result type="redirectAction">

                 <!-- 将参数注入到类型对应的java类中 -->

                 <param  name="actionName">action的名称</param>

                <param   name="namespace">action的命名空间</param>

           </result>
        </action>

包:

<package name="default" namespace="/control/center" extends="struts-default">
        <action name="index">
            <!-- result相当于ActionForward -->
            <result name="success">/WEB-INF/pages/hello.jsp</result>
        </action>
       
        <action name="redirect">
            <!-- 重定向 -->
            <result type="redirect">/hello.jsp?username=${username}</result>
        </action>
       
    </package>

result的类型plainText表示原样输入页面代码:

<action name="redirect">
            <!-- 重定向 -->
            <result type="plaintText">

                      <param name="location">指定请求路径</param>

                       <!-- 指定文件的读取路径-->

                     <param name="ObacSet">UTF-8</param>

           </result>

</action>

使用<global-result></global-result>定义全局跳转视图

posted on 2011-02-23 21:03  魔战  阅读(470)  评论(0编辑  收藏  举报