我开发了带有jar包装的小型spring boot应用程序。应用程序用例是,用户将登录到应用程序,它将显示欢迎页面。下面是我的代码。
主类
package com.ibm.heathcare;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages= {"com.ibm.heathcare.*"})
public class HeathcareappApplication {
public static void main(String[] args) {
SpringApplication.run(HeathcareappApplication.class, args);
}
}
登录控制器类
package com.ibm.heathcare.controller;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import com.ibm.heathcare.modal.Login;
import com.ibm.heathcare.modal.User;
import com.ibm.heathcare.service.AuthService;
@Controller
@SessionAttributes({"userName","uid"})
public class LoginController {
@Autowired
AuthService authService;
@RequestMapping("/login")
public String showLoginPage(ModelMap model){
//model.addAttribute("login", new Login());
return "login";
}
@RequestMapping("/logout")
public String showLogoutPage(ModelMap model){
model.put("message", "Successfully Log out...");
return "redirect:/login";
}
@RequestMapping("/welcome")
public String showWelcomePage(ModelMap model) {
return "welcome";
}
@RequestMapping(value="/login" ,method=RequestMethod.POST)
public String showwelcomePage(@RequestParam String uid, @RequestParam String pwd,ModelMap model){
Optional<User> optUser=authService.getAuthenticate(uid, pwd);
if(optUser.isPresent()) {
User user=optUser.get();
model.put("userName", user.getUserName() );
model.put("uid", user.getUserId());
return "welcome";
}else {
model.addAttribute("login", new Login("",""));
model.addAttribute("errorMessage",new String("Invalid Credential"));
return "login";
}
}
}
登录。jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="post">
User ID :<input type="text" name="uid"/><p>
Password:<input type="password" name="pwd"/><br>
<input type="submit" value="Login" />
</form>
</body>
</html>
welcome.jsp
<%@ include file="common/header.jspf" %>
<%@ include file="common/navigation.jspf" %>
<div class="jumbotron text-center" >
<h1>Welcome<h1><p>
<h2> ${userName} </h2>
</div>
<%@ include file="common/footer.jspf" %>
application.properties
#Server Configuration
server.port = 8282
#ViwResolver
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.ibm</groupId>
<artifactId>heathcare</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>heathcareapp</name>
<description>Health Care Management Application</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.6</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap-datepicker</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
现在,当我通过eclipse执行这个应用程序时,它工作得很好。我使用在目标文件夹中创建的maven工具构建了一个jar应用程序。我已经使用命令行从目标文件夹执行了应用程序jar。它工作得很好。但当我将同一个jar复制到机器上的另一个文件夹并尝试使用java-jar应用程序执行时。jar命令并点击urlhttp://localhost:8282/login在浏览器中,它为我提供了状态代码为404的白标签错误页面。我不确定这个申请有什么问题。我在网上搜索了很多东西,一些专家建议在主类中显式地使用basepackage信息编写@ComponentScan。我也这么做了,但对我来说不起作用。在控制台中,我得到下面的日志。
2020-07-10 10:38:52.605 INFO 11788 --- [ task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-07-10 10:38:53.888 INFO 11788 --- [ main] DeferredRepositoryInitializationListener : Spring Data repositories initialized!
2020-07-10 10:38:53.918 INFO 11788 --- [ main] c.ibm.heathcare.HeathcareappApplication : Started HeathcareappApplication in 24.424 seconds (JVM running for 25.755)
2020-07-10 10:39:18.728 INFO 11788 --- [nio-8282-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-07-10 10:39:18.729 INFO 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-07-10 10:39:18.730 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : Detected StandardServletMultipartResolver
2020-07-10 10:39:18.783 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data
2020-07-10 10:39:18.784 INFO 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 54 ms
2020-07-10 10:39:18.901 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : GET "/login", parameters={}
2020-07-10 10:39:18.916 DEBUG 11788 --- [nio-8282-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.ibm.heathcare.controller.LoginController#showLoginPage(ModelMap)
2020-07-10 10:39:19.022 DEBUG 11788 --- [nio-8282-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, application/xhtml+xml, image/webp, application/xml;q=0.9, */*;q=0.8]
2020-07-10 10:39:19.022 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.view.JstlView : View name 'login', model {}
2020-07-10 10:39:19.043 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.view.JstlView : Forwarding to [/WEB-INF/jsp/login.jsp]
2020-07-10 10:39:19.160 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND
2020-07-10 10:39:19.163 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : "ERROR" dispatch for GET "/error", parameters={}
2020-07-10 10:39:19.168 DEBUG 11788 --- [nio-8282-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)
2020-07-10 10:39:19.664 DEBUG 11788 --- [nio-8282-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, text/html;q=0.8]
2020-07-10 10:39:19.684 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet : Exiting from "ERROR" dispatch, status 404
请帮我找出问题所在。
首先,您试图使用jar提供jsp
视图。Spring Boot文档本身提供了jsp
与jar打包不匹配的信息。因此,将包装从jar更改为war
。然后,确保jsp文件被放置在WEB-INF
下,就像您在应用程序中提供的那样。属性
。最可能的问题是,jsp没有包含在jar中,因为它位于WEB-INF
文件夹中。
问题是,当您使用java-*。jar
要部署springboot应用程序,jsp文件将不会出现在嵌入式tomcat中,并且在尝试服务请求时,您将得到一个404未找到的页面
。这是因为jar打包,jsp文件没有从WEB-INF
文件夹中复制。如果在使用jar
作为打包时将jsp文件保存在META-INF/resources
文件夹下,它应该可以工作。
相关:为什么Spring Boot不支持jsp,而如果我们添加适当的jar引用,它可以呈现页面
我正在处理一个Spring boot项目,我使用了JSP文件并提供了Whitelabel错误页面。有一个意外的错误(type=Not ville, status=404)。 我已经将JSP放在/src/main/webapp/pages/中,并且已经用应用程序属性给出了路径。 这有几个模块,主要组件不包括Spring Boot依赖性,它只包括所需的特定模块。从其他模块继承的代码已用于Spring
我在路径“/test”中有一个无用的endpoint: 我这样测试: 但我得到一个断言错误: 预期状态代码 这发生在更多的代码中:400,500...除了200。 我用的是Spring靴。如果在运行测试时在endpoint方法中放置断点,则执行将停止,因此测试中的请求将正确完成。如果我将状态代码(在资源和测试中也是)更改为200,则测试通过。 到底发生了什么?
问题内容: 我试图按照此链接中的建议将错误返回到对控制器的调用,以便客户端可以采取适当的措施。javascript通过jqueryAJAX调用控制器。仅在不将状态设置为error的情况下,我才可以重新获得Json对象。这是示例代码 如果没有设置状态码,我会得到Json。如果设置状态代码,则会返回状态代码,但不会返回Json错误对象。 更新 我想将Error对象作为JSON发送,以便可以处理ajax
我试图使一个API工作在springstart但是当我输入请求:http://localhost:8080/employee/all我得到这个结果: 它是一个经典的服务,包含一个模型、一个服务、一个存储库、一个映射器和一个异常(如果没有员工),使用的数据库是sql中的实体,如下所示 服务: 仓库 模型 制图员 例外 波姆。xml
我得到一个AWS错误代码:SignatureDoesNotMatch,状态代码:403时,试图通过亚马逊SES发送邮件。 我已经确认我正在使用通过https://console.aws.amazon.com/iam/home?#users创建的正确凭据,错误仍然存在。 我假设我在iam/home上创建的凭据实际上是全局的,但我不知道我进一步做错了什么。整个错误是: AWS错误代码:Signatur
我正试图从GKE重新部署到Digital Ocean。我遇到了一个问题,来自letsencrypt的挑战。我相信K8s告诉我找不到路线。letsencrypt试图完成挑战并失败的两个主机名/域是SendGrid使用的CNAMES。我真的不知道从哪里开始故障排除,我的谷歌功能让我失望。 我的配置图如下所示: