SpringMVC控制器错误

时间:2015-01-11 08:34:36

标签: java spring jsp spring-mvc servlets

自从星期五以来,我一直在修补这个错误,直到现在我还没有修好它。我已经将这个SpringMVC项目建立在我去年工作的任务上。并添加了一些新的东西。所以我有这个登录页面,我还没有添加安全性。我只想查看我的FrontEnd和BakcEnd是否会遇到交易,例如检查用户是否存在于数据库中,如果存在则将其转发到主页。以下是一些代码段:

对于TestController.java

@Controller
public class TestController {

@Autowired
private UserService userService;

@RequestMapping(value = "index")
public ModelAndView index(HttpServletRequest request, ModelMap model) {
    System.out.println("Index !");
    return new ModelAndView("index", "user", new User());
}

@RequestMapping(value = "login", method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest request,
        HttpServletResponse res) {
    System.out.println("inside login");
    String userName = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println(userName);
    System.out.println(password);

    User user = new User();
    user.setUsername(userName);
    user.setPassword(password);

    if (userService.userLogin(user)) {
        return new ModelAndView("mainpage");
    } else {
        return new ModelAndView("index");
    }
}

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<html>
<head>
<title>KSPEAK CMS V1.0</title>
<!-- Bootstrap core CSS -->
<link href="<c:url value='/resources/bootstrap/css/bootstrap.min.css'/>"
rel="stylesheet">
<!-- Custom styles for this template -->
<link href="<c:url value='/resources/bootstrap/css/signin.css'/>"
rel="stylesheet">
<body>

<div class="container">

    <form:form class="form-signin" method="POST" action="login" commandName="user"  >
        <h2 class="form-signin-heading">Please sign in</h2>
        <label for="inputUserName" class="sr-only">UserName</label> <form:input
            type="text" name="username" class="form-control" path="username"
            placeholder="UserName" required="required" autofocus="autofocus"/> <label
            for="inputPassword" class="sr-only">Password</label> <form:input
            type="password" name="password" class="form-control" path="password"
            placeholder="Password" required="required"/>
        <input class="btn btn-lg btn-primary btn-block" type="submit" value="login">
    </form:form>
</div>
</body>
</head>
</html>

我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-a      pp_2_5.xsd">

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

<servlet-mapping>
    <servlet-name>myBatisServlet</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>

我的SpringConfig.xml(我已经在这一部分修改了一些东西,因为它混淆了帖子的布局,它只是xmlns和架构位置)

<mvc:annotation-driven />

<context:component-scan base-package="com.cms.*" />

<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:hsql://localhost:9001/" />
    <property name="username" value="SA" />
    <property name="password" value="" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="com.cms.model" />
    <property name="mapperLocations" value="classpath*:com/cms/mappers/*.xml" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.cms.mappers" />
</bean>
</beans>

运行应用时。它成功加载了index.jsp并通过控制器上的第一个sysout。如下图所示:

enter image description here

我们说我已经输入了一个应该重定向到主页的现有用户。但是这里有一张enter image description here

的图片

它没有使用我放在控制器上的登录方法。

到目前为止,我所做的一些事情是添加/ @RequestMapping的值用于登录,但仍然是同样的错误。尝试手动键入登录到url栏同样的错误,试图在控制器中创建另一个方法同样的错误。至于我能看到它只识别索引。所以是的,我想我需要一些帮助。按照惯例,我可以上传您需要查看的项目中的任何文件。谢谢。

3 个答案:

答案 0 :(得分:1)

<servlet-mapping> <servlet-name>myBatisServlet</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>

这意味着将为匹配patter * .html的请求调用spring DispatcherServlet,但是您正在向应用程序发送请求作为登录,DispatcherServlet将不会处理该请求。

您的问题有两种可能的解决方案

1. Replace *.html with / in <url-pattern> 2. Change you request to match the pattern *.html

答案 1 :(得分:1)

只是一个想法:

从此

中删除.html

<servlet-mapping> <servlet-name>myBatisServlet</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>

索引工作的原因是您在欢迎文件列表index.html中 当您使用基本URL( yourwebpage / )访问应用程序时,它查看了欢迎文件列表,并尝试获取 yourwebpage / index.html ,并且您有一个请求映射“index”和url模式* .html,它给index.html,登录请求映射将成为login.html

因此,如果您保留* .html网址格式,您的网址将是@RequestMapping的属性  + .html

如果删除.html,它们只是@RequestMapping的属性

答案 2 :(得分:0)

我建议在下面试试。

您在commandName="user"中使用index.jsp,其中有两个属性usernamepassword

根据您的JSP,在服务器端进行以下更改。

1你应该有一个java类User.java,它与index.jsp

中的path具有相同的属性
class User{

     private username; // name must match path in your form inside index.jsp
     private password;
     //getter && setter

   }

2然后将此对象作为参数传递给您的登录方法

 @RequestMapping(value = "login", method = RequestMethod.POST)
public ModelAndView login( @ModelAttribute User user) {
   // do your stuff
}