问题描述
我正在学习如何使用Servlet构建Java WebApplication。 到目前为止,我使用Tomcat服务器设置了一个Maven项目,并制作了具有某些形式并正在运行的基本应用程序。但是我有一些基本问题:
-
Java Servlet软件包的doGet和doPost方法之间有什么区别?我了解请求和响应之间的区别,也了解HTML GET和POST,但是由于该应用程序是从服务器端运行的,因此我感到困惑。
-
当我运行服务器并在浏览器中打开它时,我可以使用按钮提交表单(见下文)。该按钮将我重新分配到/ displayuserservlet,它显示了我提供的名字和姓氏。如果然后我手动调用/ displayuserservlet,则显示的名字和姓氏等于“ null”。那么为什么信息没有存储在服务器上(?)以及如何处理(如果我不想存储,例如文件路径/文件名以备后用)。
我的“网站” /index.xml`表单摘要:
<form action="/displayuserservlet" method="post">
<center>
First name:
<input type="text" name="firstName" value="John">
<br>
Last name:
<input type="text" name="lastName" value="Doe">
<input type="submit"><!-- Press this to submit form -->
</center>
</form>
我的Servlet:
@WebServlet("/displayuserservlet")
public class displayUserServlet extends HttpServlet {
//REQ is anything that comes FROM the browser
//RES is anything sent TO the browser
@Override
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws servletexception,IOException {
res.setContentType("text/html");
PrintWriter pw = res.getWriter();//get the stream to write the data
String title = "Results of form";
String firstName = req.getParameter("firstName");
String lastName = req.getParameter("lastName");
//writing html in the stream
pw.println(ServletUtilities.headWithTitle(title) +
"<body bgcolor=\"#fdf5e6\">\n" +
"<h1>" + title + "</h1>\n" +
"<p>First name:" + firstName + "</p>\n" +
"<p>First name:" + lastName + "</p>\n" +
"</body></html>");
pw.close();//closing the stream
}
@Override
public void doPost(HttpServletRequest req,IOException {
doGet(req,res);
}
}
已编辑:代码格式
解决方法
doGet()
和doPost()
。如果要处理GET和POST请求,但要以完全相同的方式处理它们,则可以像示例中一样,doGet()
调用doPost()
,或者 vice 。或者,如果您想以不同的方式处理这些请求类型,则可以以不同的方式实现它们。还有其他请求类型的方法-doPut()
用于PUT请求,依此类推。
方法Request.getParameter()
返回请求参数的值,即从客户端在其请求中传递的值。如果客户端不提供值,则此方法返回null
。什么都没有存储在服务器上-如果要存储数据,则可以自己存储。您可以将其临时存储在Session
对象中,也可以更永久地存储在数据库或其他存储系统中。
有很多关于Java Web编程的好书。通过查看“你好,世界”示例来试图弄清所有细节如何可能不是解决这个非常复杂的主题的最佳方法。
,Java Servlet软件包的doGet和doPost方法之间有什么区别?我了解请求和响应之间的区别,也了解HTML GET和POST,但是由于该应用程序是从服务器端运行的,因此我感到困惑。
在doGet方法中,参数被附加到URL并与标头信息一起发送。在doPost中,参数在正文中的单独行中发送。 ... doGet()方法通常用于查询或从服务器获取一些信息。 doPost()通常用于将某些信息更新或发布到服务器。
例如,doGet()URL如下所示:
www.yourwebsite.com/servleturl?parameter1=smething¶meter2=smthingelse
但是doPost()URL不会在URL中显示参数,因此它将是:
www.yourwebsite.com/servleturl
您应该始终使用doPost获取敏感信息,例如登录名或付款表格。
在下面的示例中,为什么需要调用doGet方法的doPost方法(来自我使用的教程)
这称为POST-REDIRECT-GET。基本上,这是一项功能,可以防止在您每次重新加载页面时出现令人讨厌的“确认表单重新提交”消息,并防止用户通过重新加载意外执行两次操作。
很难解释,但是维基百科summarizes it very well。
运行服务器并在浏览器中打开它时,我可以使用按钮提交表单(见下文)。该按钮将我重新分配到/ displayuserservlet,它显示了我提供的名字和姓氏。如果然后我手动调用/ displayuserservlet,则显示的名字和姓氏等于“ null”。那么为什么信息没有存储在服务器上(?)以及我该怎么做(以防万一我不想存储例如文件路径/文件名供以后使用)。
当您手动调用/ displayuserservlet时,它正在调用doGet方法。除非您在URL中手动添加参数(例如,显示John Doe的/displayuserservlet?firstName=John&lastName=Doe
),否则请求属性都将为null。您的程序可以正常运行,但不会打印任何内容,因为您从未提交过参数。