我有一个使用Maven构建的Spring MVC的网络应用程序。当我生成JAR文件的应用程序启动就好了。控制器是执行,但当我达到这一部分:
@RequestMapping(value = "/test-block", method = RequestMethod.GET)
public ModelAndView block(Model model) {
return new ModelAndView("templates/test-block");
}
我得到这个错误:
There was an unexpected error (type=Not Found, status=404).
/WEB-INF/templates/test-block.jsp
请注意,在IDE中调试或运行效果良好。
我的文件夹:
src
|--main
|--java
|--com.xxx // sources
webapp
|--WEB-INF
|--templates
|--*.jsp // jsp files
resources
|--application.properties
我的应用程序属性:
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
我检查了生成的JAR文件,在任何地方都看不到WEB-INF。
编辑:
POM文件:
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
Spring Boot查找网页的资源文件夹。Webapp文件夹不在Spring Bootapp的类路径中。您需要使用maven插件将您的webapp文件夹复制到jar/war文件中。它在IDE中工作,因为它确切地知道在哪里可以找到网页。
请参考有关提供静态内容的Spring Boot文档。
值得注意的是:
默认情况下,Spring Boot从类路径中的 /static(或 /public或 /resources或 /META-INF/resources)目录或ServletContext的根目录中提供静态内容。它使用来自Spring MVC的ResourceHttpRequest estHandler,这样您就可以通过添加自己的WebMvcConfigrer并覆盖addResourceHandler方法来修改该行为。
...
您还可以使用spring.resources.static-locations属性(用目录位置列表替换默认值)自定义静态资源位置。
...
如果应用程序打包为jar,请不要使用src/main/webapp目录。尽管这个目录是一个通用的标准,但它只适用于war打包,并且如果生成jar,大多数构建工具都会忽略它。
所以,你看到的是预期的行为。您可以将模板移动到其中一个预期位置、自定义默认位置或使用war打包。
您应该为Web应用程序创建一个. war
而不是. jar
,您将看到WEB-INF文件夹。
也改变
spring.mvc.view.prefix=/WEB-INF/
到spring.mvc.view.prefix=/WEB-INF/templates
和
ModelAndView(“模板/测试块”)
到ModelAndView(“测试块”)
以解决404错误。
但是当我进行构建时,它无法编译一些引用webapp/WEB-INF/lib文件夹的jar的类。我不能将这些JAR作为依赖项包含在pom.xml中。 如何告诉maven在构建类和创建WAR时也包含WEB-INF/Lib JAR?
我正在开发一个由以下结构组成的web应用程序: 在此输入图像说明 当我执行mvn clean package时,webapp中没有文件打包到jar中。
我是Java开发的新手,这里有一个问题:我生成了web应用程序 ,然后我添加了文件夹和简单的文件。通过命令在my localhost:8080/manager中,我可以看到我的web应用程序,但是我如何在其中添加我的jar文件呢?
我在webapp/WEB-INF/lib/文件夹下添加了一个依赖项。 当我使用maven构建时,我希望在war中将它复制到WEB-INF/lib,而不是WEB-INF/classes/WEB-INF/lib。我正在寻找这是使用maven本身来完成的。 我已经在pom文件中提到了打包作为战争,但是依赖项没有被复制。我是不是在pom文件里漏掉了什么。我已经复制了下面的pom: 附上战争内容截图。
我创建了一个带有pom文件的webapp java项目。然后我键入“mvn eclipse: eclipse”并将其导入eclipse。 (顺便说一句,您通常如何将java项目直接导入eclipse?我总是发现eclipse:eclipse工作得很好,只是我必须额外执行以下步骤才能键入eclipse:eclipse) 然后在eclipse中,我编辑并编译了项目,一切正常。但是,当我在eclipse
正在寻找旧JSF页面的解决方案。我试图使用contains方法根据另一列是否包含单词red box来呈现组合框。 这一个工作和组合框被禁用。 但是,我也想在值不包含红色框时渲染它们,但随后将启用combox。 这是行不通的。 因此,我如何测试的任何想法都不包含特定的单词。我还尝试了choose test when,但由于第一个表。col4值只是一个空字符串。 有什么想法吗?谢谢。