struts2 访问不存在的action时,自动跳转

简介:

struts 中访问不存在的action时,默认的会显示如下页面:

 

 

这显然不友好。能不能跳转到统一的action进行处理呢?

struts 可以做到。

struts.xml配置文件如下:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6. <struts>  
  7.   
  8.     <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
  9.     <constant name="struts.devMode" value="true" />  
  10.     <constant name="struts.ui.theme" value="simple" />  
  11.     <constant name="struts.objectFactory" value="spring" />  
  12.     <constant name="struts.xwork.chaining.copyMessages" value="true" />  
  13.     <constant name="struts.multipart.maxSize" value="58871540" /><!--  
  14.         50 MB -->  
  15.   
  16.     <constant name="struts.xwork.chaining.copyErrors" value="true" />  
  17.   
  18.   
  19.   
  20.     <package name="default" namespace="/" extends="struts-default">  
  21.   
  22.         <interceptors>  
  23.             <!-- <interceptor name="authorityInterceptor"  
  24.                 class="com.shop.jn.interceptor.AuthorityInterceptor"></interceptor> -->  
  25.             <interceptor name="loggerInterceptor"  
  26.                 class="com.shop.jn.interceptor.LoggerInterceptor"></interceptor>  
  27.             <interceptor name="loginTimesLimitInterceptor"  
  28.                 class="com.shop.jn.interceptor.LoginTimesLimitInterceptor"></interceptor>  
  29.             <interceptor name="jsonIntercept"  
  30.                 class="com.shop.jn.interceptor.JSONInterceptor"></interceptor>  
  31.             <!-- minimum interceptor stack -->  
  32.             <interceptor-stack name="minStack">  
  33.                 <interceptor-ref name="defaultStack"></interceptor-ref>  
  34.                 <interceptor-ref name="loggerInterceptor"></interceptor-ref>  
  35.                 <!-- -->  
  36.             </interceptor-stack>  
  37.             <!-- authority check when access resource -->  
  38.             <interceptor-stack name="authorityStack">  
  39.                 <interceptor-ref name="defaultStack"></interceptor-ref>  
  40.                 <!-- <interceptor-ref name="authorityInterceptor"></interceptor-ref> -->  
  41.                 <interceptor-ref name="loggerInterceptor"></interceptor-ref>  
  42.             </interceptor-stack>  
  43.             <!-- <interceptor-stack name="loginTimesLimitStack"> <interceptor-ref   
  44.                 name="defaultStack"></interceptor-ref> <interceptor-ref name="loggerInterceptor"></interceptor-ref>   
  45.                 <interceptor-ref name="loginTimesLimitInterceptor"></interceptor-ref> </interceptor-stack> -->  
  46.         </interceptors>  
  47.         <default-interceptor-ref name="authorityStack"></default-interceptor-ref>  
  48.         <!-- <default-action-ref name="index" /> -->  
  49.   
  50.         <default-action-ref name="notFound" />  
  51.   
  52.         <global-results>  
  53.             <result name="error">/error.jsp</result>  
  54.             <result name="login2">/user/loginInput.jsp</result>  
  55.         </global-results>  
  56.   
  57.         <action name="notFound" class="com.shop.jn.action.error.NotFoundErrerAction">  
  58.             <result name="success">/not_found.jsp</result>  
  59.         </action>  
  60.         <!--<global-exception-mappings> <exception-mapping exception="java.lang.Exception"   
  61.             result="error" /> </global-exception-mappings> --><!--<action name="index"> <result type="redirectAction"> </result> </action> -->  
  62.     </package>  
  63.   
  64.     <package name="goods22" extends="struts-default" namespace="/goods">  
  65.         <action name="*Goods" class="{1}GoodsAction">  
  66.             <result type="redirectAction">  
  67.                 <param name="namespace">/goods</param>  
  68.                 <param name="actionName">viewGoods</param>  
  69.             </result>  
  70.             <result name="input">/input.jsp</result>  
  71.         </action>  
  72.   
  73.         <!-- this is a exception ,must not use wildcard -->  
  74.         <action name="viewGoods" class="viewGoodsAction">  
  75.             <result>/goods/viewGoods.jsp</result>  
  76.         </action>  
  77.         <action name="addInputGoods" class="addInputGoodsAction">  
  78.             <result>/goods/addGoods.jsp</result>  
  79.         </action>  
  80.   
  81.         <action name="updateInputGoods" class="updateInputGoodsAction">  
  82.             <result>/goods/addGoods.jsp</result>  
  83.         </action>  
  84.     </package>  
  85.   
  86.     <package name="supermarket22" extends="default" namespace="/supermarket">  
  87.         <action name="*Supermarket" class="{1}SupermarketAction">  
  88.             <result type="redirectAction">  
  89.                 <param name="namespace">/supermarket</param>  
  90.                 <param name="actionName">viewSupermarket</param>  
  91.             </result>  
  92.         </action>  
  93.         <!-- this is a exception ,must not use wildcard -->  
  94.         <action name="viewSupermarket" class="viewSupermarketAction">  
  95.             <result>/supermarket/viewSupermarket.jsp</result>  
  96.         </action>  
  97.   
  98.         <action name="updateInputSupermarket" class="updateInputSupermarketAction">  
  99.             <result>/supermarket/addSupermarket.jsp</result>  
  100.         </action>  
  101.     </package>  
  102.   
  103. </struts>  

 在上述struts.xml文件中,我配置了default-action-ref,默认action的名称是”notFound“,对应的Java类是”com.shop.jn.action.error.NotFoundErrerAction“:

Java代码   收藏代码
  1. package com.shop.jn.action.error;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class NotFoundErrerAction extends ActionSupport {  
  6.   
  7.     private static final long serialVersionUID = 6218614965524501080L;  
  8.     @Override  
  9.     public String execute() throws Exception {  
  10.         System.out.println("您访问的action 不存在!");  
  11.         return super.execute();  
  12.     }  
  13. }  

 访问notFound action时,跳转到的页面是:not_found.jsp,

not_found.jsp 内容如下:

Html代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  3.     pageEncoding="UTF-8"%>  
  4. <%  
  5.     String path = request.getContextPath();  
  6.     String basePath = request.getScheme() + "://"  
  7.             + request.getServerName() + ":" + request.getServerPort()  
  8.             + path + "/";  
  9. %>  
  10. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  11. <html xmlns="http://www.w3.org/1999/xhtml">  
  12. <head>  
  13. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  14. <title>Insert title here</title>  
  15. </head>  
  16. <body>  
  17. <h1>  
  18. <font color="red" >not found</font>  
  19. </h1>  
  20. </body>  
  21. </html>  

 在浏览器中显示界面如下:

 

 

继续说明struts.xml文件:

package goods22继承了struts-default(struts默认的package),命名空间是”/goods“;而package supermarket22 继承了default(default中配置了默认的action),命名空间是”/supermarket“。

default 是我自定义的package。

 

我们在浏览器地址栏中输入:http://localhost:8080/shop_goods/supermarket/xxx.action

上述url对应的action是不存在的!

结果如下:

 达到了我们的需求。

 

但是我 在浏览器地址栏中输入:
http://localhost:8080/shop_goods/goods/xxx.action
  时,结果如下:

没有达到我们的需求,为什么没有跳转到默认action呢?

因为上述url对应的命名空间(namespace)是/goods,而该package 并没有继承default package。访问http://localhost:8080/shop_goods/supermarket/xxx.action 就可以到达默认action,因为supermarket 继承了default package 。

如何解决上述问题呢?

方式一

删除package default 的namespace,这样不论package 目录结构如何只要找不到action,就会跳转到默认daction;

struts.xml 部分代码如下:

Xml代码   收藏代码
  1. <package name="default"  extends="struts-default">  
  2.   
  3.         <interceptors>  
  4.             <!-- <interceptor name="authorityInterceptor"  
  5.                 class="com.shop.jn.interceptor.AuthorityInterceptor"></interceptor> -->  
  6.             <interceptor name="loggerInterceptor"  
  7.                 class="com.shop.jn.interceptor.LoggerInterceptor"></interceptor>  
  8.             <interceptor name="loginTimesLimitInterceptor"  
  9.                 class="com.shop.jn.interceptor.LoginTimesLimitInterceptor"></interceptor>  
  10.             <interceptor name="jsonIntercept"  
  11.                 class="com.shop.jn.interceptor.JSONInterceptor"></interceptor>  
  12.             <!-- minimum interceptor stack -->  
  13.             <interceptor-stack name="minStack">  
  14.                 <interceptor-ref name="defaultStack"></interceptor-ref>  
  15.                 <interceptor-ref name="loggerInterceptor"></interceptor-ref>  
  16.                 <!-- -->  
  17.             </interceptor-stack>  
  18.             <!-- authority check when access resource -->  
  19.             <interceptor-stack name="authorityStack">  
  20.                 <interceptor-ref name="defaultStack"></interceptor-ref>  
  21.                 <!-- <interceptor-ref name="authorityInterceptor"></interceptor-ref> -->  
  22.                 <interceptor-ref name="loggerInterceptor"></interceptor-ref>  
  23.             </interceptor-stack>  
  24.             <!-- <interceptor-stack name="loginTimesLimitStack"> <interceptor-ref   
  25.                 name="defaultStack"></interceptor-ref> <interceptor-ref name="loggerInterceptor"></interceptor-ref>   
  26.                 <interceptor-ref name="loginTimesLimitInterceptor"></interceptor-ref> </interceptor-stack> -->  
  27.         </interceptors>  
  28.         <default-interceptor-ref name="authorityStack"></default-interceptor-ref>  
  29.         <!-- <default-action-ref name="index" /> -->  
  30.   
  31.         <default-action-ref name="notFound" />  
  32.   
  33.         <global-results>  
  34.             <result name="error">/error.jsp</result>  
  35.             <result name="login2">/user/loginInput.jsp</result>  
  36.         </global-results>  
  37.   
  38.         <action name="notFound" class="com.shop.jn.action.error.NotFoundErrerAction">  
  39.             <result name="success">/not_found.jsp</result>  
  40.         </action>  
  41.         <!--<global-exception-mappings> <exception-mapping exception="java.lang.Exception"   
  42.             result="error" /> </global-exception-mappings> --><!--<action name="index"> <result type="redirectAction"> </result> </action> -->  
  43.     </package>  

 

方式二

让所有的package 都继承我自定义的package default

相关文章
|
前端开发 Java 程序员
SpringMVC实现对页面的访问和跳转~
SpringMVC实现对页面的访问和跳转~
|
Java
Struts2中的跳转、package标签、挎包重定向、全局跳转
Struts2中的跳转、package标签、挎包重定向、全局跳转
108 0
Struts2中的跳转、package标签、挎包重定向、全局跳转
【JavaWeb】简易权限校验、Filter-程序跳转
本期主要介绍简易权限校验、Filter-程序跳转
107 0
【JavaWeb】简易权限校验、Filter-程序跳转
web利用redirect登录后返回之前的页面
web利用redirect登录后返回之前的页面
239 0
|
XML 前端开发 数据格式
Struts2里面灵活action跳转
Struts2里面灵活action跳转
224 0
|
网络安全
SSH框架整合遇到的错误——Struts2.5 action跳转出现错误
错误信息如图: 刚开始以为是struts2的配置问题,就换了一下action的值,改成了login1之后才发现错误。 表单提交的跳转信息: Struts2.xml中的配置 UserAction.java中的配置   action的跳转方法不能有参数,手误写了参数,导致action找不到login1方法。
1384 0