2015-01-11 4 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 (I «Я отредактировал некоторые вещи на этой части, потому что это противоречит макету сообщения, это всего лишь места 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

Допустим, я вошел существующего пользователя он должен перенаправлять на MainPage. Но вот фотография того, что он делает enter image description here

Это не метод входа, который я разместил на контроллере.

Что-то, что я сделал до сих пор, добавляет/к значению @RequestMapping для входа в систему, но все та же ошибка. Пробовал вручную вводить логин в строку URL-адреса той же самой ошибки, попытался создать другой метод в контроллере с той же ошибкой. Насколько я вижу, он распознает только индекс. Так что да, я думаю, мне нужна помощь. Как обычно, я могу загрузить любые файлы из моего проекта, которые вам нужно увидеть. Благодарю.

+0

Check ваше отображение сервлетов. Он отображается только в '* .html', но ваши URL-адреса контроллера не имеют расширения. –

ответ

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

Просто идея:

Удалите .html из этого

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

причине индекс работал в что у вас есть в списке приветственных файлов index.html и когда вы доступ к приложению с базовым url (yourwebpage/) он просмотрел список файлов приветствия и попытался получить yourwebpage/index.html, и у вас есть запрос на сопоставление «index» и url pattern * .html и он дает index.html, и имя пользователя loginMapping станет логином.HTML

Так что, если вы оставите * .html шаблон URL-адрес, ваши адреса будет значение атрибут @RequestMapping + .html

если вы удалите .html они будут только значение атрибут @RequestMapping

+0

что сказал другой парень: P –

+0

Пробовал этот. Ошибка 404 не прошла через указательный контроллер. –

+0

Доступ к индексной странице с помощью/index или изменение списка файлов приветствия в веб-xml из index.html, чтобы индекс –

0

Я предлагаю попробовать ниже.

Вы используете commandName="user" в своем index.jsp, который имеет два атрибута username и password.

В соответствии с вашим 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. Еще после нажатия кнопки входа в систему. –

Смежные вопросы