您的位置:首页 > 其它

structs2

2016-02-19 09:20 169 查看
学习和使用structs2其实和使用springmvc差不多,在这边我主要入门介绍一下structs2怎么配置和入门,做哪些文件配置,简单介绍一下structs2的访问处理流程。之后我会在补充一下structs2怎么结合spring进行配置使用。
structs2的主要核心配置文件当然是structs.xml还有web.xml里面对structs2进行的配置。接下来我就先把这两个配置文件的配置贴出来顺便做个介绍。

web.xml的文件配置:(这个文件主要是配置structs的过滤器,这边主要是structs的准备阶段需要通过这些拦截器做配置加载还有初始化一些参数的值,一般都是先执行这个过滤器然后在执行自己实现的过滤器,也就是如果有自己定义的其他过滤器一般要配置在这个主过滤器后面)

<?xml version="1.0" encoding="UTF-8"?>
<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"> <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>

</web-app>

structs.xml这个文件是structs2的基础默认文件,其中会包含一些package定义,全局默认跳转定义等。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!--这边根据自己的业务模块新建自己的业务模块的namespace-->
<include file="config/struts/struts-user.xml"></include>
<include file="config/struts/struts-cart.xml"></include>
<include file="config/struts/struts-main.xml"></include>
<include file="config/struts/struts-order.xml"></include>

<package name="dang-default" extends="struts-default">
<!-- 异常处理 -->

<!--		<global-results>-->
<!--			<result name="fail">/error.jsp</result>-->
<!--		</global-results>-->
<!--		<global-exception-mappings>-->
<!--			<exception-mapping result="fail" exception="java.lang.Exception"></exception-mapping>-->
<!--		</global-exception-mappings>-->
<!-- 定义一些共通的拦截器,Result等配置 -->
<interceptors>
<interceptor name="loginCheck" class="com.tarena.interceptor.LoginInterceptor"></interceptor>
<interceptor-stack name="dangStack">
<interceptor-ref name="loginCheck"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
<interceptor-stack name="tokenStack">
<interceptor-ref name="loginCheck"></interceptor-ref>
<interceptor-ref name="tokenSession"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-action-ref name="mainAction"/>
<global-results>
<result name="login" type="redirect">/user/login_form.jsp</result>
</global-results>
<action name="mainAction" class="com.tarena.web.action.main.MainAction">
<result name="main">/WEB-INF/jsp/main/main.jsp</result>
</action>
</package>

</struts>

比如我这边一块购物车的模块命名空间配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
<package name="cart" namespace="/cart" extends="dang-default">
<!-- 定义Action index -->
<action name="cart" class="com.tarena.web.action.cart.CartAction">
<interceptor-ref name="dangStack"></interceptor-ref>
<result name="success">/WEB-INF/jsp/cart/cart_list.jsp</result>
<result name="login" type="redirectAction">
<param name="namespace">/user</param>
<param name="actionName">tologinAction</param></result>
</action>
</package>

<package name="ajaxCart" namespace="/cart" extends="json-default">
<interceptors>
<interceptor name="loginCheck"
class="com.tarena.interceptor.LoginInterceptor"></interceptor>
<interceptor-stack name="dangStack">
<interceptor-ref name="loginCheck"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<global-results>
<result name="login" type="redirectAction">
<param name="namespace">/user</param>
<param name="actionName">tologinAction</param>
</result>
</global-results>

<action name="cartBuy" class="com.tarena.web.action.cart.CartAction"
method="buy">
<interceptor-ref name="dangStack"></interceptor-ref>
<result name="success" type="json"></result>
</action>
</package>
</struts>


这里也对structs访问请求的流程(运行机制)稍作介绍:

客户端 -> url -> Http请求 -> Tomacat -> 查找对应的Webapplication -> web.xml -> filter doFilter方法->   ->参考struct.xml -> 查找对应的namespace -> 查找对应的action -> 查找对应的result -> 反馈result -> 请求Forwad给目标文件 。

中间省略了拦截器,而相应的拦截器一般都在structs默认的配置文件中声明,然后在配置action的时候使用。

关于在界面上的三种方式调用可以看一下这篇文章http://blog.csdn.net/yangqicong/article/details/6887568。还有就是这边也顺便解释一下action的代码,一般我们action都要实现SessionAware,ServletRequestAware,实现这两个接口可以完成session和属性的自动注入,这边在把action的代码例子列举出来看:

先列举基础Action

package com.tarena.web.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;

public class BaseAction implements SessionAware,ServletRequestAware{
protected Map<String,Object> session;
protected HttpServletRequest request;

public void setSession(Map<String, Object> session) {
this.session = session;
}

public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

}


其他的action都直接继承这个action就可以

package com.tarena.web.action.cart;

import java.util.List;

import org.apache.struts2.json.annotations.JSON;

import com.tarena.web.action.cart.CartItem;

import com.tarena.web.action.BaseAction;

public class CartAction extends BaseAction{
private int id;
private int num;
private boolean flag;
public String execute() throws Exception{

return "success";
}

public String view() throws Exception{
return "success";
}

public String buy() throws Exception{
getCart().buy(id);
flag=true;
return "success";
}

public String delete() throws Exception{
getCart().delete(id);
return "success";
}

public String recovery() throws Exception{
getCart().recovery(id);
return "success";
}

public String modify() throws Exception{
getCart().update(id, num);
return "success";
}

public String clear() throws Exception{
getCart().clearCart();
return "success";
}

@JSON(serialize=false)
public List<Ca
4000
rtItem> getCiBuy() throws Exception {
return getCart().getItems(false);
}

@JSON(serialize=false)
public List<CartItem> getCiDel() throws Exception {
return getCart().getItems(true);
}

@JSON(serialize=false)
public double getTotalFixed() throws Exception{
return getCart().total(true);
}

@JSON(serialize=false)
public double getTotalDang() throws Exception{
return getCart().total(false);
}
@JSON(serialize=false)

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
private CartService getCart(){
return CartFactory.getCart(CartFactory.SESSION_TYPE);
}
}

下面简要阐述一下structs2执行过程:

structs运行机制

    客户端 -> url -> Http请求 -> Tomacat -> 查找对应的Webapplication -> web.xml -> filter doFilter方法->   ->参考struct.xml -> 查找对应的namespace -> 查找对应的action -> 查找对应的result -> 反馈result -> 请求Forwad给目标文件 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  structs2