刚刚开始学j2ee,看得是《servlet&jsp核心编程第二版》。学习了一点之后,把自己的学习心得总结一下。
俗话说初生牛犊不怕虎。我这个刚进入J2ee的小牛犊,就觉得servlet其实是很简单的一件事情。一般来说,凡事程序都会喜欢用hello word为应景。
代码如下:
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- /** Simple servlet used to test server.
- * <P>
- * Taken from Core Servlets and JavaServer Pages 2nd Edition
- * from Prentice Hall and Sun Microsystems Press,
- * http://www.coreservlets.com/.
- * © 2003 Marty Hall; may be freely used or adapted.
- */
- public class HelloServlet extends HttpServlet {
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- String docType =
- "<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 " +
- "Transitional//EN/">/n";
- out.println(docType +
- "<HTML>/n" +
- "<HEAD><TITLE>Hello</TITLE></HEAD>/n" +
- "<BODY BGCOLOR=/"#FDF5E6/">/n" +
- "<H1>Hello</H1>/n" +
- "</BODY></HTML>");
- }
- }
这是书上的一段代码,最简单的hello world程序。如果说不管什么Servlet之类,就把当作一个面向对象的方法的话,它只是一个继承了HttpServlet,然后重写了其doGet方法。
这点让我想起了java的applet。Servlet定义了几个过程,来作为程序的“主方法”,同时,会由服务器给这些“主方法”传入一些数据。比方说init的config。doGet的request(输入),response(输出)。从而作为整个程序的基础。
这样的做法,使得把在编写网页代码时候能够使得程序员只专注于代码部分的流程,而不用考虑外部到底用了哪种服务器,基于此也使得代码具有可移植的特性。
生命周期:
和applet一样。Servlet也有着自己的生命周期。
首先就是init,起到初始化的作用,严格的来说,这有两个init。但是有ServletConfig参数的init。这存在的目的就是防止在重写init的时候,忘记传入ServletConfig。当然,如果有些初始化你可以用构造函数来写。只是无法获得一些服务器的信息了。
其次是service,他也是两个,一个是protect,一个是public,一般容器调用的都是public。然后public在把值传递给protect的那个。它的作用很简单,就是判断把值传递给下一棒doGet还是doPost方法。所以一般如果一些处理两者都需要的话,可以考虑用这个。
然后就是doGet和doPost,处理的是表单的数据。以后会细细解说。
destroy,顾名思义,Servlet死之前一刻的处理。
最后要明白的一点就是, Servlet 一个服务器只有一个实例对象,每一个客户的连接是通过线程池里面的线程来访问的。