所以我是Spring的新手,到目前为止我已经运行了一个连接到MongoDB数据库的简单Web API,但是我在使用.jsp或.html文件生成普通的旧视图时遇到了麻烦。我尝试了各种不同的方法:InternalResourceViewResolver
,XmlViewResolver
,返回字符串而不是ModelAndView
个对象,似乎没有什么对我有用。我有以下代码:
修改:这是我项目的git repo:https://github.com/jwallp/Spring-Test
正如上面的项目所示,我在转到/index
时收到了白标错误:
There was an unexpected error (type=Internal Server Error, status=500).
Circular view path [index]: would dispatch back to the current handler URL [/index] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
修改:所以我设法获取视图,最终通过使用加载spring.view.prefix
和spring.view.suffix
,而不是spring.mvc.view.prefix
,并因此,并且通过移动我的{从我的项目根目录到WEB-INF
内的{1}}目录。我只是想知道,如果我的<project root>/src/main/webapp/
目录包含在另一个目录中,它是否仍然按预期运行(使其内容不直接可见)?
答案 0 :(得分:4)
Spring Boot对JSP的支持有限,因为它使用了嵌入式servlet容器。来自Spring Boot reference documentation:
运行使用嵌入式servlet的Spring Boot应用程序时 容器(并打包为可执行存档),有一些 JSP支持的局限性。
使用Tomcat,如果你使用战争包装,它应该可以工作 可执行的战争将起作用,并且也可以部署到标准 容器(不限于,但包括Tomcat)。一个可执行的jar 因为Tomcat中的硬编码文件模式而无法工作。码头 目前不能用作带JSP的嵌入式容器。
Here是在spring启动应用程序中使用jsp的基本示例。
答案 1 :(得分:3)
希望您的类路径中包含JSP库。如果您使用的是maven,那么pom.xml
中的以下依赖项将包含以下内容:
<!-- For using JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- If you want to use JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
此外,您可能需要将此行放在JSP文件的顶部:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<强>更新强>
在我的环境中对GitHub上的项目进行以下更改:
src/main/webapp
。这就是它的地方。在application.properties
替换
spring.mvc.view.prefix=/WEB-INF/pages/
spring.mvc.view.suffix=.jsp
与
spring.view.prefix: /WEB-INF/pages/
spring.view.suffix: .jsp
似乎前者适用于Spring Boot 1.3,但不适用于current stable release。
答案 2 :(得分:0)
尝试以下内容:
package hello;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController
{
@RequestMapping("/")
public String index()
{
return "index";
}
}
答案 3 :(得分:0)
我们在将旧应用程序升级到Spring Boot时遇到了这个问题。我们做了什么:
上面针对application.properties
给出的前缀和后缀映射(虽然我们的前缀仅为/WEB-INF/
)。
将CSS,JavaScript,HTML文件移至resources \ static文件夹。我们为每种类型都有子目录。
使用window.open("somefile.jsp")
的地方已更改为window.open("somevalue.do")
,其中somevalue
映射到@RequestMapping
值,setViewName
代表ModelAndView
该方法的1}}映射到前一个jsp。如果有window.open("somefile.html")
我们将其更改为映射到window.open("includes/somefile.html")
,其中includes是我们的资源/静态树中的子目录。
答案 4 :(得分:0)
我几次遇到这个问题。那是因为我把/ WEB-INF / in / src / main / java文件夹。最新我在/ src / main / webapp中为INF文件创建了单独的路径,我能够正确运行我的应用程序并在浏览器中显示文本。
答案 5 :(得分:0)
我在application.properties文件中添加了一行。
server.tomcat.additional-tld-skip-patterns=hk2-utils.jar,javax.annotation-api.jar,javax.inject.jar,hk2-api.jar,config-types.jar,hk2-core.jar,hk2-config.jar,tiger-types.jar,validation-api.jar,jboss-logging.jar,classmate.jar,hk2-locator.jar,javassist.jar,hk2-runlevel.jar,class-model.jar,asm-all-repackaged.jar
然后它将运行。
答案 6 :(得分:0)
我用过mvn spring-boot:run
对我有用
答案 7 :(得分:0)
尽管我尝试了多种方法来解决此问题,但找不到完美的解决方案。
如果您使用的是Intellij IDEA:请勿尝试通过IDE的运行▶︎按钮运行Spring Boot应用程序(具有动态.jsp视图)。
$ cd {PROJECT_FOLDER}
$ ls //Make sure that you are in the same folder where pom.xml resides
and then run below command
$ mvn spring-boot:run
现在,您的应用程序应在localhost:8080上提供。
答案 8 :(得分:0)
我遇到了同样的问题,我的解决方案是更换
spring.view.prefix:/ WEB-INF / pages /
spring.view.suffix:.jsp
具有这样的配置类。它对我有用!
package com.rbc.sample.user.login.sample;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
@Configuration
public class WebConfig {
public static final String RESOLVER_PREFIX= "/WEB_INF/jsp/";
public static final String RESOLVER_SUFIX=".jsp";
@Bean
public ViewResolver viewResolver(){
UrlBasedViewResolver viewResolver=new InternalResourceViewResolver();
viewResolver.setPrefix(RESOLVER_PREFIX);
viewResolver.setSuffix(RESOLVER_SUFIX);
return viewResolver;
}
}
答案 9 :(得分:-1)
遵循jsp文件重定位可以解决此问题。我这样解决了我的问题:
将.jsp文件移动到:
"src/main/resources/META-INF/resources/WEB-INF/jsp".
确保application.properties文件包含:
spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix: .jsp
您的控制器类应为:
@Controller
public class IndexController
{
@RequestMapping("/")
public String index()
{
return "index";
}
}
如果使用的是maven,请在pom.xml中包含以下依赖项
<!-- For using JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- If you want to use JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
然后它应该工作。