2015-02-25 7 views
1

Когда я использую Spring MVC Я пишу методы контроллера, как это:смысл слэша («/») в пружинно-возвратного заявление MVC

@RequestMapping(value = "/get/url", method = RequestMethod.GET) 
    public String createCompanyAddPayment(HttpSession session, Model model) { 
     return "/another/jsp"; 
    } 

я заметил, что он не работает, когда я использую jetty:run из maven plugin

problem accessing /WEB-INF/pages//another/jsp.jsp. Reason: 

    /WEB-INF/pages//another/jsp.jsp 

Когда я использую tomcat - он работает хорошо.

Я понимаю эту проблему с двойной меткой ("//").

Не могли бы вы объяснить
1. Что означает ведущая косая черта в возвратном регуляторе весны?
2. Почему на tomcat он работает, но не работает на плавном причале maven?
3. Является ли это безопасность переписать оператор возврата, как это ?:

return "another/jsp"; 

P.S.

viewResolver:

<bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/pages/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 

ответ

2

При таком типе отображения возвращаемого значения представляет собой имя вида, и правильно рассуждать о разделителях вы должны рассмотреть конфигурацию ViewResolverInstance, вид URL в настоящее время монтируют

view.setUrl(getPrefix() + viewName + getSuffix()); 

, так что если у вас есть, например,

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
</beans:bean> 

ваши возвращенные имена вид должны быть без "/", если вы настроить префикс, как <beans:property name="prefix" value="/WEB-INF/views" /> вы должны использовать ведущую косую черту. Таким образом, безопасно переписывать ваши заявления о возвращении, более того, ваш случай показывает важность этого.

Относительно вашего второго вопроса. Хотелось бы приветствовать других людей, чтобы утверждать это, но, насколько я знаю, существует разница в том, как обработчики URL-адресов файлов реализованы в Jetty и Tomcat. Если у вас есть URI для веб-ресурса, наличие одиночной или двойной косой черты является существенной разницей, и и Jetty, и Tomcat совпадают с спецификацией RFC 2396. Однако, когда дело доходит до URI, обозначающего файл, Jetty кажется более строгим (лучше на мой взгляд), в то время как Tomcat считает двойные слэши действительными.

Проверить обсуждение в рамках этого вопроса Jetty https://jira.codehaus.org/browse/JETTY-386, может быть, это будет иметь больше смысла, чем

+0

публикуемых зрений resolover в вопросе. – gstackoverflow

+0

Вы не отвечаете: ** 2. Почему на tomcat он работает, но не работает на плагине для приманки? ** – gstackoverflow