【问题标题】:SpringMVC URL-MappingSpringMVC URL 映射
【发布时间】:2020-01-05 00:30:26
【问题描述】:

我今天在 Amazon EC2 上成功部署了我的 tomcat 战争。 在我的本地机器上,以下链接:localhost:8080/login 工作正常

但在我的 EC2 实例上,链接始终必须在链接中包含 .war 名称:

http://some-amazon-link:8080/the-war-name/login

现在我正在努力在我的 Spring MVC 项目中添加“/the-war-name/”的方式和位置。

它是否在

  • web.xml
  • 意见
  • 控制器。

使用下面的代码,我可以通过以下链接访问登录: 本地主机:8080/登录 但我希望它是 localhost:8080/some-war-name/login

我尝试将 /some-war-name/ 添加到 @RequestMapping,更改调度程序

我的 login.jsp:

<html>
<head>
<title>Login ProV</title>
<link href="webjars/bootstrap/3.3.6/css/bootstrap.min.css"
    rel="stylesheet">
</head>
<body>
    <p><font color="red">${errorMessage}</font></p>


    <form action="/login" method="POST">
       <div class="form-group">
    <label for="exampleInputEmail1">Benutzername</label>
    <input name="name" type="text" class="form-control" id="exampleInputUsername1" placeholder="Benutzernamen eingeben">
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input name="password" type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>
  <input class="btn btn-primary" type="submit" />
    </form>




    <script src="webjars/jquery/1.9.1/jquery.min.js"></script>
    <script src="webjars/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</body>
</html>

我的 web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <display-name>To do List</display-name>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/todo-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

我的登录控制器

package com.mschm.login;

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.mschm.login.LoginService;

@Controller
@SessionAttributes("name")
public class LoginController {

    @Autowired
    LoginService service;

    @RequestMapping(value = "/login", method = RequestMethod.GET)

    public String showLoginPage() {
        return "login";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)

    public String handleLoginRequest(@RequestParam String name, @RequestParam String password, ModelMap model) {
        if(!service.validateUser(name, password)) {
            model.put("errorMessage", "Invalid Credentials");
            return "login";

        } else {
            model.put("name", name);
            model.put("password", password);
            return "welcome";
        }

    }

}

【问题讨论】:

  • 欢迎您!你想要什么令人困惑,但我认为你想在你的本地主机上添加战争名称。如果是这样,请将其添加到您的 web.xml 中的这一行 &lt;url-pattern&gt;/&lt;/url-pattern&gt;
  • 嗨,好的,我尝试再次使用我的 localhost 链接来解释它,现在使用上面显示的代码我可以使用“/login”访问我的 login.jsp:localhost:8080/login 我该怎么做必须更改,才能使用以下 url 访问链接:localhost:8080/foobar/login
  • 如果您将&lt;url-pattern&gt;/&lt;/url-pattern&gt; 更改为&lt;url-pattern&gt;/foobar&lt;/url-pattern&gt;,您应该会得到。
  • 很遗憾,当我这样做时,我收到 404 错误。:HTTP 状态 404 - /foobar/login type 状态报告消息 /foobar/login description 请求的资源不可用。我是否还必须将目录更改为 WEB-INF/views/foobar?

标签: spring-mvc url-mapping


【解决方案1】:

那个“/the-war-name/”

为您的应用程序称为context path

您需要将tomcat 配置为在您的情况下使用空的上下文路径。 有几种方法可以实现这一目标。

其中之一是将以下内容添加到$CATALINA_BASE/conf/server.xml

<Host name="your.host.name" >
   <Context path="" docBase="/path/to/the-war-name.war"/>
</Host>


进一步阅读:

Defining a context in Apache Tomcat 8 Configuration Reference.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 2019-09-27
    • 2013-06-13
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2012-01-20
    • 2017-09-21
    相关资源
    最近更新 更多