servlet学习笔记

Servlet中的GET和POST之间的区别

get和post这是http协议的两种方法,另外还有head,  delete等   
这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。   
在servlet开发中,以doGet()和doPost()分别处理get和post方法。   
另外还有一个doService(),  它是一个调度方法,当一个请求发生时,首先执行doService(),不管是get还是post。在HttpServlet这个基类中实现了一个角度,首先判断是请求时get还是post,如果是get就调用doGet(),  如果是post就调用doPost()。

 

HttpServlet的两个Service()方法区别

在HttpServlet类中有两个service()方法,如下:

 void service(ServletRequest req, ServletResponse res)
protected  void service(HttpServletRequest req, HttpServletResponse resp)

   void  service(ServletRequest  req,ServletResponse response)方法由tomcat自动调用

  它将接收的客户端请求转交给protected void service(HttpServletRequest  req,HttpServletResponse res)方法

  此保护类型的service方法再把将请求分发给doPost()、doGet()方法进行下一步处理。

  所以我们完全可以重写受保护的service()方法来代替doPost()和doGet()方法。

古旧的javaweb mvc

 javabean出现之前, 所有的事情都在jsp里面做

javabean的出现带来了javaweb开发最早的模式 - model1

分层概念在这里已经初步形成

 model2

怪了, 不是先有servlet才有jsp的吗, 那么接下来咱来看下一遍博文, <servlet与jsp的关系>

servlet在多线程下其本身并不是线程安全的。
如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。
原文地址:https://www.cnblogs.com/zedosu/p/6514746.html