Serverlet是用Java编写的服务器端程序;主要用于交互地浏览和修改数据,生成动态Web内容;
一个serverlet就是一个继承于HttpServlet抽象类的Java类;下面先看一个简单的例子

import javax.servlet.*; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; public class HelloWorldServlet extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse res) throws IOException{ res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<html><head><title>Hello World!</title></head>"); out.println("<body>"); out.println("<h1>Hello World!</h1></body></html>"); } }
将这个Java代码编译成.class 类得到 HelloWorldServlet.class 文件;
然后就是将这个文件放入tomcat的一个站点的 ../WEB-INF/classes/ 下面
在对应的web.xml 里面添加如下内容:
<servlet> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/HelloWorldServlet/*</url-pattern> </servlet-mapping>
OK,现在可以在浏览器里访问了;
http://localhost:8080/webapp/HelloWorldServlet/ webapp为站点名;
下面介绍servlet是怎么样被访问的,首先浏览器发送的URL,服务器会在web.xml文件中寻找对应的<url-pattern>标签,再找到对应的servlet对应的<servlet-name>,然后再根据<servlet-name>,找到对应的servlet-class类 , 然后new一个对象,执行里面的方法;
servlet生命周期:
1、加载(通过classloader加载类)
2、实例化(new 一个对象) 这时候会执行构造函数
3、执行初始化函数(init(servletcofig)函数)//servletcofig 这个参数记录了 web.xml中关于这个servlet的配置信息
4、处理请求
5、销毁(执行destroy函数)
注意,无论有N多用户,对于一个符合J2EE标准的服务器,一个servlet的类,值产生一个servlet对象,所有用户都使用这一个对象;
当第一个用户访问的时候,会执行步骤1~4 其他用户访问的时候,就只执行4,不会再执行1~3;
等待服务器关闭的时候,执行5;
实际上,servlet有这样一个接口,singlethread(大概是这个名字),重写这个函数,就可以使得每调用一次,创建一个对象,然而这样会非常非常消耗内存;
servlet 设定自启动及参数值在XML中配置的方法:

<servlet> <servlet-name>Log4JInitServlet</servlet-name> <servlet-class>Log4JInitServlet</servlet-class> <init-param> <param-name>log4j-properties-location</param-name> <param-value>C:/myTestJava/Log4JWeb/WebRoot/ini/log4j.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

import java.io.File; import java.io.IOException; //import org.apache.logging.log4j.core.Logger; import org.apache.log4j.*; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Log4JInitServlet */ public class Log4JInitServlet extends HttpServlet { private static Logger logger; public Log4JInitServlet() { super(); // TODO Auto-generated constructor stub } /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { //super.init(config); ServletContext sc = config.getServletContext(); String log4jLocation = config.getInitParameter("log4j-properties-location"); try { System.out .println("当前路径默认=======" + System.getProperty("user.dir")); System.out.println("---配置文件路径---" + log4jLocation); logger = Logger.getLogger(Log4JInitServlet.class); PropertyConfigurator .configure("C:/myTestJava/Log4JWeb/WebRoot/ini/log4j.properties"); int i = 2; while ((i--) != 0) { logger.info("Info: this is info;"); logger.debug("Debug: this is Debug;"); logger.error("Error: this is Error;"); } System.out.println("------------------Init success"); } catch (Exception e) { System.out.println("Warning:there is an error:" + e.getMessage()); } } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }