一尘不染

如何使用Struts2更改默认的JSP /模板位置

jsp

我正在研究在Eclipse中使用Struts2的新Java
EE应用程序。我想将JSP文件保留在源文件夹(src/main/jsp)中,而不是WebContent。部署后,所有源文件都将复制到WebContent/WEB- INF/classes。这还具有使jsp文件直接不可访问的额外效果(我希望所有事情都需要操作干预)。这意味着要显示结果,我必须这样做:

<result name="SUCCESS">WEB-INF/classes/index.jsp</result>

是否可以设置jsp文件的默认位置,以便index.jsp足以引用它们?理想情况下,文件也应位于其中,WEB-INF/jsp并且不会与类混合。

我看到那个spring有这个功能。我希望Struts2也能做到这一点。


阅读 247

收藏
2020-06-08

共1个答案

一尘不染

您可以创建一个常量配置参数,例如

<constant name="struts.result.path" value="/WEB-INF/classes" />

然后将此常量注入自定义dispatcher结果。将此添加到默认包:

<result-types>
    <result-type name="dispatcher" default="true" class="struts.results.MyServletDispatcherResult" />
</result-types>

实现很容易,您只需在配置结果后在其位置添加前缀。

public class MyServletDispatcherResult extends ServletDispatcherResult {

    private String resultPath;

    public String getResultPath() {
        return resultPath;
    }

    @Inject(value = "struts.result.path", required = false)
    public void setResultPath(String resultPath) {
        this.resultPath = resultPath;
    }

    @Override
    public void setLocation(String location) {
        super.setLocation(resultPath+location);
    }

    public MyServletDispatcherResult() {
        super();
    }

//    @Inject
//    public MyServletDispatcherResult(String location) {
//
//        super(resultPath+location);
//    }
}

然后,您可以在结果中使用普通位置,例如

<result name="SUCCESS">/index.jsp</result>
2020-06-08