2011-06-10 76 views
0

我有一個Spring MVC的Controller類(豆):如何知道@RequestMapping觸發的時刻?

@Controller 
@RequestMapping("/index.jsp") 
public class EjbCaller { 

    @Autowired 
    private InfoBean infoBean; 

    public EjbCaller() { 
     System.out.println("creating !!!!!!!!!!!!!!!!!!!!!!!!!!"); 
    } 

    @ModelAttribute("textFromService") 
    public String call() { 
     System.out.println("!!!!!!!!!!!!!!!!!!!1 gogogogog"); 
     return infoBean.getRefSampleService().doService(); 
    }  
} 

如何知道@RequestMapping( 「/ index.jsp的」)以及火災的時候我去的index.jsp?因爲我不知道我是否對@RequestMapping註釋賦予了正確的值,或者可能是@ModelAttribute出錯,因爲它不會觸發。

在我的index.jsp中,我有這樣的代碼:

<p> 
    <span>from SampleService: ${textFromService} </span> 
</p> 

關於我的用法/ settgins:

我的DispatcherServlet在web.xml中,我有,咬它不工作。我猜ModelAndView這是使用MVC的舊方法,@ModelAttribute這是我理解的一種新方法。所以這就是我使用@ModelAtrribute的原因。

我在jbossConsole輸出EJBCaller從構造函數,但不是當調用() - 方法調用,這就是爲什麼我不知道如果此方法運行與否。

回答

1

控制器是MVC方程的只是其中的一部分,你應該有:

控制器,@RequestMapping註解指出他們處理哪些URL,他們(基本上)返回意見。在Spring MVC,這些與ViewResolvers做,最簡單的就是:

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

,那麼你可以這樣做

@RequestMapping(value="/test/{myParam}", method=RequestMethod.GET) 
public ModelAndView myMethod(@PathVariable("myParam") String param) { 
    ModelAndView mv = new ModelAndView(); 
    mv.setViewName("index"); // now put index.jsp in /WEB-INF/views 
    // try passing the input back to the view so you can play around 
    // with the view/parameter handling 
    mv.addObject("variableName", param); 
} 

在Spring配置文件中,有一堆的選擇,我經常做:

<mvc:annotation-driven /> 
<bean name="someController" class="..."/> 

然後這會得到拾起。

不要忘記你的org.springframework.web.servlet.DispatcherServlet在web.xml

+0

我在web.xml中有DispatcherServlet,我有,它不起作用。我猜ModelAndView這是使用MVC的舊方法,@ModelAttribute這是我理解的一種新方法。 – ses 2011-06-14 08:43:49

0

我只是用Spring框架beginnig我用一個屢試不爽的手法:

public void anyMethod() { 
    throw new Error("You're here"); 
}
知道這是很重要的,有在J2EE應用程序沒有控制檯輸出,因爲這些應用程序在容器中運行在服務器上的某個地方。 (它甚至是Tomcat中的一個servlet)。你應該使用一些日誌記錄系統來代替STDOUT或者拋出一個錯誤(但是 - 當然 - 不是與logging系統相對的發佈版本)。

爲什麼Error?正如你現在所看到的那樣,有兩種throwables。錯誤和異常延伸RunTimeException您無需贅述。因此,您可以輕鬆發送這些拋出物,通過堆疊向上巡航並讓它們被容器捕獲並記錄。

如果您看到錯誤爲500的頁面,並且您在堆棧跟蹤消息中發現您在這裏,您已經成功設置了請求映射。它很直接,很迅速,很有風格。

+0

我有輸出有當EJBCaller從構造函數,但不是當調用() - 方法調用,這就是爲什麼我不知道這個方法是否運行。 – ses 2011-06-14 08:52:10

+0

當我使用:拋出新的錯誤(「你在這裏」);訪問我的索引時,我沒有任何錯誤。jsp頁面 – ses 2011-06-14 08:56:01

+0

所以你可以肯定的是,當你沒有看到錯誤頁面500 - 內部服務器錯誤時,沒有調用引發錯誤的代碼。錯誤不是默認捕獲的。但@RequestMapping在Spring中有點棘手和混亂(以我的愚見)。這個問題是可以理解的:當我沒有看到錯誤500時,我該怎麼做才能看到它?儘管如此,拋出一個錯誤卻是一個小柺杖。它回答了基本問題,無論是否調用代碼。 – 2011-06-15 05:23:18

相關問題