简介: 我对 servlet 中的 doGet 和 doPost 之间的关系有点陌生。
范围: 我正在构建一个工具来帮助我建立一个在线拍卖网站,其中:
- 我(用户)在表单(html 页面)中输入一个名称,这个名称将是一个 URL(可能出售 -> 业务方法通过 API 确定)
- html 表单在 doPost 中发布表单名称,然后 doPost 使用表单名称作为参数来调用业务方法
- 在调用业务方法后,我重定向到结果 html/js 页面,该页面使用 Ajax 调用 doGet 方法以获取关联的输出(业务逻辑方法中填充的公共类字符串)
问题: Ajax 页面似乎没有从 doGet 获得输出(实际上 doGet 似乎没有要给出的字符串,没有错误 - 只是像 String="" 这样的空白。直到业务逻辑方法添加到它为止)。
问题 1: 如何使用 doPost 请求表单 String 'st' 以便我可以调用业务方法,同时也可以重定向到 html/js 结果页面,并且还可以从 Ajax 调用 doGet
问题 2: 我一直在尝试通过阅读 SO 和其他网站来解决我的答案——但想正式提问而不是推测:使用 servlet 是实现 Scope(以上)的最快方法吗?与 JSP 或任何其他 Java 服务器端库/框架相反?
硬件/软件:CentOS 6.3,16gb ram,物理节点,corei7 @3.2,容器是 tomcat 7
HTML
<html>
<head>
<title>URL Search Page</title>
</head>
<body>
<CENTER>
<FORM ACTION="/ResultServlet/Results" METHOD=GET>
<INPUT TYPE=TEXT NAME="st">
<INPUT TYPE=SUBMIT VALUE=Submit>
</FORM>
</CENTER>
</body>
</html>
小服务程序
@WebServlet("/Results")
public class Results extends HttpServlet {
private static final long serialVersionUID = 1L;
public static String str="";
public static void businessLogic(String q){
try {
str = new compute.URL.GetAvailURI( "https://www.registerdomains.com/auctionAPI/Key:a05u3***1F2r6Z&urlSearch="+q);
/*more boring number crunching */
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter printWriter = response.getWriter();
printWriter.println(str);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String st = request.getParameter("st");
businessLogic(st);
response.sendRedirect("results/resultActionURL.html");
}
}