【问题标题】:spring servlet-mapping / url-patternspring servlet-mapping / url-pattern
【发布时间】:2016-04-19 12:05:48
【问题描述】:

我有这个 servlet 映射

<servlet-mapping>
        <servlet-name>devicesWeb</servlet-name>
        <url-pattern>*.do</url-pattern>
        <url-pattern>/device-catalogue</url-pattern>
        <url-pattern>/device-catalogue/</url-pattern>                
        <url-pattern>/device-catalogue/*</url-pattern>
        <url-pattern>/search/search.do</url-pattern>
</servlet-mapping>

使用这两种方法:

   @RequestMapping(value = "/device-catalogue", method = RequestMethod.GET)
        private String initForm(@ModelAttribute("searchForm") final SearchForm searchForm, 
                                 BindingResult result, HttpServletRequest request, Model model, Locale locale) {

            sessionHelper.checkSessionAttributes(request,  locale);
            return SEARCH_VIEW;
        }


@RequestMapping(value = { "/search/showProductDetails.do",  "/device-catalogue/{id}" },  method = { RequestMethod.GET, RequestMethod.POST })
    private String showProductDetails(@ModelAttribute("searchForm") final SearchForm searchForm, 
                              HttpServletRequest request, Model model, Locale locale) {

        StringTokenizer st = new StringTokenizer(StringEscapeUtils.escapeHtml(searchForm.getItemId()),"=");

        if (st.countTokens()>1) {

            String awardId=st.nextToken();
            String id=st.nextToken();

            Item item = deviceService.getItemByAwardId  (Long.parseLong(id), awardId);

            normalizeWebsiteURL (item);

            orderCountriesAvailability(item.getCountriesAvailability(), locale);

            model.addAttribute("item", encodeItemForHTML(item));    
        }
        return PRODUCT_DETAIL_VIEW;
    }

这个网址可以正常工作:

http://127.0.0.1:7001/eDevices/device-catalogue

但不是这个(我得到了 404)!

http://127.0.0.1:7001/eDevices/device-catalogue/16720

如果我将它添加到 web.xml 中,它可以工作

<url-pattern>/product-catalogue/16720</url-pattern>

【问题讨论】:

    标签: spring-mvc servlets url-mapping servlet-mapping


    【解决方案1】:

    不要为每个网址写一个&lt;url-pattern&gt;。使用spring mvc(DispatcherServlet)的前端控制器负责处理所有应用请求。

    为了做到这一点,在您的 web.xml 中,您需要以下内容:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    还有一个dispatcher-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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: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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
       <context:component-scan base-package="com.test" /> <!-- specify your base package instead of "com.test" -->
    
       <mvc:annotation-driven />
    
       <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="prefix" value="/WEB-INF/views/" />
              <property name="suffix" value=".jsp" />
              <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
       </bean>
    
       <mvc:resources mapping="/resources/**" location="WEB-INF/resources/" /> <!-- Not necessary but it's nice to address resources(css, images, etc) like this -->
    
    </beans>
    

    【讨论】:

    • mmm..... 这样做似乎我没有正确看到所有图像/css/样式(?)
    • 在您的WEB-INF 中创建一个resources 文件夹,在其中创建css、图像、字体等文件夹。现在,每当您想在 jsp 页面中使用任何这些资源时,请使用 jstl 的 c:url 标记。例如显示图像将如下所示:&lt;img src="&lt;c:url value="/resources/images/logo.jpeg" /&gt;"&gt;
    猜你喜欢
    • 2011-09-27
    • 2013-11-24
    • 2012-04-10
    • 2012-01-16
    • 2012-03-21
    • 2015-12-26
    • 2015-03-28
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多