`

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

阅读更多

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

 

 

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

struts 可以做到。

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>

	<constant name="struts.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />
	<constant name="struts.ui.theme" value="simple" />
	<constant name="struts.objectFactory" value="spring" />
	<constant name="struts.xwork.chaining.copyMessages" value="true" />
	<constant name="struts.multipart.maxSize" value="58871540" /><!-- 
		50 MB -->

	<constant name="struts.xwork.chaining.copyErrors" value="true" />



	<package name="default" namespace="/" extends="struts-default">

		<interceptors>
			<!-- <interceptor name="authorityInterceptor"
				class="com.shop.jn.interceptor.AuthorityInterceptor"></interceptor> -->
			<interceptor name="loggerInterceptor"
				class="com.shop.jn.interceptor.LoggerInterceptor"></interceptor>
			<interceptor name="loginTimesLimitInterceptor"
				class="com.shop.jn.interceptor.LoginTimesLimitInterceptor"></interceptor>
			<interceptor name="jsonIntercept"
				class="com.shop.jn.interceptor.JSONInterceptor"></interceptor>
			<!-- minimum interceptor stack -->
			<interceptor-stack name="minStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="loggerInterceptor"></interceptor-ref>
				<!-- -->
			</interceptor-stack>
			<!-- authority check when access resource -->
			<interceptor-stack name="authorityStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<!-- <interceptor-ref name="authorityInterceptor"></interceptor-ref> -->
				<interceptor-ref name="loggerInterceptor"></interceptor-ref>
			</interceptor-stack>
			<!-- <interceptor-stack name="loginTimesLimitStack"> <interceptor-ref 
				name="defaultStack"></interceptor-ref> <interceptor-ref name="loggerInterceptor"></interceptor-ref> 
				<interceptor-ref name="loginTimesLimitInterceptor"></interceptor-ref> </interceptor-stack> -->
		</interceptors>
		<default-interceptor-ref name="authorityStack"></default-interceptor-ref>
		<!-- <default-action-ref name="index" /> -->

		<default-action-ref name="notFound" />

		<global-results>
			<result name="error">/error.jsp</result>
			<result name="login2">/user/loginInput.jsp</result>
		</global-results>

		<action name="notFound" class="com.shop.jn.action.error.NotFoundErrerAction">
			<result name="success">/not_found.jsp</result>
		</action>
		<!--<global-exception-mappings> <exception-mapping exception="java.lang.Exception" 
			result="error" /> </global-exception-mappings> --><!--<action name="index"> <result type="redirectAction"> </result> </action> -->
	</package>

	<package name="goods22" extends="struts-default" namespace="/goods">
		<action name="*Goods" class="{1}GoodsAction">
			<result type="redirectAction">
				<param name="namespace">/goods</param>
				<param name="actionName">viewGoods</param>
			</result>
			<result name="input">/input.jsp</result>
		</action>

		<!-- this is a exception ,must not use wildcard -->
		<action name="viewGoods" class="viewGoodsAction">
			<result>/goods/viewGoods.jsp</result>
		</action>
		<action name="addInputGoods" class="addInputGoodsAction">
			<result>/goods/addGoods.jsp</result>
		</action>

		<action name="updateInputGoods" class="updateInputGoodsAction">
			<result>/goods/addGoods.jsp</result>
		</action>
	</package>

	<package name="supermarket22" extends="default" namespace="/supermarket">
		<action name="*Supermarket" class="{1}SupermarketAction">
			<result type="redirectAction">
				<param name="namespace">/supermarket</param>
				<param name="actionName">viewSupermarket</param>
			</result>
		</action>
		<!-- this is a exception ,must not use wildcard -->
		<action name="viewSupermarket" class="viewSupermarketAction">
			<result>/supermarket/viewSupermarket.jsp</result>
		</action>

		<action name="updateInputSupermarket" class="updateInputSupermarketAction">
			<result>/supermarket/addSupermarket.jsp</result>
		</action>
	</package>

</struts>

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

package com.shop.jn.action.error;

import com.opensymphony.xwork2.ActionSupport;

public class NotFoundErrerAction extends ActionSupport {

	private static final long serialVersionUID = 6218614965524501080L;
	@Override
	public String execute() throws Exception {
		System.out.println("您访问的action 不存在!");
		return super.execute();
	}
}

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

not_found.jsp 内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<h1>
<font color="red" >not found</font>
</h1>
</body>
</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 部分代码如下:

<package name="default"  extends="struts-default">

		<interceptors>
			<!-- <interceptor name="authorityInterceptor"
				class="com.shop.jn.interceptor.AuthorityInterceptor"></interceptor> -->
			<interceptor name="loggerInterceptor"
				class="com.shop.jn.interceptor.LoggerInterceptor"></interceptor>
			<interceptor name="loginTimesLimitInterceptor"
				class="com.shop.jn.interceptor.LoginTimesLimitInterceptor"></interceptor>
			<interceptor name="jsonIntercept"
				class="com.shop.jn.interceptor.JSONInterceptor"></interceptor>
			<!-- minimum interceptor stack -->
			<interceptor-stack name="minStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="loggerInterceptor"></interceptor-ref>
				<!-- -->
			</interceptor-stack>
			<!-- authority check when access resource -->
			<interceptor-stack name="authorityStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<!-- <interceptor-ref name="authorityInterceptor"></interceptor-ref> -->
				<interceptor-ref name="loggerInterceptor"></interceptor-ref>
			</interceptor-stack>
			<!-- <interceptor-stack name="loginTimesLimitStack"> <interceptor-ref 
				name="defaultStack"></interceptor-ref> <interceptor-ref name="loggerInterceptor"></interceptor-ref> 
				<interceptor-ref name="loginTimesLimitInterceptor"></interceptor-ref> </interceptor-stack> -->
		</interceptors>
		<default-interceptor-ref name="authorityStack"></default-interceptor-ref>
		<!-- <default-action-ref name="index" /> -->

		<default-action-ref name="notFound" />

		<global-results>
			<result name="error">/error.jsp</result>
			<result name="login2">/user/loginInput.jsp</result>
		</global-results>

		<action name="notFound" class="com.shop.jn.action.error.NotFoundErrerAction">
			<result name="success">/not_found.jsp</result>
		</action>
		<!--<global-exception-mappings> <exception-mapping exception="java.lang.Exception" 
			result="error" /> </global-exception-mappings> --><!--<action name="index"> <result type="redirectAction"> </result> </action> -->
	</package>

 

方式二

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

  • 大小: 164.3 KB
  • 大小: 13.1 KB
  • 大小: 16 KB
  • 大小: 143.8 KB
0
0
分享到:
评论

相关推荐

    struts2 action跳转action传参数

    在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。下面将详细介绍如何在Struts2中实现Action...

    Struts2从一个带参数action跳转到另一个action

    资源中示例了一个struts2的配置文件中配置的action的result结果为另外一个action的配置,该跳转的过程中是带所有参赛调整的,在另外一个action中可以接受到当前action的所有参数,此配置文件是我日常开发中的经验...

    Struts2简单的页面跳转示例

    在"Struts2简单的页面跳转示例"中,我们通常会有一个Action类,这个类需要继承自Struts2提供的ActionSupport类或者自定义一个基类。Action类中的方法对应用户请求的URL,当用户发起请求时,Struts2框架会根据配置...

    struts2 跳转至404 页面的解决方案

    在使用Struts2的过程中,可能会遇到一个常见的问题,即应用试图跳转到一个不存在的页面,导致用户看到404错误。404错误通常表示服务器无法找到请求的资源,这可能是由于URL配置错误、控制器映射问题或者资源实际不...

    struts2 result转向到action

    这里定义了一个名为 `login` 的 Action,当表单提交到 `/login.action` 时,Struts2 将会调用 `action.LoginAction` 类来处理这个请求。如果 `LoginAction` 返回 `"success"`,那么根据配置的 `redirect-action` ...

    Struts2操作同一action的不同方法跳转jar包(包括示例代码)

    本资源提供了关于如何在Struts2中操作同一Action的不同方法并进行页面跳转的详细知识,下面将深入探讨这一主题。 首先,了解Struts2的配置方式。在Struts2的配置文件(如struts.xml或struts.properties)中,我们...

    struts2 中路径无法跳转的问题

    当遇到“Struts2中路径无法跳转的问题”时,这通常与配置、Action类、结果类型或JSP页面的设置有关。以下是一些可能导致问题的关键知识点: 1. **Struts2配置文件**: - 配置文件通常为`struts.xml`,这是定义...

    Struts2 in action(struts2实战)

    作为一个基于Action和基于拦截器的框架,Struts2提供了丰富的功能,使得开发者能够构建可维护、可扩展的Web应用。下面我们将深入探讨Struts2的主要特性、工作原理以及如何在实际开发中运用。 1. **核心概念**: - ...

    一个struts的action跳转大全

    如果`form`的范围是`request`,或者当前范围内不存在这样的`form`对象,则会创建一个新的`form`实例。之后,会调用`form`对象的`reset()`方法对表单数据进行初始化处理,然后将表单中的参数填充到`form`对象中。如果...

    Struts2 in action

    当用户通过浏览器发送请求时,Struts2会将请求转发给相应的Action处理。 - **执行流程**: - 用户发起HTTP请求。 - 请求被Struts2的前端控制器(FilterDispatcher)拦截。 - FilterDispatcher根据配置找到对应的...

    Struts2中实现页面的跳转

    在Struts2框架下使用`&lt;jsp:forward/&gt;`进行页面跳转时,可能会遇到“404 Not Found”错误,即“no found”的问题。这个错误通常是由于配置不正确或者路径解析不准确导致的。 首先,我们需要理解Struts2的工作原理。...

    Struts2 Action参数详细说明

    在Struts2中,Action的配置和使用方式有多种,下面将详细介绍Struts2 Action参数的详细说明。 首先,我们来看Action的配置格式。在Struts2的配置文件(通常是struts.xml)中,Action的基本配置结构如下: ```xml ...

    Struts2 in action中文版+配套源代码

    5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认的表达式语言,用于在Action与视图之间传递数据,支持动态属性访问和方法调用。 6. **插件系统**:Struts2拥有丰富的插件库,如Tiles、...

    STRUTS2跳转示意图

    在Struts2中,Action是一个实现了`com.opensymphony.xwork2.Action`接口或者继承自`org.struts2.StrutsAction`的类。这个类包含了处理用户请求的方法,通常被称为execute方法。当一个HTTP请求到达服务器,Struts2...

    Struts2 in action 中文版

    《Struts2 in Action》中文版是一本深入探讨Struts2框架的专业书籍,该书不仅提供了详尽的理论知识,还包含了大量的实战案例,对于希望掌握Struts2框架的开发者来说,是一本不可或缺的参考书。 ### Struts2框架概览...

    解决使用struts2 时 访问web工程首页问题

    错误信息通常为:“There is no Action mapped for namespace / and action name.”,这意味着Struts2在尝试处理请求时找不到对应的Action映射。此外,如果设置了默认的欢迎页面(welcome file),但在启动应用后...

    Struts 标签 页面跳转 数据库操作

    在JSP页面上使用这些标签时,可以添加私有属性,并通过Eclipse等IDE自动生成对应的getter和setter方法,以方便在Action类中访问和处理用户输入。 二、页面跳转 在Struts中,页面跳转主要通过ActionForward或...

    struts1跳转大全

    本文将深入解析Struts1中的五种不同类型的跳转方法,这包括了完整action、仅有Form的action、仅有Action的action、仅有JSP的action以及两个action对应一个form的情况。 ### 完整的action 在Struts1中,一个完整的...

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者可以 inject 恶意代码。这个漏洞影响了 Struts2 的所有版本。 S2-017 漏洞是由于 Struts2 的 DefaultActionMapper 的 ...

Global site tag (gtag.js) - Google Analytics