HttpServlet的方法

本文详细解释了HTTP协议中的GET和POST方法的区别,包括它们在参数传递、安全性及用途上的不同。并通过实例展示了如何在Servlet中处理这两种请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

doGet和doPost的区别

 

    getposthttp协议的两种方法,另外还有head, delete 

    这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。 

    在servlet开发中,以doGet()doPost()分别处理getpost方法。 
首先判断请求时是get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。都会执行这个方法。 

1.doGet
GET
 调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTMLJSP直接访问ServletURL时,一般用GET调用。 GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来一些问题,比如用户登录,表单里的用户名和密码需要发送到服务器端, 若使用Get调用,就会在浏览器的URL中显示用户名和密码。
例:
jsp
页代码:
<form action="/doGet_servlet" name=”form1” method="get">
………
<input type="text" name="username">
………
</form>
servlet
代码:
public class doGet_servlet extends HttpServlet {
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
      request.setCaracterEncoding(“UTF-8”);//
汉字转码
      String username = request.getParameter("username");

request.setAttribute("username",username);

       request.getRequestDispatcher("/out.jsp").forward(request, response);//跳转到out.jsp页面

 

 

 

  }
}

out.jsp页面

<html>

``````

<%=request.getAttribute("username")%>//在页面上输出username的信息

</html>
这样提交表单后,参数会自动添加到浏览器地址栏中,带来安全性问题。

2.doPost
它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。
例:
jsp
页代码:
<form action="/doPostt_servlet" name=”form2” method="post">
………
<textarea name="name2" cols="50" rows="10"></textarea>
………
</form>
servlet
代码:
public class doPostt_servlet extends HttpServlet {
  public void doPost(HttpServletRequest request,HttpServletResponse esponse) throws IOException,ServletException {
      request.setCaracterEncoding(“UTF-8”);//
汉字转码
      PrintWriter out = response.getWriter();
      out.println("The Parameter are
 "+request.getParameter("name2"));
  }
}
最好用上面在doGet中提到的输出方式进行输出
3.
可以把方法写在doGet()方法中,doPost()方法中调用执行,这样,无论你提交的是post还是get方法都可以执行
例如:
jsp
页代码:
<form action="/servlet" name=”form” method="post">
………
<input type="text" name="name1">
………
</form>
servlet
代码:
public class servlet extends HttpServlet {
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
      request.setCaracterEncoding(“UTF-8”);//
汉字转码
      PrintWriter out = response.getWriter();
      out.println("The Parameter are
 "+request.getParameter("name1"));
  }

  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
      this.goGet(request,response);//
调用doGet()方法
  }
}
另外,HttpServlet处理客户端请求方式还有doPutdoDeletedoTracedoHeaddoOptions,但使用的比较少。 


HttpServlet类      

定义      public class HttpServlet extends GenericServlet implements 
         Serializable
      这是一个抽象类,用来简化HTTP Servlet写作的过程。它是GenericServlet类的扩充,提供了一个处理HTTP协议的框架。
      在这个类中的service方法支持例如GET、POST这样的标准的HTTP方法。这一支持过程是通过分配他们到适当的方法(例如doGet、doPost)来实现的。
      方法
      1、doDelete
      protected void doDelete(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException;
      被这个类的service方法调用,用来处理一个HTTP DELETE操作。这个操作允许客户端请求从服务器上删除URL。这一操作可能有负面影响,对此用户就负起责任。
      这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。当你要处理DELETE请求时,你必须重载这一方法。
      2、doGet
      protected void doGet(HttpServletRequest request, 
            HttpServletResponse response) throws ServletException,
            IOException;
      被这个类的service方法调用,用来处理一个HTTP GET操作。这个操作允许客户端简单地从一个HTTP服务器“获得”资源。对这个方法的重载将自动地支持HEAD方法。
      GET操作应该是安全而且没有负面影响的。这个操作也应该可以安全地重复。
      这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。
      3、doHead
      protected void doHead(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException;
      被这个类的service方法调用,用来处理一个HTTP HEAD操作。默认的情况是,这个操作会按照一个无条件的GET方法来执行,该操作不向客户端返回任何数据,而仅仅是返回包含内容长度的头信息。
      与GET操作一样,这个操作应该是安全而且没有负面影响的。这个操作也应该可以安全地重复。
      这个方法的默认执行结果是自动处理HTTP HEAD操作,这个方法不需要被一个子类执行。 
      4、doOptions
      protected void doOptions(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException;
      被这个类的service方法调用,用来处理一个HTTP OPTION操作。这个操作自动地决定支持哪一种HTTP方法。例如,一个Servlet写了一个HttpServlet的子类并重载了doGet方法,doOption会返回下面的头:
      Allow: GET,HEAD,TRACE,OPTIONS
      你一般不需要重载这个方法。
      5、doPost
      protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException;
      被这个类的service方法调用,用来处理一个HTTP POST操作。这个操作包含请求体的数据,Servlet应该按照他行事。
      这个操作可能有负面影响。例如更新存储的数据或在线购物。
      这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。当你要处理POST操作时,你必须在HttpServlet的子类中重载这一方法。
      6、doPut
      protected void doPut(HttpServletRequest request, 
            HttpServletResponse response) throws ServletException,
            IOException;
      被这个类的service方法调用,用来处理一个HTTP PUT操作。这个操作类似于通过FTP发送文件。
      这个操作可能有负面影响。例如更新存储的数据或在线购物。
      这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。当你要处理PUT操作时,你必须在HttpServlet的子类中重载这一方法。
      7、doTrace
      protected void doTrace(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException;
      被这个类的service方法调用,用来处理一个HTTP TRACE操作。这个操作的默认执行结果是产生一个响应,这个响应包含一个反映trace请求中发送的所有头域的信息。
      当你开发Servlet时,在多数情况下你需要重载这个方法。
      8、getLastModified
      protected long getLastModified(HttpServletRequest request);
      返回这个请求实体的最后修改时间。为了支持GET操作,你必须重载这一方法,以精确地反映最后修改的时间。这将有助于浏览器和代理服务器减少装载服务器和网络资源,从而更加有效地工作。返回的数值是自1970-1-1日(GMT)以来的毫秒数。 
默认的执行结果是返回一个负数,这标志着最后修改时间未知,它也不能被一个有条件的GET操作使用。
      9、service
      protected void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException;
      public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException;
      这是一个Servlet的HTTP-specific方案,它分配请求到这个类的支持这个请求的其他方法。
      当你开发Servlet时,在多数情况下你不必重载这个方法。
### 回答1: HttpServlet中的service方法是一个重要的方法,它是处理客户端请求的核心方法。当客户端发送请求时,服务器会调用HttpServlet的service方法来处理请求。在service方法中,我们可以根据请求的类型(GET、POST、PUT、DELETE等)来执行相应的操作,例如读取请求参数、处理请求数据、生成响应等。此外,我们还可以在service方法中实现一些自定义的逻辑,例如验证用户身份、记录日志等。总之,HttpServlet中的service方法是一个非常重要的方法,它为我们提供了处理客户端请求的灵活性和可扩展性。 ### 回答2: HTTPServlet是一个Java EE中的Servlet,用来处理HTTP请求和响应。HTTPServlet的具体实现中,它会提供一个service方法,这个方法接收用户的Http请求,并作出响应。下面我会详细介绍HttpServlet中的service方法。 1. 概述 Service()方法是为HTTPServlet的子类提供的实现HTTP请求处理方法。在service()方法中,可以通过不同的参数类型,通过转发或者重定向请求,向客户端提供响应。 Service()方法有多个重载版本,其中有大多数是用于处理请求的,而一些不需任何请求参数的方法,例如,doGet(),doPost()等。 2. 参数 在service()方法中,接收到的参数为HttpServletRequest对象和 HttpServletResponse对象。由于这两个对象可以传递信息和状态,从而获取所需的响应或多个响应,所以非常重要。HttpServletRequest对象包含有关请求的信息,包括HTTP GET或POST所发送的数据。同样,HttpServletResponse对象包含有关响应的信息,包括HTTP响应代码、响应头、响应主体等。 3. 方法 HttpServlet的service方法必须存在,并且在不同的情况下会执行不同的方法,包括: - doGet(HttpServletRequest request, HttpServletResponse response):处理GET请求; - doPost(HttpServletRequest request, HttpServletResponse response):处理POST请求; - doPut(HttpServletRequest request, HttpServletResponse response):处理PUT请求; - doDelete(HttpServletRequest request, HttpServletResponse response):处理DELETE请求; - Service(HttpServletRequest request, HttpServletResponse response):在每次请求前,会调用 service()方法获取请求的 HTTP 方法并将请求调配到 doGet()、doPost()、doPut()、doDelete() 等方法之一。 4. 实现 HttpServlet的子类需要实现一些特定的方法,包括doGet()、doPost()、doPut()、doDelete()等。HttpServlet会根据请求的类型来调用不同的方法,如果需要实现自己的逻辑,可以重写这些方法,同时可以调用父类的方法。 在使用HttpServlet时,需要继承这个类,并根据需要重写类中的不同方法来实现特定的功能。在代码中,通常对"service"方法进行重写,以处理不同的请求。 综上所述,HttpServlet的service方法是Servlet接收用户请求并做出响应的核心方法,在此方法中可以实现不同的处理逻辑,以实现服务端的业务流程。同时,开发者需要针对不同的请求类型,实现对应的方法,并在其中编写具体的业务逻辑。 ### 回答3: HttpServlet中的service方法是Servlet API中的一个核心方法,它在每次客户端请求Servlet时被调用。service方法的主要功能是根据请求的方法(GET、POST、PUT等)来决定调用哪种HTTP请求方法处理此次请求,并将请求和响应对象传给相应的方法进行处理。 service方法HttpServlet中的最高级别的处理方法,它是由Servlet容器负责调用的,一旦Servlet容器将请求分配给Servlet,便会调用service方法HttpServlet中的service方法通常会被重写,以便根据具体的需求来处理请求。例如,若只需处理GET请求,则可以将doGet方法实现,并在service方法中进行判断;若需要处理POST请求,则需要将doPost方法实现,并在service方法中进行判断等等。 HttpServlet中的service方法还有一个重要的作用,即根据请求头部中的Accept-Encoding属性确定对请求的响应是否进行压缩。如果客户端没有请求压缩响应,则服务器则不会返回压缩响应,否则,会进行压缩响应。 总之,HttpServlet中的service方法是Servlet容器用来调用Servlet中处理HTTP请求的方法,它根据请求方法的不同,调用相应的处理方法,并负责决定是否对响应进行压缩,是整个Servlet处理过程中最核心的方法之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值