2013-04-30 2 views
0

나는 web.xml 파일이 있습니다스프링은 JSP에서 컨트롤러를 어떻게 사용할 것인지 알 수 있습니까?

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<!-- Dispatching handled by StaticFilter --> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

내가 디스패처-servlet.xml 파일이 있습니다

@Controller 
public class AlertsController { 

    protected final Log logger = LogFactory.getLog(getClass()); 

    @Autowired 
    private AlertManager alertManager; 

    @RequestMapping("/alerts") 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     // display in view 
     logger.info("Returning alerts view"); 

     List<Alert> alerts = alertManager.getAlerts(); 
     request.setAttribute("alerts", alerts); 

     return new ModelAndView(); 
    } 

    public void setAlertManager(AlertManager alertManager) { 
     this.alertManager = alertManager; 
    } 
} 

그리고 내가 가진 :

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

    <context:annotation-config/> 

    <!-- Activates scanning of @Repository --> 
    <context:component-scan base-package="com.pronto.mexp" /> 

    <!-- View Resolver for JSPs --> 
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="requestContextAttribute" value="rc"/> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
     <property name="prefix" value="/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 
</beans> 

내가 AlertsController이 있습니다 alerts.jsp의 this :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

<h3>ALERTS</h3> 

<table border="1"> 
<c:forEach var="alert" items="${alerts}"> 
    <tr> 
    <td>${alert.hostname}</td> 
    <td>${alert.message}</td> 
    <td>${alert.program}</td> 
    <td><fmt:formatDate value="${alert.date}" dateStyle="medium"/></td> 
    </tr> 
</c:forEach> 
</table> 

하지만 앱을 시작하고 브라우저에서 localhost : 8080/alerts.jsp를 가리키면 "ALERTS"헤더 만 표시됩니다. 그것은 Spring이 AlertsController를 사용하는 것을 모르는 것과 같습니다. 내가 중요한 설정을 빠뜨리는 것을 알고 있지만 나는 그것을 볼 수 없다.

답변

2

당신이하고있는 것과는 정반대입니다. 어떤 컨트롤러를 사용해야 할지를 아는 JSP가 아니지만 Controller는 렌더링 할 뷰 (JSP)를 알고 있습니다. 컨트롤러는 @RequestMapping 속성에 정의 된 url 매핑에 의해 실행됩니다. JSP에 직접 액세스하면 스프링을 전혀 통하지 않습니다. 따라서 대신 URL http://localhost:8080/context/alerts을 사용하여 context을 웹 응용 프로그램의 컨텍스트 경로로 바꾸십시오.

<!-- Configures the @Controller programming model --> 
<mvc:annotation-driven/> 

을 그래서 심지어 내가 localhost:8080/alerts에서 브라우저를 지적 할 때 (나는 어떤 컨텍스트가 없기 때문에 :

+0

감사를 방지하기 위해 WEB-INF에 넣어 더 나은 액세스 할 수 있는지

<property name="prefix" value="/"/> 

그래서 루트에서 JSP 파일을 가하고 있습니다! 또 하나의 질문 - 웹 앱의 컨텍스트 경로는 어디에서 찾을 수 있습니까? – barclay

+0

'localhost : 8080/alert.jsp'로 JSP에 접근 할 수 있다면 비어 있습니다. 하지만 대개 응용 프로그램을 배포 할 때이를 구성합니다. – NilsH

0

내 동료 내 디스패처-servlet.xml 파일도 내 컨트롤러에 주석을 검색하기 위해 MVC 명령 누락 된 지적 경로 구성), 여전히 실패했습니다. 일단 mvc 명령을 추가하면 컨트롤러가 호출되고 동적 내용이 jsp로 전송됩니다.

+0

하지만 제 동료가 SO 계정을 등록하기를 거부 한 후 응답의 절반 동안 @NilsH에 대한 크레딧을 제공 할 것입니다. 왜 IDK인가! – barclay

0

한 줄 답변 : 당신은/알림

을 alerts.jsp하지 당신이 전화를해야 잘못된 방법으로 그것을 요구하고 있지만 컨트롤러에 의해 값을 설정하지 않고 직접 JSP 호출하기 때문에 당신은 왜,이 빈 페이지를 받고, 당신은 그것을 직접 액세스를

<property name="prefix" value="/WEB-INF/jsps/"/> 
+0

컨트롤러가 호출되지 않아서 빈 페이지가 나타납니다. 상기 내 대답을 참조하십시오. 하지만 당신 앞에서 NilsH가 언급했듯이 나는 그것을 틀리게/뒤로 생각하고있었습니다. – barclay

+0

컨트롤러가 "/ 경고"를 수신하는 동안 "/alerts.jsp"를 호출하기 때문에 "컨트롤러가 호출되지 않았습니다."@RequestMapping ("/ alerts") –

+0

죄송 합니다만, 위의 답변에서 언급했듯이 나는 아직도 "/ 경고"라고 불렀다. Spring은 컨트롤러에 대한 주석을 찾지 못하기 때문에 컨트롤러가 호출되지 않았다. – barclay

관련 문제