Spring mvc Spring MVC请求未到达控制器类
我知道以前已经有人问过这个问题,但上面提到的解决方案似乎都不适合我。 我正在编写一个SpringMVCWeb应用程序。但是我的请求没有到达控制器类。 这是相关文件。 有谁能帮我指出哪里出了问题吗?谢谢 web.xmlSpring mvc Spring MVC请求未到达控制器类,spring-mvc,Spring Mvc,我知道以前已经有人问过这个问题,但上面提到的解决方案似乎都不适合我。 我正在编写一个SpringMVCWeb应用程序。但是我的请求没有到达控制器类。 这是相关文件。 有谁能帮我指出哪里出了问题吗?谢谢 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml
<?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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>booksWorld</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:**/*applicationContext.xml</param-value>
</context-param>
</web-app>
jsp(欢迎使用的jsp文件)
欢迎大家
你好,世界
login.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
<!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>Books World - Login</title>
</head>
<body>
<sf:form method="POST" action="login.do" modelAttribute="Login">
<h3>Please enter your credentials</h3>
Login Name<sf:input path="userName" />
Password<sf:password path="password" />
</br>
</br>
<input type="submit" value="Log In" />
<input type="reset" value="Reset" />
</sf:form>
</body>
</html>
图书世界-登录
请输入您的凭据
登录名
密码
我正在eclipse中开发,并使用Tomcat。服务器日志没有错误。只有标准的启动日志
请帮我指出哪里出了问题。您没有指定要点击的URL以及看到的错误或输出,因此我将查看您发布的文件。你发布的内容似乎至少有一些问题。我假设您正在尝试访问
http://[server]:[port]/index.jsp
或http://[server]:[port]/
问题1:使用MVC框架时,通常不会直接请求JSP文件等web模板。因此,web.xml
中的欢迎文件列表不应包含index.jsp
。更常见的是完全省略这一部分。相反,您应该为应用程序根添加到控制器类的请求映射,例如:
@RequestMapping("/")
public String home() { return "index"; }
完成此操作后,您应该能够点击http://[server]:[port]/并获得响应
问题2:文件index.jsp
重定向到URL继续。执行操作
,但控制器中没有此URL的映射。相反,控制器具有URL的映射procedure
。当您试图配置URL映射时,可能与Struts有些混淆
问题3:文件login.jsp
提交到login.do
,但此URL没有映射。相反,这里有一个登录的映射。因此,表单操作应该从login.do
更改为login
问题4:login.jsp
中的表单绑定到名为login
的模型属性,但控制器不添加任何具有该名称的模型对象
问题5:使用HTTP POST提交login.jsp
中的表单,但控制器没有为login
方法指定此表单。用@RequestMapping
注释的控制器方法的默认值是HTTP GET,因此在提交表单时不会调用登录
方法
问题6:文件index.jsp
似乎是多余的,因为它的唯一目的是重定向到同一服务器上的不同URL。使用以下简化的控制器代码会更好:
@Controller
public class CommonController {
@RequestMapping("/")
public String loadLoginPage(Model model) {
model.addAttribute("Login", new Login()); // Or something like this, which represents the actual model object that should collect the login information.
return "login";
}
@RequestMapping(method = RequestMethod.POST, value="/login")
public String login(Login login) {
// Use the login object to authenticate the user.
return "abc";
}
}
我还建议你遵守规定
<context:component-scan base-package="com.booksworld.controllers" />
<context:annotation-config />
<mvc:annotation-driven />
在文件dispatcherservlet.xml
中,因为这些行特定于您的表示层。Try@RequestMapping(value=“/login.do”)您尝试的URL是什么?您是否收到404或其他错误?
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
<!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>Books World - Login</title>
</head>
<body>
<sf:form method="POST" action="login.do" modelAttribute="Login">
<h3>Please enter your credentials</h3>
Login Name<sf:input path="userName" />
Password<sf:password path="password" />
</br>
</br>
<input type="submit" value="Log In" />
<input type="reset" value="Reset" />
</sf:form>
</body>
</html>
@RequestMapping("/")
public String home() { return "index"; }
@Controller
public class CommonController {
@RequestMapping("/")
public String loadLoginPage(Model model) {
model.addAttribute("Login", new Login()); // Or something like this, which represents the actual model object that should collect the login information.
return "login";
}
@RequestMapping(method = RequestMethod.POST, value="/login")
public String login(Login login) {
// Use the login object to authenticate the user.
return "abc";
}
}
<context:component-scan base-package="com.booksworld.controllers" />
<context:annotation-config />
<mvc:annotation-driven />