В web.xml
, если я указал карту сервлета с полным путем, как это:весна сервлет URL-шаблон карта не работает со звездой знак
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/view/admin</url-pattern>
</servlet-mapping>
Он отлично работает, но если я с помощью звезды знак (*) согласно the specification (глава 12.2):
в дескрипторе развертывания веб-приложений, следующий синтаксис используется для определения отображения:
- Строка, начинающаяся символом '/' и заканчивающаяся суффиксом '/ *', используется для отображения пути.
- Строка, начинающаяся с символа '*. Префикс используется как расширение. Пустая строка ("") представляет собой специальный шаблон URL, который точно сопоставляется с корнем контекста приложения , то есть запросами формы http://host:port/ /. В этом случае информация о пути - '/', а путь сервлета и путь контекста - пустая строка ("").
- Строка, содержащая только символ «/», указывает «сервлет по умолчанию» приложения . В этом случае путь сервлета является URI запроса минус путь контекста , и информация о пути имеет значение null.
- Все остальные строки используются только для точных совпадений.
Как это:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/view/*</url-pattern>
</servlet-mapping>
карта правило просто не работают, и GlassFish дает журнал как:
[glassfish 4.0] [WARNING] [] [org.springframework.web.servlet.PageNotFound] [tid: _ThreadID=19 _ThreadName=http-listener-1(2)] [timeMillis: 1422503740955] [levelValue: 900] [[No mapping found for HTTP request with URI [/view/admin] in DispatcherServlet with name 'spring']]
Что должно быть неправильно (я обнаружил, что это, пожалуйста, прочитайте на)
Дополнительная информация о Spring MVC настраиваемым и контроллер класса
Ниже еще некоторые дополнительные сведения, которые требуют комментариев.
Полный web.xml
является:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/view/*</url-pattern>
</servlet-mapping>
</web-app>
А вот spring-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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd ">
<mvc:annotation-driven></mvc:annotation-driven>
<context:component-scan base-package="com.ksider.service.searchserver.controller"></context:component-scan>
<bean id="freemarkerSettings" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/view/" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="locale">zh_CN</prop>
<prop key="url_escaping_charset">UTF-8</prop>
<prop key="whitespace_stripping">true</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="number_format">0.##</prop>
<prop key="classic_compatible">true</prop>
</props>
</property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<!-- <property name="viewNames" value="*.ftl"/> -->
<property name="contentType" value="text/html; charset=utf-8"/>
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
<property name="order" value="1"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="requestContextAttribute" value="rc"/>
</bean>
</beans>
И это контроллер:
package com.ksider.service.searchserver.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class AdminController {
@RequestMapping(value = "/view/admin", method = RequestMethod.GET)
public String getAdminPage(ModelMap modelMap){
modelMap.put("Msg","hello");
return "admin/index";
}
}
обновление Прогресс:
меня любят, что причиной этого, если я использую
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/view/*</url-pattern>
</servlet-mapping>
вместо
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/view/admin</url-pattern>
</servlet-mapping>
Некоторые, как я должен добавить префикс /view
к каждому запросу, как если Я хочу запросить http://localhost:8080/view/admin
Вместо этого я должен запросить http://localhost:8080/view/view/admin
.
Я думаю, что это очень запутанным вопрос :-(
Я просто проверить ссылку отображение сервлета и не может получить подсказку, почему это произошло. Может быть какой-то подвох Spring MVC виноват?
Таким образом, вопрос стал:?
- Что причиной этого, и что я должен сделать, чтобы избежать добавления префикса к каждому запросу
Пожалуйста, пост обработчик, который вы ожидаете обрабатывать этот запрос в вашем стеке Spring. –
В основном вы можете разместить полную конфигурацию WebMVC. –
Кажется, все в порядке (просто смотрю на код) ... вы пробовали очистить проект и перераспределить его в свой веб-контейнер? – jmcg