一、什么是Servlet
Servlet是在服务器上运行的小程序,一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问这个驻存在服务器内存中的Servlet程序。
这里提出一个问题,Servlet和JSP?在学习J2EE的时候,初次接触了JSP(Java ServerPages),这个Java服务器页面,是一个简化的Servlet设计,二者都是在服务端执行,然后返回客户端HTML文本。但二者的区别呢?发展的先后顺序呢?为什么?
二、生命周期
1、客户端请求该 Servlet;
2、加载 Servlet 类到内存;
3、实例化并调用init()方法初始化该Servlet;
4、执行service()方法,获得请求的信息。(根据请求方法不同调用doGet() 或者doPost(),此外还有doGet()、doPut()、doTrace()、doDelete()、doOptions());
5、destroy()销毁。
Servlet只初始化一次,它是单实例,多线程使用,所以它不是线程安全的。
三、实现过程
Servlet的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
1) 客户端发送请求至服务器端;
2) 服务器将请求信息发送至 Servlet;
3) Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
4) 服务器将响应返回给客户端。
四、Servlet相关包的介绍
--javax.servlet.*:存放与HTTP 协议无关的一般性Servlet 类;
--javax.servlet.http.*:除了继承javax.servlet.* 之外,并且还增加与HTTP协议有关的功能。
所有的Servlet都必须实现javax.servlet.Servlet 接口(Interface)。
若Servlet程序和HTTP协议无关,那么必须继承javax.servlet.GenericServlet类;
若Servlet程序和HTTP协议有关,那么必须继承javax.servlet.http.HttpServlet 类。
--HttpServlet:提供了一个抽象类用来创建Http Servlet。
public voiddoGet()方法:用来处理客户端发出的 GET 请求
public voiddoPost()方法:用来处理 POST请求
--javax.servlet包的接口:
ServletConfig接口:在初始化的过程中由Servlet容器使用
ServletContext接口:定义Servlet用于获取来自其容器的信息的方法
ServletRequest接口:向服务器请求信息
ServletResponse接口:响应客户端请求
--javax.servlet包的类:
ServletInputStream类:用于从客户端读取二进制数据
ServletOutputStream类:用于将二进制数据发送到客户端
--javax.servlet.http包的接口:
HttpServletRequest接口:提供Http请求信息
HttpServletResponse接口:提供Http响应
五、第一个Servlet小例子
还是习惯在IDE环境下开发,使用MyEclipse工具,建立web project。
这个小例子包括Get方式请求和Post方式请求,如果你不能区分二者,那就以浏览地址的后缀是否带参数来区分吧。我的jsp页面:
<body> <h1>第一个Servlet小例子</h1> <hr> <a href="servlet/HelloServlet">Get方式请求</a> <br> <form action="servlet/HelloServlet" method="post"> <input type="submit" value="Post方式请求"> </form> </body>
HelloServlet类
//继承于HttpServlet public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("处理Get()请求..."); PrintWriter out = resp.getWriter(); //指定输出文件类型 resp.setContentType("text/html;charset=utf-8"); out.println("<strong>Hello Servlet!</strong><br>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("处理Post()请求..."); PrintWriter out = resp.getWriter(); //指定输出文件类型 resp.setContentType("text/html;charset=utf-8"); out.println("<strong>Hello Servlet!</strong><br>"); } }
最重要的就是web配置文件的配置,我一直认为,它就是一个承上启下的连接点,把浏览器的地址URL和Servlet类关联起来。
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/servlet/HelloServlet</url-pattern> </servlet-mapping>
希望能给Java新手解疑答惑,继续努力!