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
相关推荐
action跳转后的页面接收由上一个ACTION传过来的参数
资源中示例了一个struts2的配置文件中配置的action的result结果为另外一个action的配置,该跳转的过程中是带所有参赛调整的,在另外一个action中可以接受到当前action的所有参数,此配置文件是我日常开发中的经验...
Struts2操作同一action的不同方法跳转jar包(包括示例代码) 使用“项目名/类名!方法名.action”
struts2如何实现弹出action返回的错误信息
首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.xml的配置定位到相应的mapping (映射);接下来如果form的范围是request或者在定义的范围中找不到这个form,创建一个新的form实例;取得form...
Namespace、自定义Action、路径问题、通配符、包含模块配置文件、默认Action、接受用户输入、服务器跳转、Action中访问web元素、简单数据校验、调用Action的自定义方法 5struts2国际化 ......... 6 struts2输入校验...
我的笔记:Struts构架中action的跳转大全
此实例只适合对Struts2不了解的初学者. 工具:Eclipse+Tomcat 技术:Jsp,Struts2 步骤: 1. 创建web项目 2. 项目添加Struts2类包支持 3. 设置核心控制器(配置web.xml) 4. 创建业务逻辑控制器(Action) 5. 创建...
STRUTS2配置相信许多人都会抄, 我只好说一下它的跳转路径了,附图
目的:主要为了在一个Action成功后跳转调用另一个程序。 Struts2.xml [html] 代码如下: <?xml version=”1.0″ encoding=”UTF-8″?> <!DOCTYPE struts PUBLIC “-//Apache Software Foundation//DTD ...
3.控制器采用action开发,替代传统的servlet,直接跳转页面返回一个字符串即可,需配置struts.xml对应的jsp。 4.struts2,可以直接对表单提交的数据封装成对象,简洁!当然需要在web.xml中配置核心filter—...
JS调用Struts中的ActionJS调用Struts中的ActionJS调用Struts中的Action
struts2演示 <br>1./helloworld - helloworld 2./spring - 与spring整合 3./coc - 惯例优先配置,零配置文件 - codebehind不支持redirect,chain等操作,需要自己写jsp跳转 4./crud - CRUD,Create Read...
Struts2_04ActionResultType : Struts2关于Action跳转类型的应用 对各种不同的跳转类型使用的实例 Struts2_05Interceptor : Struts2拦截器的使用 Struts2_06FileUpload : Struts2上传文件的使用
NULL 博文链接:https://lipeixiaoyu.iteye.com/blog/626185
Struts2表单标签的应用实例。 主要功能是在一个页面提交个人信息之后跳转到另一个页面显示之前所提交的个人信息。具体介绍和功能演示请移步我的博客: http://blog.csdn.net/qq_33171970/article/details/51380991
struts 1.2 跳转后css或js 无效解决方法,不是重定向处理,可以正常使用你的action 或css 或js
从struts2.1版本开始,Convention Plugin作为替换替换Codebehind Plugin来实现Struts2的零配置。• 包命名习惯来指定Action位置• 命名习惯制定结果(支持JSP,FreeMarker等)路径• 类名到URL的约定转换• 包名...
有关struts2下载组件的具体介绍我就在此略过了,看此文的同志想必大多是碰到这样让人很是不爽的问题。 下面就将该问题的最终解决办法介绍如下。 问题概要: 在struts2中使用result里type="stream"的结果类型时,...
当一个请求符合要求时,Struts 2框架就会处理,最终跳转到“success.jsp”页 面并显示其内容,现在利用Struts 2的action标签,可以直接在页面发出该请求,并 在发送请求的页面显示“success.jsp”的内容,页面并没有...