在我的项目中,我有以下文件:
pole.jsp包含一个表单和一个提交
results.jsp,其中显示结果(仅包含标题)
一个PollServlet,在其中我同时在pole.jsp和results.jsp中设置标题
这是文件:
poll.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Poll Page</title>
</head>
<body>
<form action="/poll?action=pole" method="POST">
<div>
<a><h2><% out.print(request.getAttribute("oldTitle").toString());%>
</h2></a><br>
</div>
<br><br>
<input type="submit" name = "submit"value="submit">
</form>
</body
results.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Results</title>
</head>
<body >
<form action="/poll?action=results" method="POST">
<a><% out.print(request.getAttribute("title"));%></a>
</form>
</body>
</html>
PollServlet.java
@WebServlet(name = "PollServlet", urlPatterns = {"/poll"})
public class PollServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if (action.equals("pole")) {
request.setAttribute("oldTitle","new tile for poll.jsp ");
getServletConfig().getServletContext().getRequestDispatcher(
"/poll.jsp").forward(request, response);
} else if (action.equals("results")) {
/* set the title for results.jsp */
request.setAttribute("title","title for results.jsp");
getServletConfig().getServletContext().getRequestDispatcher(
"/results.jsp").forward(request, response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,
}
该问题似乎出现在servlet的
doGet()
方法中。我只能为第一项(poll.jsp)标题设置值,而不能为第二项(results.jsp)设置值,这是我做错了什么,如何正确实现?谢谢! 最佳答案
您不能多次转发相同的请求,因为一旦转发了请求,便已提供响应。
请参阅this问题。
但是,在forward()
之后编写的代码仍将被执行,但这是出于其他目的(例如记录...),但是您无法再次转发该请求。
编辑
您可以向网址/poll?action=pole
和/poll?action=results
发送一个参数,这将帮助您确定此页面是poll.jsp
还是results.jsp
,类似这样
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if(action.equals("pole")) {
/* set the title for pole.jsp */
request.setAttribute("oldTitle","new tile for poll.jsp ");
getServletConfig().getServletContext().getRequestDispatcher(
"/poll.jsp").forward(request, response);
} else if(action.equals("results")){
/* set the title for results.jsp */
request.setAttribute("title","title for results.jsp");
getServletConfig().getServletContext().getRequestDispatcher(
"/results.jsp").forward(request, response);
}
}