servlet是运行在服务器上的一个小程序,用来处理服务器请求的。通常浏览器发送访问请求,服务器接收请求,并对浏览器的请求作出相应的处理,而servlet就是对请求作出处理的组件。
简单过程
1、当发送http://localhost:8080/hello 并发起 HTTP GET请求时,Tomcat 接收到请求,并根据配置的 URL 模式(通常在 web.xml 文件或通过注解定义)来确定请求应该被哪个 Servlet 处理。如下:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
所以/hello
对应HelloServlet
,因此需要一个HelloServlet
实列化类。
2、定义HelloServlet
并继承HttpServlet
,重写doget
方法(发送的是get
请求),使用 PrintWriter
或ServletOutputStream
将响应内容写入 HTTP
响应对象。
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
response.getWriter().println("<h1>Hello Servlet</h1>");
response.getWriter().println(new Date().toLocaleString());
}
}
上述的response.getWriter()
对象就是PrintWriter
,PrintWriter
对象本身并不直接发送数据给客户端,当你使用 PrintWriter
对象调用 print
、println
或其他输出方法时,数据实际上是被写入到 Servlet
响应的输出流中的。
数据首先被写入 Servlet
容器的内部缓冲区,暂存输出数据,接着可能需要设置必要的HTTP
响应头,最后使用 flush()
方法,或者啥也不干也会自动发送出去。
补充:get与post
get :是form默认的提交方式 如果通过一个超链访问某个地址,是get方式 如果在地址栏直接输入某个地址,是get方式 提交数据会在浏览器显示出来 不可以用于提交二进制数据,比如上传文件。
post 必须在form上通过 method="post" 显示指定 提交数据不会在浏览器显示出来 可以用于提交二进制数据,比如上传文件。
关于生命周期(了解看看)-------Servlet
是个接口
-
加载
Servlet
。当Tomcat第一次访问Servlet
的时候,Tomcat会负责创建Servlet
的实例 -
初始化。当
Servlet
被实例化后,Tomcat会调用init()
方法初始化这个对象 -
处理服务。当浏览器访问
Servlet
的时候,Servlet
会调用service()方法处理请求 -
销毁。当Tomcat关闭时或者检测到
Servlet
要从Tomcat删除的时候会自动调用destroy()
方法,让该实例释放掉所占的资源。一个Servlet
如果长时间不被使用的话,也会被Tomcat自动销毁 -
卸载。当
Servlet
调用完destroy()方法后,等待垃圾回收。如果有需要再次使用这个Servlet
,会重新调用init()
方法进行初始化操作。
由于是接口,需要重写5个方法 init【初始化】
destroy【销毁】
service【服务】
ServletConfig【Servlet配置】
getServletInfo【Servlet信息】
。
继承HttpServlet编写Servlet程序
重写doGet()和doPost()方法