我一直在从事一个用spring initialzr初始化的spring boot项目。生成的包没有/webapp
目录,因此必须添加/webapp>/code>文件夹。我从spring文档中读到,spring从
/static
、资源
中检测静态文件。我在索引中放置了3个不同的。jsp
测试我的控制器显示哪一个。下面是代码片段。
目录树:
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── databasedisplay
│ │ │ └── app
│ │ │ ├── AppApplication.java
│ │ │ ├── config
│ │ │ │ ├── WebAppInitializer.java
│ │ │ │ └── WebConfig.java
│ │ │ ├── controller
│ │ │ │ ├── HomeController.java
│ │ │ │ └── IndexController.java
│ │ │ ├── repository
│ │ │ └── ServletInitializer.java
│ │ ├── resources
│ │ │ ├── application.properties
│ │ │ ├── index.jsp
│ │ │ ├── static
│ │ │ │ └── index.jsp
│ │ │ └── templates
│ │ └── webapp
│ │ └── WEB-INF
│ │ └── views
│ │ └── index.jsp
│ └── test
│ └── java
│ └── com
│ └── databasedisplay
│ └── app
│ └── AppApplicationTests.java
└── target
├── classes
│ ├── application.properties
│ ├── com
│ │ └── databasedisplay
│ │ └── app
│ │ ├── AppApplication.class
│ │ ├── config
│ │ │ ├── WebAppInitializer.class
│ │ │ └── WebConfig.class
│ │ ├── controller
│ │ │ ├── HomeController.class
│ │ │ └── IndexController.class
│ │ └── ServletInitializer.class
│ ├── index.jsp
│ └── static
│ └── index.jsp
├── generated-sources
│ └── annotations
├── generated-test-sources
│ └── test-annotations
├── maven-status
│ └── maven-compiler-plugin
│ ├── compile
│ │ └── default-compile
│ │ ├── createdFiles.lst
│ │ └── inputFiles.lst
│ └── testCompile
│ └── default-testCompile
│ ├── createdFiles.lst
│ └── inputFiles.lst
└── test-classes
└── com
└── databasedisplay
└── app
└── AppApplicationTests.class
索引.jsp(在“/资源”中)
<html>
<head></head>
<body>
<h1>This is the body of the sample view in /resources</h1>
</body>
index.jsp(在'/静态')
<html>
<head></head>
<body>
<h1>This is the body of the sample view in /static</h1>
</body>
</html>
index.jsp(在'/WEB-INF/views/')
<html>
<head></head>
<body>
<h1>This is the body of the sample view in WEB-INF/views</h1>
</body>
</html>
控制器
@Controller
public class IndexController {
@RequestMapping(value = "/indexA", method = RequestMethod.GET)
public String index() {
return "index";
}
}
配置类
WebConfig.java
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver
= new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable("testServlet");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/").setCachePeriod(3600)
.resourceChain(true).addResolver(new PathResourceResolver());
}
}
WebInitializer.java
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.scan("com.databasedisplay.app");
container.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = container.addServlet("mvc", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
问题是当我使用< code>mvn spring-boot:run
或< code > mvn clean package spring-boot:run 运行时,目录树中显示的< code>\target目录没有来自< code>\WEB-INF\views\的< code>index.jsp(事实上,目标目录根本没有< code>WEB-INF目录)。但是当我< code > curl http://localhost:8080/indexA :< code >这是WEB-INF/views中的示例视图的主体时,我仍然得到以下输出
>
有人能解释一下视图解析器如何将视图名称映射到相应的视图吗?(我已经研究了<code>InternalResourceViewResolver
有人能指出mvn sping-boo: run
和mvn清洁包sping-boo: run
之间的区别吗,因为后者的目标中有WEB-INF目录。
为什么我得到了对应于< code>/WEB-INF的< code>index.jsp,但没有得到关于< code>curl的其他视图?
JSP是传统Java企业应用程序的一部分,不是Spring Boot/MVC的核心,它是更现代的模板引擎方法(尽管Spring基于JavaEE)。如果你有任何好的理由使用JSP,它可以工作。但是对于Spring,MVC方法/实现是使用更现代的模板引擎,包括Thymeleaf、FreeMarker、Groovy Markup和Mustache等技术。
问题1:您是否已配置pom。正确地说,您可以使用不同的启动器来配置应用程序的部署/运行方式。JSP不是Spring的标准解决方案,应该单独配置,它需要配置为将JSP编译到各自的位置,以便Tomcat从webapps
文件夹中读取。编译并呈现JSP的pom。xml既需要spring boot starter web
又需要tomcat嵌入jasper
,包括标记
问题2 Spring带有一个嵌入式Tomcat服务器(spring-boot-starter-web)。当您运行
mvn spring-boot: run
时,它将启动一个Tomcat服务器并将您的Spring Boot应用程序部署在Tomcatlocalhost:8080
上。mvn net
,在spring-boot: run
之前,只需通过删除构建目录来删除构建的输出。
每个问题3个。HTML模板或。JSP文件在编译前在项目中有各自的位置,所以因此有些。JSP不会在您的文件夹中编译。
Java企业应用程序及其对应的JSP使用了与Spring不同的项目结构:如果您有正确的依赖项并运行
Spring boot:run
,则所有JSP都将从“src/main/webapp/WEB-INF/JSP/”编译。如果通过cmd-jar
编译手动创建项目,则应将JSP包含在“/webapp/”文件夹和Java中。WEB-INF/classes/MyServlet.class中的类。
例如,通过使用Thymeleaf(spring boot starter Thymeleaf),如果您构建了您的工件,IDE将从<code>/resources/templates</code>编译模板,并从那里开始在MVC项目中工作,您可以无缝集成REST控制器。
Tomcat对于企业应用程序的部署方式至关重要,只是您需要在Spring中调整您的项目,以便它将正确的文件映射并编译到. WAR在部署之前。
我的建议是,对于MVC,使用模板引擎而不是遗留的JSP。当然,在Spring项目中会有JSP的用例,但它需要不同的结构和依赖关系。
有没有办法绕过授权?
我正在尝试将vaadin与spring(没有Spring Boot)和基于java注释的spring部分配置结合起来。 自动连接似乎适用于vaadin ui部分,但不适用于“自定义ui类”(例如,“公共类LoginScreen扩展自定义组件”)。我在SysOut上得到一个NPE或一个空对象。 此外,我注意到“@ComponentScan(base Packages={"net.myapp"})”没
首先要说的是,我一直在寻找解决方案,现在我非常绝望。 当由Spring Boot运行时,我无法从html页面访问css文件。 html。文件 应用JAVA 文件夹结构: 我尝试过将文件夹放入文件夹和/或删除addResourcesHandler,通过相对路径引用css和其他一些东西。似乎没有什么能解决这个问题。请告诉我,如果你试图解决这个问题,但没有找到解决方案,这样我就知道,我不会被忽视。
我将使用Ehcache和Springboot。我只是想知道在处理大量请求时,什么会是最佳配置。 在直播期间,我们可能会收到超过30000 req/h。虽然在开发中,我们无法生成此方案。 你能帮我如何计算内存,以创建一个最佳配置,应在Prod中完美工作。 我检查了Postman中的响应大小,在Dev中为3-5 kb,因此我保留了以下配置,但不确定它会有多好。我们的内存大小为2GB(在prod中,我们
问题内容: 我必须在SpringBoot应用程序中使用@PathValiable从URL获取参数。这些参数通常带有 斜线 。我无法控制用户在URL中输入的内容,因此我想获取他输入的内容,然后我就可以对其进行处理。 我已经在这里浏览过材料和答案,我认为对我而言,好的解决方案不是要求用户以某种方式对输入的参数进行编码。 SpringBoot代码很简单: 因此,URL如下所示: 问题在于,参数 modu
我尝试使用bytebuddy在springboot中实现aop。代码如下: springboot的监听器如下: 最后,在springboot启动中注册侦听器: 当我启动应用程序时,调试记录器显示良好。然而,当请求被处理时,aop不起作用。我做错了什么?我很困惑。。。
我必须在SpringBoot应用程序中使用@PathValiable从URL获取参数。这些参数通常有斜线。我没有一个关于用户将输入URL的控制,所以我想要得到他输入的内容,然后我可以处理它。 我已经看过了这里的资料和答案,我不认为对我来说,好的解决方案是要求用户以某种方式编码输入参数。