Struts2实战——基础配置

URL拦截器

同SpringMVC需要配置DispatcherServlet一样,Struts2也需要在web.xml配置属于自己的”servlet”,只不过在struts2中这个”servlet”实际上是”filter”:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <utl-pattern>/*</url-pattern>
<filter-mapping>

不得不说上面的配置和SpringMVC如出一辙

加载国际化资源

全局国际化需要在struts.xml中添加:

<struts>
    <constant name="struts.custom.i8ln.resources" value="国际化文件"/>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
</struts>

视图页面的国际化使用:

<!--获取国际化文件-->
<s:i18n name="XXX.baseName"/>
<!--输出国际化消息-->
<s:text name="对应的国际化消息">

配置Action

首先需要一个继承了ActionSupport的类:

public class LoginAction extends ActionSupport{
    //一般会由Action的属性来对应HTTP中的请求参数
    private XXX xxx;
    //提供xxx对应的getter和setter方法
    public String execute()throws Exception{
        if(...){
            return SUCCESS;//值为"sucess"
        }
        return ERROR;//值为"error"
    }
}

之后还需要在struts.xml中进行Action的配置:

<struts>
    <constant name="struts.devMode" value="true"/>
    <package name="XXX" extends="struts-default">
        <action name="想要处理的映射的URL" class="LoginAction" 
            namespace="类似于SpringMVC中类上的@RequestMapping注解">
            <result name="error">/XXX.jsp/</result>
            <result name="success">/XXX.jsp</result>
        </action>
    </package>
</struts>

在这里不得不吐槽一下,struts2中对于ajax的支持一塌糊涂,不仅需要导入一大堆jar包,还需要额外的配置,相比之下SpringMVC就做的很好

访问上下文

可以通过在Action中通过:

public class XXXAction extends ActionSupport{
    ...
    public Stirng execute(){
        ActionContext ctx = ActionContext.getContext();
        //此时ctx就是application
    }
}

如果想要访问其他的Servlet,可以通过实现接口,一共提供了三种接口:
1.servletContextAware:用于访问Web应用的ServletContext实例
2.ServletRequestAware:直接访问用户请求的HttpServletRequest实例
3.ServletResponseAware:直接访问HttpServeltResponse实例,可以通过Response实例添加Cookie

除了上面三个接口,还有一个更方便的方法就是借助于ServletActionContext类的帮助,它提供了四种方法:
1.getPageContext():获取Web应用的PageContext对象
2.getRequest():获取Web应用的HttpServletRequest对象
3.getResponse():获取HttpServletResponse对象
4.getServletContext():获取ServletContext对象
ps:我们可以发现,好像获取Session对象并不是那么方便,只能通过ActionContext.getContext().getSession()方法获得Session对象

指定调用方法

第一种在配置文件中指定

<action name="XXX" class="XXX" method="方法名">
    ...
</action>

第二种在form表单的action属性中进行指定:

<form action="actionName!methodName">
    ...
</form>

第三种是使用通配符:

<action name="*Action" method="{1}">
    <result name="XXX">/XXX.jsp</result>
</action>

当然如果我们再做绝一点:

<action name="*_*" class="{1}Action" method="{2}">
    ...
<action>

说到这里,struts2不推荐直接链接到某个资源,而是将所有请求都发送给struts2框架,让框架去处理:

<action name="*">
    <result>/xxx/xxx/xxx.jsp</result>
</action>

特别需要注意,当使用通配符时,action的调用与struts2,xml文件的配置顺序有关。

全局结果配置

<struts>
    <package>
        <global-results>
            <result>/XXX/XXX/XXX.jsp</result>
        </global-results>
    </package>
</struts>

监听器

PreResultListener,是一个监听器接口,可以在Action完成之后,系统转入实际的物理视图之间被回调,需要在Action类的处理方法中进行添加:

public class XXXAction extends ActionSupport{
    public String execute(){
        ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
        invocation.addPreResultListener(new PreResultListener(){
            //...
        })
    }
}

异常处理

struts-default.xml中已经默认开启了struts2的异常映射,所以我们可以直接配置全局异常处理:

<struts>
    <package name="XX" extends="struts-default">
    //全局结果映射
    <global-results>
        <result name="异常页面">/XXX/XXX/XXX.jsp</result>
    </global-results>
    <global-exception>
        <exception-mapping exception="异常类型" result="异常页面"/>
    </global-exception>
    //Action配置
    </package>
</struts>

Action内部的异常处理同全局映射一样,异常信息可以通过struts2自定义标签的property属性进行输出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值