java - Spring移动重定向404错误

标签 java spring spring-mvc thymeleaf

我正在构建具有不同布局的网站的移动版本。我正在使用 Spring mobile+Thymeleaf。出于测试目的,我从主网站重定向到移动版本。这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >


<display-name>Student Accounting site</display-name>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>studentacc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>studentacc</servlet-name>
    <url-pattern>/</url-pattern>
    <url-pattern>/m/*</url-pattern>
</servlet-mapping>
<filter>
    <filter-name>deviceResolverRequestFilter</filter-name>
    <filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class>
</filter>

</webapp>

这是我的 servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:mvc="http://www.springframework.org/schema/mvc"

       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/mvc
         http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

    <context:annotation-config/>
    <context:component-scan base-package="org.something.webversion"/>

    <mvc:annotation-driven>
        <mvc:argument-resolvers>
            <bean class="org.springframework.mobile.device.site.SitePreferenceWebArgumentResolver" />
            <bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

    <!--Thymeleaf beans init:START-->
    <bean id="templateResolver"
          class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".html"/>
        <property name="templateMode" value="HTML5"/>
        <property name="characterEncoding" value="UTF-8"/>
    </bean>

    <bean id="templateEngine"
          class="org.thymeleaf.spring4.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver"/>
        <property name="additionalDialects">
            <set>
                <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/>
            </set>
        </property>
    </bean>

    <!--Thymeleaf beans init:END-->     

    <!--Other beans init:START-->
    <mvc:interceptors>
        <!-- Resolve the device which has generated the request -->
        <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" />

        <!-- User's site preference -->
        <bean class="org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor" />

        <!-- Redirects users to the device specific site -->
        <bean class="org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor" factory-method="urlPath">
            <constructor-arg value="/m" />
        </bean>
    </mvc:interceptors>

    <bean id="liteDeviceDelegatingViewResolver" class="org.springframework.mobile.device.view.LiteDeviceDelegatingViewResolver">
        <constructor-arg>
            <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
                <property name="templateEngine" ref="templateEngine"/>
                <property name="characterEncoding" value="UTF-8"/>
            </bean>
        </constructor-arg>
        <property name="mobilePrefix" value="mobile/" />
        <property name="enableFallback" value="true" />
    </bean>
    <!--Other beans init:END-->

    <mvc:resources mapping="/resources/*" location="resources/"/>

</beans>

还有矿井 Controller :

public class MainController {
    private static final Logger logger = Logger.getLogger(MainController.class.getName());

@RequestMapping(value = "/")
public String HelloWorld(Model model,Device device){
    logger.info("Device is "+device);
    if(device.isNormal()){
        return "hello";
    }
    return "index";
}

}

我的 webapp 文件夹如下所示: WEB-INF--- | 页面--- | 移动的 - - | 索引.html

所以,重定向工作正常,我被重定向到移动版本。但我重定向到的页面不存在(404)。我只是看不到错误。预先感谢您。

最佳答案

“旋转”重定向至 sitename:8080/studentacc/m 的 url,因为“studentacc”很可能是应用程序服务器中您的应用程序的名称,因此它必须是第一部分。

从对 API 的简短了解来看,我会尝试使用 SiteSwitcherHandlerInterceptor.urlPath(String mobilePath, String rootPath)带有 rootPath

附加参数的方法
<bean class="org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor" factory-method="urlPath">
     <constructor-arg value="/m" />
     <constructor-arg value="/studentacc" />
</bean>

关于java - Spring移动重定向404错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28124104/

相关文章:

java - 处理异常情况下的 Http 请求

java - 如何在 Spring HandlerInterceptorAdapter 中将 header 添加到 http 响应?

java - 我的 JDBC 连接可能有问题?

java - 从 JSP 获取 EntityManger 和 UserTransaction 的最佳实践

java - Spring Batch + Spring API REST

java - 在 Controller 或服务中进行验证?

java - 抽象类和 Spring MVC @ModelAttribute/@RequestParam

java - Infinispan分布式任务执行

java - 查找HashMap中存储的字符的索引值

java - 为什么 RestTemplate 会消耗过多的内存?