我们有一个遗留的web应用程序,它使用下面的url:
https://example.com/forms/forms.jsp
我们已经重写了遗留代码,以便使用带有url https://example.com/forms的spring引导web应用程序,而在url中没有.jsp扩展。
为了保持旧的url (这是业务需求),我遵循了这个Spring @PathVariable有一个点(.)被截断。但是,只有当url中有/ https://example.com/forms/forms.jsp/时,它才能工作。
我搜索了它,在堆栈溢出中找到了一些建议,并尝试了几种不同的方法。但不太好用。
最新情况:
我刚找到这篇文章在网址jsp上发表。。我从@GetMapping("/forms/{jspName:.+}")更新到@GetMapping(path = "/forms/{jspName:.+}")。这样就可以在if语句中检查pathVariable。但是,return语句不会像以前那样返回预期的forms.jsp文件;相反,它会给出404错误。
网址:http://localhost:8080/forms/forms.jsp
@GetMapping(path = "/forms/{jspName:.+}")
public String getForms(@PathVariable("jspName") String jspName) {
if (jspName.equalsIgnoreCase("forms.jsp")) {
log.debug("JSP file is {}", jspName);
return "forms";
}
return "index";
}控制台:
[nio-8080-exec-1] c.n.e.c.EthicsEmailFormController : JSP file is forms.jsp404错误:
No webpage was found for the web address: http://localhost:8080/forms/forms.jsp
HTTP ERROR 404application.properties -- forms.jsp存储在/WEB-INF/views/page/forms.jsp下。
spring.mvc.view.prefix=/WEB-INF/views/page/
spring.mvc.view.suffix=.jsp供比较:
当url是https://example.com/forms/forms.jsp/时,当url的末尾有一个/时,下面就可以工作了。但是,现有的url (在需求中指定)不包含在url末尾的/。一定是https://example.com/forms/forms.jsp。
@GetMapping("/forms/{jspName:.+}")
public String getForms(@PathVariable("jspName") String jspName) {
log.debug("Jsp file name = {} ", jspName);
return "forms";
}我看到了一些建议是删除下面的依赖。在pom.xml中,我也没有下面的依赖项。
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>有什么建议吗?非常感谢!
发布于 2022-07-05 19:57:07
由于此应用程序仅用于培训,所以我将jsp文件移至webapp/forms.forms.jsp文件夹。这样,jsp文件可以直接从下面的url访问:
https://example.com/forms/forms.jsp没有必要通过控制器。感谢我的朋友巴里的建议。谢谢!
https://stackoverflow.com/questions/72858165
复制相似问题