• Serverlet程序


    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>");
         }
    }
    HelloWorldServlet

    将这个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>
    WEB.xml 部分
    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
        }
    }
    在init中使用了XML中配置的值
  • 相关阅读:
    Go 语言机制之逃逸分析
    类型转换和类型断言
    浅析rune数据类型
    Go 文件操作(创建、打开、读、写)
    字符编码笔记:ASCII,Unicode 和 UTF-8
    cmd.exe启动参数详解
    linux下.so、.ko、.a的区别
    Python 和C#的交互
    Innodb表压缩过程中遇到的坑(innodb_file_format)
    更改mysql的加密方式和密码策略
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/4908964.html
Copyright © 2020-2023  润新知