0

我在 web.xml 中有这个:

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

我在 dispatcher-servlet.xml 中有这个:

<?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 中有这个:

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

我在 alerts.jsp 中有这个:

<%@ 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 一样。我知道我遗漏了一些关键配置,但我看不到它。

4

3 回答 3

1

你做的与你应该做的相反。不是 JSP 知道要使用哪个控制器,而是控制器知道要呈现哪个视图 (JSP)。控制器由它的 url 映射执行,该映射在@RequestMapping属性中定义。当您像这样直接访问您的 JSP 时,您根本不会经历 Spring。因此,请尝试使用 url http://localhost:8080/context/alerts,替换context为 Web 应用程序的上下文路径。

于 2013-04-30T18:34:12.513 回答
0

我的同事指出我的 dispatcher-servlet.xml 也缺少 mvc 指令来扫描我的控制器中的注释:

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

因此,即使我将浏览器指向localhost:8080/alerts(因为我没有配置上下文路径),它仍然失败。一旦我添加了 mvc 指令,就会调用控制器,并将动态内容发送到 jsp。

于 2013-04-30T20:51:20.490 回答
0

单行答案:您以错误的方式调用它,您必须调用 /alerts 而不是 alerts.jsp

但是为什么你得到这个空页面,因为你直接调用jsp而不通过控制器设置值,你将Jsp文件放在根目录下

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

为了便于访问,最好放在WEB-INF中,防止直接访问

<property name="prefix" value="/WEB-INF/jsps/"/>
于 2013-05-01T05:58:17.017 回答