我是網頁開發人員以及Spring MVC的新手。我正在測試控制器的一個愚蠢的例子,但是,似乎控制器從來沒有被調用過,或者至少它沒有按預期工作。Spring MVC:如何獲取控制器的正確URL?
目標是在「test.jsp」頁面中單擊一個超鏈接,並直接調用「customers.jsp」頁面,同時調用控制器,以便將消息傳遞給「customers.jsp」頁。
現在我的「customers.jsp」頁面正確顯示,但沒有顯示傳輸的消息。網址是http://localhost:8080/WebProject/view/customers.jsp
。
你能幫我找出問題嗎?我想這是因爲URL映射到控制器。但是,有沒有一種方法可以檢查控制器映射的正確URL?謝謝!
末*更新*
這個項目的結構是這樣的:
--webapp |--view |--*.jsp |--WEB-INF |--*.xml
這裏是我的代碼:
test.jsp的
<a href='<c:url value="customers.jsp"/>'>show customers</a>
或者
<a href="customers.jsp">show customers</a>
都能正常工作。
customers.jsp
<h2>return: ${list}</h2>
控制器:
@Controller
@RequestMapping("/customers")
public class MenuController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView listCustomers() {
ModelAndView model = new ModelAndView("customers");
model.addObject("list", "controller: a list of customers");
return model;
}
}
和配置:
的web.xml
<servlet>
<servlet-name>myDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myDispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
myDispatcher-servlet.xml中
<context:component-scan base-package="com.example.spring.controller" />
<context:component-scan base-package="com.example.spring.model" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/view/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
更新那些誰這篇文章後可能會看到:
確實存在通過@javafan和@Beri指示URL映射的問題。但更改url後<a href="customers">show customers</a>
我仍然收到錯誤404在http://localhost:8080/WebProject/customers
。這實際上是由包掃描錯誤引起的,所以無法找到控制器。爲了解決這個問題,只需更改行中的 「myDispatcher-servlet.xml中」 文件:
<context:component-scan base-package="com.example.spring.controller" />
<context:component-scan base-package="com.example.spring.model" />
到
<context:component-scan base-package="controller" />
<context:component-scan base-package="model" />
希望它能幫助:)
感謝您的回答!這個解釋確實有用。但是,當我將href更改爲「customers」時,我在url'WebProject/customers'處得到了404錯誤。任何建議? – Truely 2014-10-02 07:47:31
首先我將web.xml改爲/ url-pattern>改爲/* url-pattern>。這樣所有的路徑都將被映射,而不僅僅是/。 –
Beri
2014-10-02 07:52:51
其次你有像你這樣的代碼定義:。這裏讓我們假設你的控制器位於包my.app.controllers中。該行將掃描該軟件包中的所有類以搜索控制器。 –
Beri
2014-10-02 07:54:42