2013-07-11 2 views
1

Spring MVC로 개발하면서 새로 생겼습니다. jsp 파일에서 컨트롤러를 호출하려고합니다. 컨트롤러에 requestmapping 주석을 주었지만 url에서 발견 된 mainview.jsp에서 호출하려고 할 때 : (localhost에서 테스트 중입니다) "/AlineDB_Spring/views/mainview.jsp"(제대로 작동 함) , 프로젝트 이름이 URL에서 사라지고 나에게 404 : "/ passengers /"를 제공하는이 주소를 얻습니다. "AirlineDB_Spring /"이 링크에서 사라지는 이유를 모르겠지만, 이것이 주요 문제인 것처럼 보입니다.jsp의 mvc 호출 컨트롤러가 잘못된 URL을 반환합니다.

내 컨트롤러 코드 :

@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> 

서블릿-의 context.xml이 포함되어 있습니다 :

<context:annotation-config/> 
<context:component-scan base-package="airlinedb.controller"/> 
<mvc:annotation-driven/> 

인터넷을 통해 검색 한 결과 제어기 매핑과 관련하여 많은 문제가 발견되었지만 그 중 아무 작업도 수행하지 못했습니다. 또한 href = "/ passenger"로 컨트롤러를 호출했지만 404가 같았습니다. 내가 놓친 구성을 알고, 내가 잘못된 URL을 볼 수 있지만 무엇이 잘못 될지 전혀 모른다. 아무도 도와 줄 수 있습니까?

+0

리졸버를 어디에서 볼 수 있습니까? – Bnrdo

+0

이 문제는 jsp에서 비롯된 것 같습니다 : 로 리디렉션하려고 했습니까? – fxm

+0

뷰 해석기는 servlet-context.xml : 에 있습니다. \t \t <속성 이름 ="접두사 "값 ="/ 뷰/"/> \t \t <속성 이름 ="접미사 "값 ="JSP "/> \t frauneworld

답변

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

도움을 주셔서 감사합니다. :) – frauneworld

1

둘 중 하나를 사용해야합니다. 기본 매핑 인 index 메소드를 사용할 수 있습니다. 그것은 절대 경로한다

<a href="/passengers/">click</a> 

@RequestMapping(method=RequestMethod.GET) 
     public String index(Model model) { 
      // ... 
     } 
+0

두 가지 모두 사용자의 조언을 시도했지만 여전히 동일한 404 오류가 발생합니다. . 컨트롤러를 다른 방식으로 호출해야합니까? 왜냐하면 내가 부르는 URL이 이상하게 보일 때, jsp-s의 다른 URL 인 프로젝트 이름이 포함되어 있지 않기 때문에 – frauneworld

0

그것은 첫 번째 슬래시 보인다 다음과 같이

@RequestMapping(value="/", method=RequestMethod.GET) 
    public String list(Model model) { 
     // ... 
    } 

또는 대신 listindex로 이름을 바꿉니다. 제거하면 작동합니까?

관련 문제