Web容器会为每个请求创建一个线程,当一个Servlet实例服务多个请求时,就相当于Servlet被多个线程共同访问,所以要注意线程安全(Thread-safe)的问题。例如,在Servlet中有类变量(Class Variable)时就要特别注意,并非不可以在Servlet中定义类变量,基本上建议Servlet中的类变量在服务请求时,最好作为常数或只读对象使用应该避免在服务请求时对类变量设值,如果真要对类变量设值,记得处理同步化,但也要注意性能的问题。
在客户端只针对格式等与安全无关的部分进行验证,在服务器端必须针对与安全相关的验证。
由于ServletRequest对象仅在此次请求周期内有效,在请求/相应之后,ServletRequest对象会被销毁而回收资源,设值在ServletRequest对象中的属性自然也就消失了,所以通过setAttribute()所设置的属性才称为请求范围属性。
要编写一个Servlet类很简单,只要继承javax.servlet.http.HttpServlet类,并重写doGet()、doPost()等对应HTTP请求的方法即可。然而到这里为止,还称不上一个可以服务的Servlet,因为容器还没有加载这个Servlet类。
必须先设置好web.xml,这样容器才知道如何加载及如何处理Servlet。Web应用程序在文件组织上有特定结构,容器会到特定的位置寻找类或设置文件。
不建议也不应该在继承了HttpServlet之后,重写service()方法,这会覆盖掉HttpServlet中所定义的HTTP默认处理流程。