Java:包含模板头(调用servlet)到JSP页面(调用servlet)

时间:2015-12-12 16:42:08

标签: java jsp servlets include response

enter image description here

我试图了解JSP和Servlet如何协同工作。 因此,在请求网页时,会触发一个servlet,它会将一些数据作为响应发送,而触发servlet的JSP会处理(例如显示)数据。

一切正常,但我对一个部分JSP页面有一点问题,它作为一个"模板组件包含在所请求的页面中。 (它就像一个模板组件,(例如横幅等)。

所以,在我的情况下,我有一个标题(一个jsp文件,它必须触发一个servlet,请求一些数据,并将它们转发给它的父jsp文件),它必须包含在内(可能是/所有页面。因此,当请求页面时,页面必须包含对其响应的一些其他响应。

其实我在谈论这个。以下是我的JSP文件。

1)WEB-INF/JSP/head.jsp(就像模板的一部分一样):这样可以触发servlet。

<%@page contentType="text/html" pageEncoding="UTF-8" session="false"%>
<%@taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
<title>Company - ${param.title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" href=<c:url value='/images/favicon.ico'/> type="image/x-icon"/>
<link rel="stylesheet" href=<c:url value='/styles/default.css'/>>

2)WEB-INF/JSP/header.jsp(就像模板的一部分一样),这个不起作用。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" session="false"%>
<header>
We are ${companyStatus}
</header>

3)WEB-INF/JSP/index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<c:import url="head.jsp">
    <c:param name="title" value="Welcome" />
</c:import>
</head>
<body>
    <%@include file="header.jsp"%>
    <p>${test}</p>
</body>
</html>

此刻我有两个servlet。

IndexServlet @WebServlet('/index.html')

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        request.setAttribute("test", "Some specific data for Welcome-page only!");
        request.getRequestDispatcher(/WEB-INF/JSP/index.jsp).forward(request, response);
}

HeaderServlet @WebServlet("WEB-INF/JSP/header.jsp")

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        request.setAttribute("companyStatus", "closed");
        request.getRequestDispatcher(????).forward(request, response);
}

当然,这不起作用。

P.S。 This(点击查看链接)不是我的问题。我的问题是如何将JSP页面的响应包含在另一个JSP页面的响应中。

1 个答案:

答案 0 :(得分:0)

我可以解决问题。现在它有效。 我编辑了web.xml文件并添加了以下配置:

<强>的web.xml

<servlet>
   <servlet-name>HeaderServlet</servlet-name>
   <servlet-class>my.package.HeaderServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HeaderServlet</servlet-name>
   <url-pattern>/header</url-pattern>
</servlet-mapping>

然后我修改了HeaderServlet doGet

<强> HeaderServlet

@WebServlet("/HeaderServlet")
<...>
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        request.setAttribute("companyStatus", "closed");
        request.getRequestDispatcher("WEB-INF/JSP/header.jsp").forward(request, response);
}

然后编辑了我的index.jsp文件

<强>的index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<c:import url="head.jsp">
    <c:param name="title" value="Welcome" />
</c:import>
</head>
<body>
    <c:import url="/header" />
    <p>${test}</p>
</body>
</html>

然后我实际制作了自定义标记,并将<c:import url="/header" />替换为<my:header />。但最后一步只是对我的解决方案的一个额外增强,这就是为什么我不写关于自定义标签的进一步解释。