Springs dispatcher servet搜索jsp页面,而不是调用控制器方法
嗨,我正在尝试验证用户身份,但它似乎调用了一个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="
<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(视图名称、区域设置);
}