对于我的案例,没有找到带有URI的HTTP请求的映射

时间:2017-05-25 01:13:09

标签: java html spring tomcat

我的情况是: 我有一个主页,有一个名为"登录的链接"在我的主页上,当我点击"登录"链接,浏览器显示" HTTP状态[404] - [未找到]"。 我想要的是:当我点击"登录"链接,我希望网站直接到新页面,这是登录页面。谢谢!

homepage.jsp:



<li><a class="drop" href="#">My Account</a>
	      	<ul>
	      		<li><a href="login.html">Sign In</a></li>
	      		<li><a href="#">Create Account</a>></li>
	      	</ul>
	      </li>
&#13;
&#13;
&#13;

的web.xml:

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		 xmlns="http://java.sun.com/xml/ns/javaee" 
		 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>TooO</display-name>
  <welcome-file-list>
    <welcome-file>homepage.jsp</welcome-file>
  </welcome-file-list>

	<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>crunchify</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login.jsp</url-pattern>
        <url-pattern>/login.html</url-pattern>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    
</web-app>
&#13;
&#13;
&#13;

登录-servlet.xml中:

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 
    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
     
    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />
 
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />
 
    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/jsp/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>
    <context:component-scan base-package="com.crunchify.controller" />
</beans:beans>
&#13;
&#13;
&#13;

LoginController.java:

&#13;
&#13;
package com.crunchify.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public class LoginController {
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String init(Model model) {
        model.addAttribute("msg", "Please Enter Your Login Details");
        return "login";
    }
 
    @RequestMapping(method = RequestMethod.POST)
    public String submit(Model model, @ModelAttribute("loginBean") LoginBean loginBean) {
        if (loginBean != null && loginBean.getUserName() != null & loginBean.getPassword() != null) {
            if (loginBean.getUserName().equals("chandra") && loginBean.getPassword().equals("chandra123")) {
                model.addAttribute("msg", "welcome" + loginBean.getUserName());
                return "success";
            } else {
                model.addAttribute("error", "Invalid Details");
                return "login";
            }
        } else {
            model.addAttribute("error", "Please enter Details");
            return "login";
        }
    }
}
&#13;
&#13;
&#13;

Here is the screenshot of the 404 error web page

1 个答案:

答案 0 :(得分:0)

初始化两个 Spring Servlet - 这不是它的工作方式。

只创建一个SpringDispatcher并指定一个简单的URL模式

<servlet>
    <servlet-name>crunchify</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>crunchify</servlet-name>
    <url-pattern>/crunch/*</url-pattern>
</servlet-mapping>

现在所有对像crunch / *这样的事情的调用将被引导到Spring。

在LoginController中给出@RequestMapping

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String init(Model model) {

现在这将导致以下URL实际到达登录控制器:

/crunch/login
   ^      ^
   |      will be routed into LoginController by Spring
   will be routed to Spring by Servlet Container

现在相应地修改您的登录链接:

   <ul>
      <li><a href="crunch/login">Sign In</a></li>
      <li><a href="#">Create Account</a>></li>
   </ul>

再试一次。