Struts-拦截器+通配符+客户端跳转

1.通配符匹配

*Product 表示所有以Product结尾的路径,都会匹配在这个Action上
method={1}表示第一个通配符
如果访问的是addProduct就会调用add方法
如果访问的是listProduct就会调用list方法
以此类推

<?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>
  <constant name="struts.i18n.encoding" value="UTF-8"></constant>
   
  <package name="basicstruts" extends="struts-default">
  
  <action name="*Product" class="com.how2java.action.ProductAction" method="{1}">
    <result name="show">show.jsp</result>
    <result name="list">list.jsp</result>
  </action>   
 
</package>
 
</struts>

2.拦截器

拦截器可以简单地看成是Struts中的"filter"
拦截器可以拦截指定的Action,并且对Action进行相应的操作

示例:

添加一个Date属性,用于被拦截注入时间

package com.how2java.action;
  
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import com.how2java.bean.Category;
import com.how2java.bean.Product;
  
public class ProductAction {
     
    private Date date;
     
    public Date getDate() {
        return date;
    }
 
    public void setDate(Date date) {
        this.date = date;
    }
 
    private Product product;
     
    private List<Category> categories =new ArrayList();
     
    public List<Category> getCategories() {
        return categories;
    }
 
    public void setCategories(List<Category> categories) {
        this.categories = categories;
    }
 
    public String show() {
        product = new Product();
        product.setName("iphone7");
        return "show";
    }
  
    public String add() {
        return "show";
    }
     
    public String list() {
        Category category1 =new Category();
        category1.setId(1);
        category1.setName("category1");
         
        Category category2 =new Category();
        category2.setId(2);
        category2.setName("category2");
         
        categories.add(category1);
        categories.add(category2);
         
        List<Product> products1=new ArrayList();
        Product p1 = new Product();
        p1.setId(1);
        p1.setName("product1");
        Product p2 = new Product();
        p2.setId(2);
        p2.setName("product2");
        Product p3 = new Product();
        p3.setId(3);
        p3.setName("product3");
  
        products1.add(p1);
        products1.add(p2);
        products1.add(p3);
         
        List<Product> products2=new ArrayList();
        Product p4 = new Product();
        p4.setId(4);
        p4.setName("product4");
        Product p5 = new Product();
        p5.setId(5);
        p5.setName("product5");
        Product p6 = new Product();
        p6.setId(6);
        p6.setName("product6");
         
        products2.add(p4);
        products2.add(p5);
        products2.add(p6);
         
        category1.setProducts(products1);
        category2.setProducts(products2);
         
        return "list";
  
    }
  
    public Product getProduct() {
        return product;
    }
  
    public void setProduct(Product product) {
        this.product = product;
    }
}

创建拦截器,把拦截到的Action强制转换成 ProductAction,并设置当前时间(注入)

package com.how2java.interceptor;
 
import java.util.Date;
 
import com.how2java.action.ProductAction;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 
public class DateInterceptor extends AbstractInterceptor {
 
    public String intercept(ActionInvocation invocation) throws Exception {
       ProductAction action = (ProductAction)invocation.getAction();
       action.setDate(new Date());
       return invocation.invoke();
    }
}

 一旦使用了自定义的拦截器,本来配置在action上的默认的拦截器就失效了。 所以需要再加上defaultStack

<?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>
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
 
    <package name="basicstruts" extends="struts-default">
        <interceptors>
            <interceptor name="dateInterceptor" class="com.how2java.interceptor.DateInterceptor" />
        </interceptors>
 
        <action name="*Product*" class="com.how2java.action.ProductAction"
            method="{1}">
            <interceptor-ref name="dateInterceptor" />
            <interceptor-ref name="defaultStack" />  
            <result name="show">show.jsp</result>
            <result name="list">list.jsp</result>
        </action>
 
    </package>
 
</struts>

list.jsp用于显示时间

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8" isELIgnored="false"%>
 
<%@ taglib prefix="s" uri="/struts-tags" %>
 
<%@page isELIgnored="false"%>
 
${date}
 
<table border="1" cellspacing="0">
    <tr>
        <td>id</td>
        <td>name</td>
        <td>products</td>
    </tr>
     
    <s:iterator value="categories" var="c">
        <tr>
            <td>${c.id}</td>
            <td>${c.name}</td>
            <td>
                <s:iterator value="#c.products" var="p">
                    ${p.name}<br/>
                </s:iterator>        
            </td>
        </tr>
    </s:iterator>
 
</table>
 
<s:debug/>

3.客户端跳转

在result标签里加上新的属性: type="redirect"

<?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>
  <constant name="struts.i18n.encoding" value="UTF-8"></constant>
   
  <package name="basicstruts" extends="struts-default">
   
  <action name="addPageProduct" class="com.how2java.action.ProductAction" method="addPage">
    <result name="addPage" type="redirect">addProduct.jsp</result>
  </action> 
 
  <action name="showProduct" class="com.how2java.action.ProductAction" method="show">
    <result name="show">show.jsp</result>
  </action>   
  <action name="addProduct" class="com.how2java.action.ProductAction" method="add">
    <result name="show">show.jsp</result>
  </action>   
  <action name="listProduct" class="com.how2java.action.ProductAction" method="list">
    <result name="list">list.jsp</result>
  </action>   
 
</package>
 
</struts>

redirect为重定向操作,也就相当于跳转。

带参数跳转的话:

<action name="addPageProduct" class="com.how2java.action.ProductAction" method="addPage">
    <result name="addPage" type="redirect">addProduct.jsp?name=${name}</result>
  </action> 

在jsp中通过EL获取值

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8" isELIgnored="false"%>
 
<html>
<form action="addProduct">
 
 <input type="text" name="product.name" value="${param.name}">
    <br/>
 <input type="submit" value="submit">
</form>
</html>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值