我无法使用doPost
从一个jsp页面检索任何类型的参数,以及我的方法为post
的表单。下面的注释是一个最小的例子。
首先,我有两页:
以下是search.jsp
:
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>
<title>search</title>
<body>
<form name="search" method="post" action="search_results.jsp">
<p>
<input type="text" class="inputTitle" id="inputTitle" value="${fn:escapeXml(param.inputTitle)}">
<button type="submit">Search</button>
<p>
</form>
</body>
</html>
我的search_results.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<title>search results</title>
<body>
<p>Title: ${movie.title}</p>
</body>
</html>
现在我有一个名为SearchServlet.java
的课程:
@WebServlet("/search")
public class SearchServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
request.getRequestDispatcher("search.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
String title = request.getParameter("inputTitle");
String searchTitle;
try {
if(title != null && !title.isEmpty()) {
searchTitle = "hello";
} else {
searchTitle = "world";
}
session.setAttribute("movie.title", searchTitle);
request.getRequestDispatcher("search_results.jsp").forward(request, response);
} catch(ServletException e) { e.printStackTrace(); }
}
}
无论我输入什么,结果(movie.title)总是空着,所以我world
上的search_results.jsp
。为什么我的参数没有传递给search_results.jsp
?
答案 0 :(得分:2)
如果绕过servlet
,则不会发生这种情况查看表单操作
<form name="search" method="post" action="search_results.jsp">
您将发布请求直接发送到search_results.jsp
:您应该将其发送到servlet(映射@ /搜索)
<form name="search" method="post" action="search">
然后,您应该从servlet将请求转发给search_result.jsp
,这是您实际执行的操作。
除此之外,当您调用request.getParameter时,您必须记住,重要的是输入字段的名称,而不是id。您应该将id
属性更改为name
<input type="text" class="inputTitle" name="inputTitle" value="${fn:escapeXml(param.inputTitle)}">
最后,希望:)&#39;。&#39; (点)可能会导致问题:
session.setAttribute("movie.title", searchTitle);
检索属性时,点符号表示您正在访问名为movie
的对象中的字段<p>Title: ${movie.title}</p> <!-- you are accessing the title property of a movie object !-->
但是你没有那个......你有一个movietitle,一个字符串。将属性名称更改为不带点的movietitle,并以相同的方式在jsp中检索它。以上几行将成为:
session.setAttribute("movietitle", searchTitle);
<p>Title: ${movietitle}</p>
这应该可以解决问题。