我试图了解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页面的响应中。
答案 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 />
。但最后一步只是对我的解决方案的一个额外增强,这就是为什么我不写关于自定义标签的进一步解释。