2014-12-19 49 views
0

親愛的朋友們不調用方法操作名稱,動作URL在Spring MVC

我試圖執行Spring MVC的形式示例Web項目。

當我嘗試擊中帶有動作名稱的網址時,相應的視圖不會調用 ,但是如果嘗試使用視圖名稱(/viewname.html)調用URL,則會顯示它。

我已經看過很多示例,並且很想知道爲什麼我的代碼不是基於 操作名稱調用的。

我的示例代碼:

控制器:

@Controller 
@RequestMapping("/test") 
public class TestController { 

    @RequestMapping(value="/login",method = RequestMethod.GET) 
     public String login(ModelMap model){ 
      model.addAttribute("message","Welcome Jagan"); 
      return "login"; 
     } 
    } 

爲spring-servlet.xml:

我的servlet配置文件

<?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:p="http://www.springframework.org/schema/p" 
       xmlns:context="http://www.springframework.org/schema/context" 
       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"> 


       <context:component-scan base-package="controller"/> 

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

web.xml中: 我的網站的XML看起來像

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
     <display-name>SpringMVCWithJSP</display-name> 
     <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     </welcome-file-list> 
     <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>*.html</url-pattern> 
     </servlet-mapping> 
    </web-app> 

的login.jsp:有一些可喜的內容

如果我嘗試打以下網址

 http://localhost:8082/SpringMVCWithJSP/test/login  => not invoking login page. 

    ttp://localhost:8082/SpringMVCWithJSP/test/login.html => successfully invoking login page . 

我問題是爲什麼登錄操作名稱不是直接調用login.jsp,而是隻使用.../test/login.html而不是.../test/login
任何想法來解決這個朋友?

+0

因爲你映射了Servlet只響應帶'* .html'模式的請求。如果你不添加'.html'到URL,servlet將不會聽它(因爲它不匹配模式) – ochi 2014-12-19 07:57:38

回答

0

在你web.xml你有這個Servlet映射

<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

這意味着,只有那些URL調用結束.html servlet將作出迴應。所以沒有什麼可以解決的。它正在按預期工作

請注意,如果您簡單地將映射保留爲*,那麼您將迫使該servlet處理所有請求(可能會或可能不是您想要的)。這是不推薦,因爲你通常會有靜態文件(如CSS,JS,PNG等),你不希望有由servlet來處理(它會減慢你的服務器 下)

+0

嗨Ochi,謝謝你的回覆..在我的Spring MVC proj中,如果嘗試點擊url http :// localhost:8082/SpringMVCWithJSP/test/login它不會調用。在我的Spring MVC中,它應該根據操作名稱進行調用嗎?我配置的方式。如果我給擴展名確切的網址,那麼只顯示頁面而不是通過操作名稱(登錄)調用。 – Jagan 2014-12-19 09:42:21

+0

@Jagan錯誤! - 當您在彈簧配置中輸入帶有擴展名的URL時,會顯示'login.jsp'頁面:' '---- Did you try調試它?如果你在動作(登錄)中放置了一個斷點,你會發現它在調用.jsp頁面之前會通過它 – ochi 2014-12-19 15:00:40