【问题标题】:Access to jsp path with .action postfix in struts2struts2中使用.action后缀访问jsp路径
【发布时间】:2025-12-19 15:35:09
【问题描述】:

我有一个使用struts 2.1.8 的项目。该项目是使用struts2-convention-plugin注解配置的。这是我在 web.xml 中的 struts 配置:

<filter>
  <filter-name>struts2Filter</filter-name>
  <filter-class>
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>  
    <filter-name>struts2Filter</filter-name>  
    <url-pattern>*.jsp</url-pattern>  
</filter-mapping>
<filter-mapping>   
    <filter-name>struts2Filter</filter-name>   
    <url-pattern>/struts/*</url-pattern>   
</filter-mapping>

struts.xml:

<constant name="struts.convention.default.parent.package" value="borrow-default" />
<constant name="struts.convention.package.locators" value="action" />
<constant name="struts.convention.package.locators.basePackage" value="com.abc.action" />
<constant name="struts.convention.result.path" value="/" />

A.java:

@Namespace("/regist")
public class A extends ActionSupport{
    @Action(value="/a", results = {@Result(location = "/a/test.jsp")})
    public String execute(){
        return SUCCESS;
    }
}

这就是问题所在,我可以访问 url http://localhost:8080/a/test.jsphttp://localhost:8080/regist/a.action 中的 test.jsp,但我仍然可以访问 url http://localhost:8080/a/test.action 中的同一页面。我不知道为什么会这样,我的配置或代码有什么问题?


我也尝试了一些其他的url,似乎命名空间没有生效。

【问题讨论】:

  • 你的 test.jsp 文件保存在哪里。它应该在 WEB-INF 文件夹中,然后才会受到保护。
  • @MohanaRaoSV 它不在 WEB-INF 文件夹中,我现在无法更改目录。
  • 为什么不贴包名?
  • @Roman C A类的包是com.abc.action

标签: java struts2 namespaces


【解决方案1】:

在 web.xml 你的 url 模式是这样的:

<url-pattern>/struts/*</url-pattern>

但是你被放置 jsp 并从 /a/test.jsp 获取它 检查一下...

【讨论】:

    【解决方案2】:

    我将struts升级到2.3.15.1,这个问题就消失了

    【讨论】: