首先检查并验证所有资源是否保存在正确的目录中。对于 spring-boot,jsp 页面将保存在该目录中src->main->webapp->WEB-INF->view->*.jsp
.
使用嵌入式 tomcat 时,您应该在 pom 中添加以下依赖项才能正确编译 jsp:
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- To compile JSP files -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
现在我们需要告诉 spring jsp 文件所在的位置,我们可以有两种方法:
在 application.properties 中添加条目
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
在这里我们可以指定 jsp 文件所在的文件夹,并定义视图。
或者
配置InternalResourceViewResolver以提供JSP页面
@Configuration
@EnableWebMvc
@ComponentScan
public class MvcConfiguration extends WebMvcConfigurerAdapter
{
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
registry.viewResolver(resolver);
}
}
Now for 注册 servlets :
ServletRegistrationBean
用于注册 ServletServlet 3.0 +容器。我们需要创建一个 beanServletRegistrationBean
在我们的 JavaConfig.查找 ServletRegistrationBean 的一些用于配置 Servlet 的方法。设置Servlet():设置要注册的 servlet。addUrlMappings():添加 Servlet 的 URL 映射。设置启动时加载:设置启动时加载 Servlet 的优先级。
假设我们有两个 ServletHelloCountryServlet
and HelloStateServlet
然后我们将使用 ServletRegistrationBean 在 Spring Boot 中注册它们,如下所示:
@Configuration
public class WebConfig {
@Bean
public ServletRegistrationBean<HttpServlet> countryServlet() {
ServletRegistrationBean<HttpServlet> servRegBean = new ServletRegistrationBean<>();
servRegBean.setServlet(new HelloCountryServlet());
servRegBean.addUrlMappings("/country/*");
servRegBean.setLoadOnStartup(1);
return servRegBean;
}
@Bean
public ServletRegistrationBean<HttpServlet> stateServlet() {
ServletRegistrationBean<HttpServlet> servRegBean = new ServletRegistrationBean<>();
servRegBean.setServlet(new HelloStateServlet());
servRegBean.addUrlMappings("/state/*");
servRegBean.setLoadOnStartup(1);
return servRegBean;
}
}
我们为每个 Servlet 创建一个Servlet注册Bean豆。
Servlet 类将如下所示:
public class HelloCountryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
doGet(request,response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h3>Hello India!</h3>");
}
}
这是一种方法。
另一种方法在 spring-boot 中注册 servlet 是使用注释:@ServletComponentScan and @WebServlet. @ServletComponentScan
在Spring Boot中将扫描带有注释的Servlet@WebServlet
, 过滤器注释为@WebFilter
和听众注释@WebListener
注释@ServletComponentScan用于类级别的JavaConfig。 @ServletComponentScan 扫描 Servlet、过滤器和监听器仅使用嵌入式 Web 服务器。找到带有 @WebServlet 注释的 Servlet。
所以越早HelloCountryServletservlet 可以提供为:
@WebServlet(urlPatterns = "/country/*", loadOnStartup = 1)
public class HelloCountryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
doGet(request,response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h3>Hello India!</h3>");
}
}
并提供 ServletComponentScan 注释,例如:
@ServletComponentScan
@SpringBootApplication
public class SpringBootAppStarter {
public static void main(String[] args) {
SpringApplication.run(SpringBootAppStarter.class, args);
}
}