2013-09-04 1 views
0

Привет Я пытаюсь аутентифицировать пользователя, но похоже, что он вызывает страницу jsp вместо другого сопоставления контроллера.Sprs dispatcher servet ищет страницу jsp вместо вызова метода контроллера

Мой диспетчеру сервлет

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${database.driver}" /> 
    <property name="url" value="${database.url}" /> 
    <property name="username" value="${database.user}" /> 
    <property name="password" value="${database.password}" /> 
</bean> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.beingjavaguys.domain.User</value> 
      <value>com.beingjavaguys.domain.Chat</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
     </props> 
    </property> 
</bean> 



<bean id="hibernateTransactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

web.xml Мой является

диспетчеру org.springframework.web.servlet.DispatcherServlet

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

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

и мой контроллер

@RequestMapping(value="/authenticate",method=RequestMethod.POST) 
    public ModelAndView getAuthenticateResult(@ModelAttribute("user") User user, 
      BindingResult result) { 
     if(userService.authenticate(user)) 
     { 
      return new ModelAndView("/userList"); 
     } 
     else{ 
     return new ModelAndView("Login"); 
     } 
    } 

@RequestMapping(value="/userList", method=RequestMethod.GET) 
    public ModelAndView getUserList() { 
     Map<String, Object> model = new HashMap<String, Object>(); 
     model.put("chat", userService.getChat()); 
     return new ModelAndView("UserDetails", model); 

    } 

Я зову authenticate.html из моего файла входа в систему с помощью POST метод, но моя проблема эта ошибка

HTTP Status 404 - /Spring-hibernate-integration-helloworld/WEB-INF/view/userList.jsp 

type Status report 

message /Spring-hibernate-integration-helloworld/WEB-INF/view/userList.html.jsp 

description The requested resource is not available. 

Почему ищет файл JSP вместо того, чтобы перенаправить его на метод контроллера? Но если я использую redirect:/userList.html, он тогда работает. Зачем стоит логика?

ответ

2

Если вы возвращаете строку, которая интерпретируется как имя представления для рендеринга. Имя представления передается no a ViewResolver (в вашем случае возможно InternalResourceViewResolver), который будет генерировать (внутренний) URL для пересылки. В этом случае это будет JSP.

В настоящее время префиксы redirect: и forward: - это 2 специальных случая. redirect: приведет к перенаправлению на клиентскую сторону на этот URL, что, в свою очередь, вызовет ваш контроллер из-за вашей конфигурации. A forward: обрабатывается на стороне сервера, а не на стороне клиента.

1

Точнее. Логика позади этого:

org.springframework.web.servlet.view.UrlBasedViewResolver 

/** 
    * Overridden to implement check for "redirect:" prefix. 
    * <p>Not possible in {@code loadView}, since overridden 
    * {@code loadView} versions in subclasses might rely on the 
    * superclass always creating instances of the required view class. 
    * @see #loadView 
    * @see #requiredViewClass 
    */ 
    @Override 
    protected View createView(String viewName, Locale locale) throws Exception { 
     // If this resolver is not supposed to handle the given view, 
     // return null to pass on to the next resolver in the chain. 
     if (!canHandle(viewName, locale)) { 
      return null; 
     } 
     // Check for special "redirect:" prefix. 
     if (viewName.startsWith(REDIRECT_URL_PREFIX)) { 
      String redirectUrl = viewName.substring(REDIRECT_URL_PREFIX.length()); 
      RedirectView view = new RedirectView(redirectUrl, isRedirectContextRelative(), isRedirectHttp10Compatible()); 
      return applyLifecycleMethods(viewName, view); 
     } 
     // Check for special "forward:" prefix. 
     if (viewName.startsWith(FORWARD_URL_PREFIX)) { 
      String forwardUrl = viewName.substring(FORWARD_URL_PREFIX.length()); 
      return new InternalResourceView(forwardUrl); 
     } 
     // Else fall back to superclass implementation: calling loadView. 
     return super.createView(viewName, locale); 
    } 
Смежные вопросы