Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Springs dispatcher servet搜索jsp页面,而不是调用控制器方法_Spring_Spring Mvc - Fatal编程技术网

Springs dispatcher servet搜索jsp页面,而不是调用控制器方法

Springs dispatcher servet搜索jsp页面,而不是调用控制器方法,spring,spring-mvc,Spring,Spring Mvc,嗨,我正在尝试验证用户身份,但它似乎调用了一个jsp页面,而不是另一个控制器映射 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${database.driver}" /> <property name="url" value="

嗨,我正在尝试验证用户身份,但它似乎调用了一个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>
我的调度器servlet是

<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>

<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>
我的控制器是

<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>
@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);

    }
为什么它要搜索jsp文件而不是将其重定向到控制器方法?
但是,如果我使用
重定向:/userList.html
它就会工作。它背后的逻辑是什么?

如果返回一个字符串,该字符串被解释为要呈现的视图的名称。视图的名称被传递给
viewsolver
(在您的情况下可能是
internalresourceviewsolver
),它将生成一个要转发到的(内部)URL。在本例中,这将是一个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>

现在
重定向:
转发:
前缀是两种特殊情况。
重定向:
将导致客户端重定向到该URL,该URL将根据您的配置调用您的控制器。转发:在服务器端而不是客户端处理。

如果返回的字符串被解释为要渲染的视图的名称。视图的名称被传递给
viewsolver
(在您的情况下可能是
internalresourceviewsolver
),它将生成一个要转发到的(内部)URL。在本例中,这将是一个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>

现在
重定向:
转发:
前缀是两种特殊情况。
重定向:
将导致客户端重定向到该URL,该URL将根据您的配置调用您的控制器。转发:在服务器端处理,而不是在客户端。

确切地说。其背后的逻辑是:

<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>
org.springframework.web.servlet.view.UrlBasedViewResolver

/**
*重写以实现对“重定向:”前缀的检查。
*在{@code loadView}中不可能,因为已重写
*子类中的{@code loadView}版本可能依赖于
*超类始终创建所需视图类的实例。
*@see#loadView
*@see#requiredViewClass
*/
@凌驾
受保护视图createView(字符串viewName、区域设置)引发异常{
//如果此解析器不应处理给定视图,
//返回null以传递给链中的下一个解析器。
如果(!canHandle(视图名称、区域设置)){
返回null;
}
//检查特殊的“重定向:”前缀。
if(viewName.startsWith(重定向\ URL \前缀)){
String redirectUrl=viewName.substring(REDIRECT_URL_PREFIX.length());
RedirectView视图=新的RedirectView(redirectUrl、isRedirectContextRelative()、isRedirectHttp10Compatible());
返回applyLifecycleMethods(视图名称、视图);
}
//检查特殊的“转发:”前缀。
if(viewName.startsWith(转发\ URL \前缀)){
String forwardUrl=viewName.substring(FORWARD_URL_PREFIX.length());
返回新的InternalResourceView(forwardUrl);
}
//否则返回到超类实现:调用loadView。
返回super.createView(视图名称、区域设置);
}

准确地说是。其背后的逻辑是:

<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>
org.springframework.web.servlet.view.UrlBasedViewResolver

/**
*重写以实现对“重定向:”前缀的检查。
*在{@code loadView}中不可能,因为已重写
*子类中的{@code loadView}版本可能依赖于
*超类始终创建所需视图类的实例。
*@see#loadView
*@see#requiredViewClass
*/
@凌驾
受保护视图createView(字符串viewName、区域设置)引发异常{
//如果此解析器不应处理给定视图,
//返回null以传递给链中的下一个解析器。
如果(!canHandle(视图名称、区域设置)){
返回null;
}
//检查特殊的“重定向:”前缀。
if(viewName.startsWith(重定向\ URL \前缀)){
String redirectUrl=viewName.substring(REDIRECT_URL_PREFIX.length());
RedirectView视图=新的RedirectView(redirectUrl、isRedirectContextRelative()、isRedirectHttp10Compatible());
返回applyLifecycleMethods(视图名称、视图);
}
//检查特殊的“转发:”前缀。
if(viewName.startsWith(转发\ URL \前缀)){
String forwardUrl=viewName.substring(FORWARD_URL_PREFIX.length());
返回新的InternalResourceView(forwardUrl);
}
//否则返回到超类实现:调用loadView。
返回super.createView(视图名称、区域设置);
}