struts2 2.5.16 通配符方式调用action中的方法报404

1、问题描述

在struts.xml中配置用通配符方式调用action中的add()方法,访问 http://localhost:8080/Struts2Demo/helloworld_add.action时,出现了这个熟悉的错误:

HTTP Status 404 – Not Found



Type Status Report

Message There is no Action mapped for namespace [/] and action name [helloworld_add] associated with context path [/Struts2Demo].

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.


Apache Tomcat/8.5.35

2、相关代码

struts.xml中部分相关代码

<package name="default" namespace="/" extends="struts-default">
        <action name="helloworld_*" method="{1}" class="com.icheny.action.HelloWorldAction">
            <result>/result.jsp</result>
            <result name="add">/{1}.jsp</result>
            <result name="update">/{1}.jsp</result>
        </action>
</package>

HelloWorldAction.java中部分相关代码

    public String add()
    {
        return "add";
    }

    public String update()
    {
        return "update";
    }

3、原因

  由于struts2 2.5版本的安全度提高了一个台阶,通配符禁止使用,所有不安全的访问都必须要在struts.xml中声明允许。我用的是2.5.16版本的struts,因此出现了这个错误。

4、解决方案

  在package中添加属性:strict-method-invocation="false"

  修改之后的struts.xml中的package部分代码为:

<package name="default" namespace="/" extends="struts-default" strict-method-invocation="false">
        <action name="helloworld_*" method="{1}" class="com.icheny.action.HelloWorldAction">
            <result>/result.jsp</result>
            <result name="add">/{1}.jsp</result>
            <result name="update">/{1}.jsp</result>
        </action>
</package>

  再次访问http://localhost:8080/Struts2Demo/helloworld_add.action,正常跳转:

原文地址:https://www.cnblogs.com/iCheny/p/10963050.html

时间: 2024-10-09 20:48:48

struts2 2.5.16 通配符方式调用action中的方法报404的相关文章

Action中动态方法的调用 Action中通配符的使用 Result的配置

   Action中动态方法的调用 动态方法调用(Dynamic Method Invocation,DMI) 标识符:! 一.通过以下选中的文件来查看是否禁止调用动态方法 二.在我们自定义的action类中,我们不再单一的继承来自父类的方法,我们可以自定义自己的方法 1 package cn.jbit.booklist; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class BookList extends Act

调查管理系统 -(6)自定义Struts2的拦截器&amp;自定义UserAware接口&amp;Action中模型赋值问题&amp;Hibernate懒加载问题

1.对于一些功能,如我的调查或新建调查等,只有用户登录后才能进行操作,因此必须对用户是否登录进行判断.当用户登录后才能使用相应的功能,如果没有登录则需为用户导航到登录页面让其进行登录.这个功能可以通过自定义Struts2的拦截器来完成. 2.当用户登录之后,由于是将用户的信息保存在session中的.这样当一些Action中需要用到当前登录的用户的信息时需要手动的从session中获取,不太方便,因此我们声明了一个UserAware接口(即用户关注,类似于Struts2中的SessionAwar

strut2基于XML配置方式对Action中的指定方法校验

当校验文件取名为ActionClassName-validation.xml时,会对action中的所有方法进行校验 .如果你需要对action中的某个方法实施校验,那么,校验文件的取名为 ActionClassName-ActionName-validation.xml.其中ActionName为struts.xml 中的action名字. 例如:对UserAction中的add()方法进行校验,校验文件名应该为:UserAction-user_add-validation.xml. User

Struts2中动态调用action中的方法失败的问题

解决方法: 在Struts.xml中添加该配置: <!-- 该配置设置为true可以调用动态方法 --> <constant name="struts.enable.DynamicMethodInvocation" value="true" />

Android按钮调用setOnClickListener监听方法报错的原因

先说点题外话: 早在11年就料到安卓会火,当时也想学:后来因为各种原因就没有继续学下去,其实我也知道,那些所谓的原因无非就是为自己找借口而已.整整4年,没有学成这门技术,内心还是很惭愧的.因为不懂,所以也错过了很多东西,现在有些项目不得不亲自去做,没办法找借口了!且不说安卓还能火多久,作为一个程序员,逃避最热门的技术,这是无法原谅的! 今天看的是Mars的"Android开发视频教程"第一季 01_05_Activity和Intent,使用点击监听方法的时候遇到错误提示: 回退看了下视

struts2在配置文件中调用Action的方法返回值

struts2在配置文件中可以调用Action的方法返回值 1.Action中 //文件下载名 public String getDownloadFileName(){ String downloadFileName = ""; String filename = fileName + ".xls"; try { downloadFileName = URLEncoder.encode(filename,"UTF-8"); } catch (Un

第三章Struts2 Action中动态方法调用、通配符的使用

01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问ServletAPI时实现用户会话跟踪,其简单的程序运行流程图如下 Struts2框架是基于MVC模式.基于MVC模式框架的核心就是控制器对所有请求进行统一处理.Struts2的控制器StrutsPrepareAndExecuteFilter由ServletAPI中的Filter充当,当web容器的接收到登录

Struts2 Action中动态方法调用、通配符的使用

一.Struts2执行过程图: 二.struts2配置文件的加载顺序 struts-default.xml---struts-plugin.xml---struts.xml 具体步骤: 三.Action中动态方法调用<Dynamic Method Invocation> DMI 第一种方式: 自定义DMIAction类,使它继承ActionSupport类,该类无需手动重写execute(),底层有默认实现.因此我们也可以自定义方法list. struts.xml中的action元素植入met

【SSH三大框架】Struts2基础第三篇:配置Action以及调用Action的三种方式

一.struts.xml中的包和命名空间 1.Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间. 如果在配置<package>的时候没有指定namespace属性,则该包下的所有Action处于默认的包空间下 2.例如: <package name="lee" extends="struts-default"> <action name="