struts2学习笔记

一、web.xml

<!-- 配置过滤器 -->
<filter>
    <filter-name>struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

二、struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- package:将action封装,一个package可配置多个action
            namespace:给action的访问路径前定义一个命名空间
            name:包名,标识符,无具体作用,不可重复
            extends:继承的package,默认继承struts-default
            abstract:是否为抽象,true表示该包抽象,不能独立运行.专门被继承
    -->
    <package name="hello" namespace="/" extends="struts-default">
        <!-- action:
                name:action对应的访问路径
                class:该action所属的类
                method:对应的方法,默认为execute
        -->
        <action name="user_*" class="com.ccy_blog.action.UserAction" method="{1}" >
            <!-- result:
                    name:该action方法的返回值,默认为success
                    type:指定调用哪一个result类来执行,默认使用转发
            -->
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

三、创建action

1. pojo
public class UserAction {

    public String add(){
        System.out.println("add user");
        return "success";
    }
    public String delete(){
        System.out.println("add user");
        return "success";
    }
    public String update(){
        System.out.println("add user");
        return "success";
    }
    public String find(){
        System.out.println("add user");
        return "success";
    }
}
2. 实现Action接口
  • 预置多个返回值常量及execute方法模板

3. 继承ActionSupport类
  • 实现了多个接口

四、各类常量

<!-- i18n:国际化,解决post提交乱码 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 访问action的后缀 -->
<constant name="struts.action.extension" value="action"/>
<!-- 开发者模式,更多的错误提示信息,struts配置文件热加载 -->
<constant name="struts.devMode" value="true"/>
<!-- 动态方法调用,默认关闭 - !方法-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

五、动态方法调用

1. action
public class UserAction {

    public String add(){
        System.out.println("add user");
        return "success";
    }
    public String delete(){
        System.out.println("add user");
        return "success";
    }
    public String update(){
        System.out.println("add user");
        return "success";
    }
    public String find(){
        System.out.println("add user");
        return "success";
    }
}
2. struts.xml
  • 使用通配符,{n}匹配第n个*
<action name="user_*" class="com.ccy_blog.action.UserAction" method="{1}" >
    <!-- result:
            name:该action方法的返回值,默认为success
            type:指定调用哪一个result类来执行,默认使用转发
    -->
    <result name="success">/index.jsp</result>
</action>

六、转发与重定向

1. result的type属性
<result-types>
    <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
    <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
    <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
    <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
    <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
    <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
    <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
    <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
    <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
    <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
    <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
</result-types>
1. 转发
<action name="hello1" class="com.ccy_blog.action.HelloAction">
    <result name="success" type="dispatcher">
        /index.jsp
    </result>
</action>
2. 重定向
<action name="hello2" class="com.ccy_blog.action.HelloAction" >
    <result name="success" type="redirect">
        /index.jsp
    </result>
</action>
3. 转发到action
<action name="hello4" class="com.ccy_blog.action.HelloAction" >
    <result name="success" type="chain">
        <param name="actionName">hello2</param>
        <param name="namespace">/</param>
    </result>
</action>
4. 重定向到action
<action name="hello3" class="com.ccy_blog.action.HelloAction" >
    <result name="success" type="redirectAction">
        <param name="actionName">hello1</param>
        <param name="namespace">/</param>
    </result>
</action>

七、整合到spring

  • 配置action由spring管理(struts.xml)
<!-- 配置action交由spring管理 -->
<constant name="struts.objectFactory" value="spring"/>
<!-- spring负责装配action对象的属性 -->
<constant name="struts.objectFactory.spring.autoWire" value="name"/>
1. 半整合
  • action由struts创建,由spring装配
  1. 配置action
<package name="user" namespace="/" extends="struts-default">
    <!-- action中仍然配置class属性,即action由struts2创建,但属性由spring装配 -->
    <action name="user_*" class="com.ccy_blog.action.UserAction" method="{1}">
        <result name="success">/hello.html</result>
    </action>
</package>
  1. 配置spring
 <!-- 配置action -->
<bean name="userAction" class="com.ccy_blog.action.UserAction"/>
<bean name="userService" class="com.ccy_blog.service.impl.UserServiceImpl"/>
  1. action类
public class UserAction extends ActionSupport{

    //1. 需要与spring中配置的beanName一致
    private UserService userService;
    //2. 需提供set方法,spring将自动根据属性名完成注入
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public String add(){
        userService.add();
        return "success";
    }

}
全整合
  • 完整的交由spring管理
  1. 配置action
<package name="user" namespace="/" extends="struts-default">
    <!-- class属性填写beanName,交由spring创建 -->
    <action name="user_*" class="userAction" method="{1}">
        <result name="success">/hello.html</result>
    </action>
</package>
  1. 配置spring
    • action需手动装配,spring无法自动装配
    @Autowired
    private UserService userService;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值