我是使用Spring MVC开发的新手。 我试图从我的jsp文件中调用控制器。 我将requestmapping注释发送给控制器,但是当我尝试从url上的mainview.jsp调用时:(我在localhost上测试)" /AirlineDB_Spring/views/mainview.jsp" (这很好), 项目名称从网址中消失,我得到的地址给了我404:" / passenger /"我不知道为什么" AirlineDB_Spring /"从链接中消失,这看起来像是主要问题。
我的控制器代码:
@Controller
@RequestMapping(value="/passengers")
public class PassengerController{
@SuppressWarnings("unchecked")
@RequestMapping(method=RequestMethod.GET)
public String list(Model model) {
List<String> tl = new ArrayList<String>();
tl.add("one");
tl.add("two");
tl.add("three");
model.addAttribute("testlist", tl);
return "mainview";
}
我的jsp文件的代码是:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Airline Database</title>
</head>
<body>
<h2>Passengers</h2>
<a href="/passengers/">click</a>
<c:forEach items="${model.testlist}" var="test" varStatus="loopStatus">
${loopStatus.count} ${test}<br/>
</c:forEach>
</body>
</html>
我的web.xml文件:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:WEB-INF/spring/*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>airlinedb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>airlinedb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
servlet-context.xml包含:
<context:annotation-config/>
<context:component-scan base-package="airlinedb.controller"/>
<mvc:annotation-driven/>
我通过互联网搜索,发现很多与控制器映射有关的问题,但没有一个对我有用,我也尝试用href =&#34; / passenger&#34;但得到了相同的404。 我不知道我错过了哪些配置,我可以看到我得到了错误的网址,但我不知道可能出错了什么。 任何人都可以帮助我吗?
答案 0 :(得分:2)
当您执行<a href="/passengers/">
时,它会向您发送以下内容:http://localhost:8080/passengers/
。
这不是你想要的。你想要http://localhost:8080/AirlineDB_Spring/passengers/
所以,你要么使用<a href="/AirlineDB_Spring/passengers/">
或者你使用它:<a href="${pageContext.servletContext.contextPath}/passengers/">
第二种选择是更好的实践。
此外,您可以在RequestMapping中添加映射值。尝试使用如下:
@SuppressWarnings("unchecked")
@RequestMapping(value="/",method=RequestMethod.GET)
public String list(Model model) {
List<String> tl = new ArrayList<String>();
tl.add("one");
tl.add("two");
tl.add("three");
model.addAttribute("testlist", tl);
return "mainview";
}
将值=“/”添加到@RequestMapping。
答案 1 :(得分:1)
这两种情况都应该有效。您可以使用索引方法,这是默认映射。
@RequestMapping(value="/", method=RequestMethod.GET)
public String list(Model model) {
// ...
}
或者list
重命名为index
,如下所示
@RequestMapping(method=RequestMethod.GET)
public String index(Model model) {
// ...
}
答案 2 :(得分:0)
似乎是
中的第一个斜线<a href="/passengers/">click</a>
使它成为一条绝对的道路。如果删除它会起作用吗?