我一般对HTTP和编码还是比较陌生的,因此遇到了以下问题。对于在问这个问题时遇到的任何错误,我深表歉意。但是,我感谢您的反馈。
我的老师(我们叫他)在Eclipse中创建了一个Maven项目,以演示servlet的行为。在src / main / java中,我有以下课程。
public class MyServlet extends HttpServlet {
@Override
public void init() {
System.out.println("My servlet initializing");
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
System.out.println("Request received");
super.service(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
System.out.println("Post received");
String parameter = request.getParameter("name");
System.out.println(parameter);
System.out.println(request.getReader().readLine());
// We call our service
response.getWriter().write("Hi there!");
response.getWriter().write("Hi there again!");
response.sendRedirect("http://google.com");
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
System.out.println("Get received");
}
在与此项目相对应的web.xml文件中,我将servlet名称设置为myservlet。然后将url模式设置为/myservlet
。现在,我一直在尝试尝试理解HTTP的工作方式。使用Postman,我已经获得了用来响应GET和POST请求的TOMCAT服务器。但是,此问题出现在我创建的以下html文档中,名为form.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="./details">
<input name="name" type="text" placeholder="enter your name">
<input type="submit">
</form>
</body>
</html>
当我在Firefox中打开它时,表单加载正常。我随机输入内容并提交查询。由于据我所知这是一个POST请求,因此我认为action="./details"
位将引用我在上面定义的servlet,尤其是doPost()
方法,该方法应将我重定向到Google。但是,这给我一个错误,说“ Firefox无法在...src/main/webapp/details
上找到文件”。有什么问题吗?
此外,在上述doPost()
方法中,response.getWriter().write(...)
调用会发生什么?我以form.html
文件的形式提交内容后,在任何地方都看不到这些内容。无论如何,我完全感到困惑。朝着正确方向的观点将不胜感激。如果需要任何其他信息,请告诉我。
答案 0 :(得分:0)
在您的示例中,./details
被解释为相对于您保存form.html
文档的位置。当您说您在Firefox中打开它时,我假设您的意思是您从本地文件夹中打开了HTML文件。您需要通过Tomcat导航到表单。如果表单保存在src/main/webapp/form.html
中,那么很可能会在http://localhost:8080/form.html
另外,如果sevlet的url模式设置为/myservlet
,则表单的操作也需要设为/myservlet
才能访问servlet方法。