2015-01-11 392 views
0

從上週五開始,我一直在修補這個錯誤,直到現在我還沒有修復它。我已經將這個SpringMVC項目基於去年曾經工作過的任務。並添加了一些新的東西。所以我有這個登錄頁面,我沒有添加安全性。我只想看看我的FrontEnd和BakcEnd是否會遇到,如果我做了交易,比如檢查用戶是否存在於數據庫中,並將其轉發到主頁面(如果有的話)。下面是一些代碼片段:SpringMVC控制器錯誤

對於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欄同樣的錯誤,試圖在控制器中創建另一個方法相同的錯誤。至於我能看到它只認可索引。所以是的,我想我需要一些幫助。按照慣例,我可以上傳您需要查看的項目中的任何文件。謝謝。

+0

檢查你的servlet映射。它只映射到'* .html',但你的控制器網址是無擴展名的。 –

回答

1

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

這意味着春天DispatcherServlet將被要求相匹配的圖案*。html的請求,但是你發送請求到應用程序登錄,這將不會被DispatcherServlet處理。

有你的問題,有兩種可能的解決方案

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

+0

嘗試了第一個解決方案。同樣的結果404.沒有通過索引。 –

1

只是一個想法:

從這個

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

的原因取出html的索引是工作您在歡迎文件列表中有index.html ,當您訪問應用程序與基地址(yourwebpage/)它看着歡迎文件列表,並試圖得到yourwebpage/index.html,你有一個「索引」和網址格式* .html的requestmapping,和它提供了index.html,並且登錄請求映射將成爲登錄。HTML

所以,如果你離開*。html的URL模式,您的網址就會是@RequestMapping的屬性 + html的

如果刪除它們將只是值的.html屬性的@RequestMapping

+0

另一個人說:P –

+0

試過這個。 404錯誤沒有通過索引控制器。 –

+0

使用/ index訪問索引頁面,或者從index.html中將Web xml中的歡迎文件列表更改爲索引 –

0

我會建議嘗試下面。

您在您的index.jsp中使用commandName="user",它有兩個屬性usernamepassword

根據您的JSP,在服務器端進行以下更改。

1你應該有具有相同屬性的路徑Java類User.java在你的index.jsp

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 
} 
+0

我已經有了一個pojo。並嘗試第2步。仍然按下登錄按鈕後。 –