我是网页开发人员以及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