当前位置: 首页 > 知识库问答 >
问题:

如何获得注册。jsp视图是否在浏览器中正确显示?

储臻
2023-03-14

我遵循本教程,了解Spring Boot Web应用程序中的登录和注册功能:https://hellokoding.com/registration-and-login-example-with-spring-security-spring-boot-spring-data-jpa-hsql-jsp/

我无法正确显示视图,而不是注册。jsp视图页面中,我在屏幕上看到以下字符串,该字符串由我的GET注册控制器方法返回:https://ibb.co/XXXtdSZ

我是Java和Spring Boot的新手,对JSP更是新手。我正在使用IntelliJ Community Edition 2017 . 3 . 5,我收到了一个通知。不支持jsp文件。在此之后,https://stackoverflow.com/a/36572413/11451547,我去设置-文件类型- HTML下的可识别的文件类型,我添加了一个新的注册模式。*jsp,覆盖jsp文件的现有注册模式(仅语法突出显示)。这条信息。jsp不被支持消失了,但是我仍然不能正确地看到视图页面。

在我的registration.jsp中,我看到了许多“命名空间,如‘表单’未绑定”的通知。在我的login.jsp中,也有同样的显示问题(在屏幕上我看到了字符串‘login’而不是log in视图),我有一个通知——“命名空间‘c’没有被绑定”。

你能就如何正确显示视图提供一些想法吗?

非常感谢。

这是我的控制器的相应部分(也许我在两次GET注册中添加了@门属性是错误的,这是我对教程代码所做的修改的一部分,但是例如我的GET登录控制器方法与教程中的相同):

@GetMapping("/registration")
    public String registration(Model model) {
        model.addAttribute("userForm", new User());

        return "registration";
    }

@PostMapping("/registration")
    public String registration(@ModelAttribute("userForm") User userForm, @ModelAttribute("roleId") Long roleId, BindingResult bindingResult) { //diff w tutorial
        userValidator.validate(userForm, bindingResult);
//        userValidator.validate(roleId, bindingResult);

        if (bindingResult.hasErrors()) {
            return "registration";
        }
        userService.saveUser(userForm, roleId);

        securityService.autoLogin(userForm.getUserName(), userForm.getPasswordConfirm());

        return "redirect:/welcome";
    }

    @GetMapping("/login")
    public String login(Model model, String error, String logout) {
        if (error != null)
            model.addAttribute("error", "Your username and/or password is invalid.");

        if (logout != null)
            model.addAttribute("message", "You have been logged out successfully.");

        return "login";
    }

    @GetMapping({"/", "/welcome"})
    public String welcome(Model model) {
        return "welcome";
    }

我的注册.jsp:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<c:set var="contextPath" value="${pageContext.request.contextPath}">

<!DOCTYPE html>
<html lang="en">
  <head>
      <meta charset="utf-8">
      <title>Create an account</title>

      <link href="${contextPath}/resources/css/bootstrap.min.css" rel="stylesheet">
      <link href="${contextPath}/resources/css/common.css" rel="stylesheet">
  </head>

  <body>
    <div class="container">
        <form:form method="POST" modelAttribute="userForm" modelAttribute="roleId" class="form-signin">
            <h2 class="form-signin-heading">Create Your Account</h2>
            <spring:bind path="userName">
                <div class="form-group ${status.error ? 'has-error' : ''}">
                    <form:input type="text" path="userName" class="form-control" placeholder="Enter your username"
                                autofocus="true"></form:input>
                    <form:errors path="userName"></form:errors>
                </div>
            </spring:bind>

            <spring:bind path="password">
                <div class="form-group ${status.error ? 'has-error' : ''}">
                    <form:input type="password" path="password" class="form-control" placeholder="Enter your password"></form:input>
                    <form:errors path="password"></form:errors>
                </div>
            </spring:bind>

            <spring:bind path="passwordConfirm">
                <div class="form-group ${status.error ? 'has-error' : ''}">
                    <form:input type="password" path="passwordConfirm" class="form-control"
                                placeholder="Confirm your password"></form:input>
                    <form:errors path="passwordConfirm"></form:errors>
                </div>
            </spring:bind>

            <button class="btn btn-lg btn-primary btn-block" type="submit">Submit</button>
        </form:form>
    </div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="${contextPath}/resources/js/bootstrap.min.js"></script>
  </body>
</html>

我的login.jsp:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<c:set var="contextPath" value="${pageContext.request.contextPath}"/>

<!DOCTYPE html>
<html lang="en">
  <head>
      <meta charset="utf-8">
      <title>Log in with your account details</title>

      <link href="${contextPath}/resources/css/bootstrap.min.css" rel="stylesheet">
      <link href="${contextPath}/resources/css/common.css" rel="stylesheet">
  </head>

  <body>
    <div class="container">
      <form method="POST" action="${contextPath}/login" class="form-signin">
        <h2 class="form-heading">Log In</h2>
        <div class="form-group ${error != null ? 'has-error' : ''}">
            <span>${message}</span>
            <input name="userName" type="text" class="form-control" placeholder="Enter your username"
                   autofocus="true"/>
            <input name="password" type="password" class="form-control" placeholder="Enter your password"/>
            <span>${error}</span>
            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

            <button class="btn btn-lg btn-primary btn-block" type="submit">Log In</button>
            <h4 class="text-center"><a href="${contextPath}/registration">Create an Account</a></h4>
        </div>
      </form>
    </div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="${contextPath}/resources/js/bootstrap.min.js"></script>
  </body>
</html>

My welcome.jsp:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="contextPath" value="${pageContext.request.contextPath}"/>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Welcome</title>

    <link href="${contextPath}/resources/css/bootstrap.min.css" rel="stylesheet">
</head>

<body>
  <div class="container">
    <c:if test="${pageContext.request.userPrincipal.name != null}">
        <form id="logoutForm" method="POST" action="${contextPath}/logout">
            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
        </form>

        <h2>Welcome ${pageContext.request.userPrincipal.name} | <a onclick="document.forms['logoutForm'].submit()">Logout</a></h2>
    </c:if>
  </div>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  <script src="${contextPath}/resources/js/bootstrap.min.js"></script>
</body>
</html>

我的应用程序.yml文件的相应部分:

spring:
  main:
    banner-mode: 'off'
  datasource:
    url: jdbc:mysql://localhost:3306/inspire_me_db?useSSL=false
    username: springuser
    password: ThePassword
  jpa:
    hibernate:
      ddl-auto: update
  flyway:
    baselineOnMigrate: true
  mvc:
    view:
      prefix: /
      suffix: .jsp
  messages:
    basename: validation

我的pom.xml的相应部分:

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
</dependency>

我的包装结构:

https://ibb.co/Qr2dmNr

共有1个答案

颛孙英才
2023-03-14

您能否尝试注册您的jsp视图解析器,如下所示:

@Configuration
@EnableWebMvc
@ComponentScan
public class MvcConfiguration implements WebMvcConfigurer
{
    @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);
    }
}

或者,您也可以通过在<code>应用程序中提供以下内容,在Spring Boot中指定jsp作为视图解析器。属性或yml:

spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp

验证提供的前缀是否指向jsp文件所在的正确目录。通常jsp文件放在src/main/WEB_INF/view下。

此外,由于您使用的是spring-boot,如果您没有合适的依赖项来编译< code>jsp,请将以下内容添加到pom中:

<!-- 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>
 类似资料:
  • 我有一个从数据库中检索图像路径的程序。程序正在eclipse浏览器中成功检索图像,但未在任何web浏览器中检索。我有3页,第一页。登录名。jsp 2。指数jsp 3。LoginServlet。Java语言

  • 问题内容: 用户请求一些页面,我想(在服务器端)知道他/她的浏览器中的语言是什么。因此,我可以使用正确的消息来呈现模板。 在客户端,这很容易: 问题答案: 您可以使用 req.headers [“ accept-language”] 来获取用户在浏览器中设置的语言/语言环境。 为了获得更轻松的支持,您可能需要研究一个语言环境模块。

  • 问题内容: 我使用Eclipse进行Java开发: 用于Web开发人员的Eclipse Java EE IDE。 版本:Indigo Service Release 1内部版本号:20110916-0149 当前,如果文件中存在语法错误,则“ 导航器” 视图不会显示小错误符号(红色背景上的白色 x )。 我用一个带有单个Java类的小型Java项目进行了测试。有意创建的语法错误导致在条目 存在的问

  • 我使用Tomcat8和Struts1.3。10 当我执行我的应用程序时 http://127.0.0.1:8080/appli/welcome.jsp 我的浏览器里有这个 控制台中的消息: 2016-01-21 15:20:39调试模块TILS:171-获取路径/通用/身份验证/登录的模块名称。do 2016-01-21 15:20:39调试模块ILS:196-找到的模块名称:默认2016-01-

  • 问题内容: 我正在使用Django REST框架,并且一直在尝试创建一个返回少量信息的视图,并将其注册到我的路由器上。 我有四个存储信息的模型,并且所有模型都有一个字段。我正在尝试创建一个视图,该视图在单个视图中返回最新的对象(基于),其中仅返回四个创建时间。 因此,视图中可能的JSON输出看起来像 我也希望在路由器上注册该视图,以便在加载API根目录时它与其余的端点一起出现。 这是我尝试使用的四

  • 问题内容: 我需要一些返回布尔值的函数来检查浏览器是否为Chrome。 如何创建此类功能? 问题答案: 更新:以获取更新的处理方式。以下答案可能仍然有效,但可能会在其他浏览器中引发误报。 但是,如前所述,用户代理可以被欺骗,因此在处理这些问题时总是最好使用功能检测,如其他答案所述。