在两个DispatcherServlet中找不到带有URI的HTTP请求的映射

时间:2017-11-20 02:59:24

标签: spring spring-mvc

我的web.xml将dispatcher-servlet url模式声明为:

<!-- root context -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
</servlet>

<!-- admin context -->
<servlet>
    <servlet-name>adminServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/admin-context.xml</param-value>
        </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>adminServlet</servlet-name>
    <url-pattern>/admin/</url-pattern>
</servlet-mapping>

两个servlet映射文件描述为

 <!--servlet-context.xml for appServlet-->
<annotation-driven />
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/view/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>
<!--admin-context.xml for adminServlet-->
<annotation-driven />
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/view/admin/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

我为测试编写了两个控制器。一个是好的,但另一个遇到“错误”

@Controller("admin.IndexController")
@RequestMapping("/admin")
public class AdminIndexController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
    ... 
    return "index";         
    //I thought this location will be /myContext/WEB-INF/view/admin/index.jsp
    //and it run well
    }
}

但是下面的控制器找不到它的下一页。

@Controller
@RequestMapping("/admin")
public class AddCategoryController {
    @RequestMapping(value={"/category/add"}, method=RequestMethod.GET)
    public String form(Model model){
         ...
        return "addCategory"; 
        //I thought the location will be /myContext/WEB-INF(/view/admin/category/)index.jsp
        //but Spring forwarded to /myContext/WEB-INF/view/addCategory.jsp

    }
}

如果我将代码写为“return admin / index;”这没问题。

但我认为AddCategoryController必须由adminServlet和admin-context.xml处理。 因为AddCategoryController调用addCategory.jsp作为相对路径的方式,所以它们都应该在同一条路径上。但我遇到了失败......你能告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

您只需注册一次servlet即可实现一切。不知道为什么要两次注册DispatcherServlet。您可以将根jsp文件夹路径设置为“/ WEB-INF / view /”,然后在代码中,您可以移动到子文件夹中的不同jsps,例如/admin/index.jsp

相关问题