• Servlet 2 生命周期 ServletConfig 自定义缺省Servlet


    目录:

    Servlet 主要作用 通过程序来生成 网页
    Servlet 生命周期
    读取本地工程下的文件
    读取web工程发布后的文件
    获得输入字符串,统计字母次数
    使用ServletConfig对象 向Servlet传递初始化信息
    读取 全局初始化参数
    统计浏览器访问次数案例
    自定义缺省Servlet

    *注:web.xml配置文件在最下面,注意查看

    Servlet 主要作用 通过程序来生成 网页

    package cn.itcast.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet 主要作用 通过程序来生成 网页
     * 
     * 继承 HttpServlet
     * 
     * 覆盖 doGet 和 doPost
     * 
     * @author seawind
     * 
     */
    public class HelloServlet extends HttpServlet {
        @Override
        public void init() throws ServletException {
        }
    
        @Override
        public void init(ServletConfig config) throws ServletException {
        }
    
        @Override
        // 处理 HTTP GET方式请求
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
    
            System.out.println("hello servlet do get ...");
            // 处理中文字符集
            response.setContentType("text/html;charset=utf-8");
            // 生成网页 需要使用 response
            PrintWriter out = response.getWriter();
    
            // 通过响应输出流 生成一个网页
            out.println("<html>"); // 生成的HTML 源代码
            out.println("<body>");
            out.println("<h1>Hello Servlet</h1>");
            out.println("当前的时间是:" + new Date().toLocaleString());
            out.println("</body>");
            out.println("</html>");
        }
    
        @Override
        // 处理 HTTP POST 方式请求
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            System.out.println("hello servlet do post ...");
        }
    }

    Servlet 生命周期

    package cn.itcast.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    /**
     * Servlet 生命周期
     * 
     * @author seawind
     * 
     */
    public class InitServlet implements Servlet {
        // 构造函数
        public InitServlet() {
            System.out.println("init servlet 创建对象");
        }
    
        @Override
        // Servlet对象销毁操作
        public void destroy() {
            System.out.println("destroy...");
        }
    
        @Override
        // Servlet对象初始化操作
        public void init(ServletConfig config) throws ServletException {
            System.out.println("init...");
        }
    
        @Override
        // Servlet对象 提供服务
        public void service(ServletRequest req, ServletResponse res)
                throws ServletException, IOException {
            System.out.println("service ...");
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
    }

    读取本地工程下的文件

    package cn.itcast.io;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReaderTest {
        public static void main(String[] args) throws IOException {
            // 编写四个文件 路径,调用readfile方法 完成文件读取
            // 读取1.txt
            String filename1 = "1.txt";
            readfile(filename1);
            // 读取2.txt
            String filename2 = "WebRoot/2.txt";
            readfile(filename2);
            // 读取3.txt
            String filename3 = "WebRoot/WEB-INF/3.txt";
            readfile(filename3);
            // 读取4.txt
            String filename4 = "src/4.txt";
            readfile(filename4);
            // 读取4.txt
            String filename5 = FileReaderTest.class.getResource("/4.txt").getFile();
            readfile(filename5);
    
        }
    
        public static void readfile(String filename) throws IOException {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(
                    filename));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
    
            bufferedReader.close();
        }
    }

    读取web工程发布后的文件

    package cn.itcast.servlet.contextdemo3;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 读取 1.txt 2.txt 3.txt 4.txt
     * 
     * @author seawind
     * 
     */
    public class ReadFileServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 读取 1.txt (不会被发布到tomcat,没法读)
            // 读取 2.txt
            String filename1 = "/2.txt";
            // 根据相对于网站根目录绝对路径 ---- 获得磁盘绝对路径
            filename1 = getServletContext().getRealPath(filename1);
            System.out.println(filename1);
            readfile(filename1);
    
            // 读取3.txt
            String filename2 = getServletContext().getRealPath("/WEB-INF/3.txt");
            readfile(filename2);
    
            // 读取4.txt
            String filename3 = getServletContext().getRealPath(
                    "/WEB-INF/classes/4.txt");
            readfile(filename3);
    
            // 读取4.txt 用类加载器读取
            String filename4 = ReadFileServlet.class.getResource("/4.txt")
                    .getFile();
            readfile(filename4);
        }
    
        public static void readfile(String filename) throws IOException {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(
                    filename));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
    
            bufferedReader.close();
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    获得输入字符串,统计字母次数

    html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>输入字符串,统计每个字母出现次数</h1>
    <form action="/day5/countletter" method="post">
        请输入任意字符串 <textarea rows="5" cols="80" name="content"></textarea>
        <input type="submit" value="提交" />
    </form>
    </body>
    </html>
    package cn.itcast.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 获得输入字符串,统计字母次数
     * 
     * @author seawind
     * 
     */
    public class CountLetterServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获得输入字符串
            String content = request.getParameter("content");
    
            // 转换字符串小写
            content = content.toLowerCase();
    
            // 定义存放字母出现次数 数组
            int[] times = new int[26]; // 在0 位置存放 a次数,在1位置存放b次数
    
            // 遍历字符串
            for (int i = 0; i < content.length(); i++) {
                char c = content.charAt(i);
                // 判断c 必须是一个字母
                if (Character.isLetter(c)) {
                    times[c - 'a']++;
                }
            }
    
            // 将统计字母出现次数 显示在浏览器上
            response.setContentType("text/html;charset=utf-8");// 设置字符串
            PrintWriter out = response.getWriter();
    
            for (int i = 0; i < times.length; i++) {
                int lettertimes = times[i];// 字母次数
                char letter = (char) ('a' + i);
                out.println(letter + "字母出现了" + lettertimes + "次<br/>");
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    使用ServletConfig对象 向Servlet传递初始化信息

    package cn.itcast.servlet;
    
    import java.io.IOException;
    import java.util.Enumeration;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 使用ServletConfig对象 向Servlet传递初始化信息
     * 
     * @author seawind
     * 
     */
    public class ConfigServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获得 Servlet对象 初始化信息
            ServletConfig config = getServletConfig();
            System.out.println(config.getInitParameter("company"));
            System.out.println(config.getInitParameter("address"));
    
            // 通过所有初始化参数名称 遍历 值
            Enumeration<String> names = config.getInitParameterNames();
            while (names.hasMoreElements()) {
                String name = names.nextElement();
                System.out.println(name + ":" + config.getInitParameter(name));
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    读取 全局初始化参数

    package cn.itcast.servlet.contextdemo1;
    
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 读取 全局初始化参数
     * 
     * @author seawind
     * 
     */
    public class ContextServlet1 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获得 ServletContext对象
            // ServletContext context = getServletConfig().getServletContext();
            ServletContext context = getServletContext();
    
            System.out.println(context.getInitParameter("name"));
    
            // 输出文件 MIME类型
            System.out.println(context.getMimeType("1.html"));
            System.out.println(context.getMimeType("2.jpg"));
            System.out.println(context.getMimeType("3.ppt"));
    
            // 记录日志
            context.log("我很好,天晴了!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    统计浏览器访问次数案例

    package cn.itcast.servlet.contextdemo2;
    
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 每次请求 访问Servlet,将访问次数 +1 保存ServletContext
     * 
     * @author seawind
     * 
     */
    public class VisitServlet extends HttpServlet {
    
        @Override
        // 对访问次数 进行初始化
        public void init() throws ServletException {
            ServletContext context = getServletContext();
            // 保存数据 到ServletContext
            context.setAttribute("times", 0);// 初始化访问次数为0
        }
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 有了一次请求,访问次数 +1
            ServletContext context = getServletContext();
    
            // 取出访问次数
            int times = (Integer) context.getAttribute("times");
            times++;
            // 将次数 放回去
            context.setAttribute("times", times);
    
            System.out.println("visitServlet 被访问了一次");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package cn.itcast.servlet.contextdemo2;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 读取Context中保存访问次数,显示浏览器页面上
     * 
     * @author seawind
     * 
     */
    public class ShowVisitTimesServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获得ServletContext对象
            ServletContext context = getServletContext();
            // 读取访问次数
            int times = (Integer) context.getAttribute("times");
    
            // 将次数显示在浏览器上
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
    
            out.println("<h1>VisitServlet被访问了的" + times + "次</h1>");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    自定义缺省Servlet

    package cn.itcast.servlet;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 自定义缺省Servlet
     * 
     * @author seawind
     * 
     */
    public class DefaultServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("缺省Servlet 获得执行...");
            // 获得客户端访问资源路径
            String requestURI = request.getRequestURI(); // /day5/hello.html
            // getContextPath ----- /day5
            String path = requestURI.substring(request.getContextPath().length());
            // path ---- /hello.html
    
            // 将path 转换绝对磁盘路径
            String absolutePath = getServletContext().getRealPath(path);
            File file = new File(absolutePath);
            if (file.exists() && file.isFile()) {
                // 将文件内容返回客户端
                InputStream in = new FileInputStream(file);
                OutputStream out = response.getOutputStream();
                int b;
                while ((b = in.read()) != -1) {
                    out.write(b);
                }
                in.close();
                out.close();
            } else {
                // 文件不存在,或者是一个目录
                response.setStatus(404);
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <!-- 全局初始化参数 , 任何Servlet都可以读取-->
      <context-param>
          <param-name>name</param-name>
          <param-value>张三</param-value>
      </context-param>    
        
      <!-- 注册Servlet 程序, 为Servlet class 起一个名字 -->
      <servlet>
          <servlet-name>HelloServlet</servlet-name>
          <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
      </servlet>
      
      <servlet>
          <servlet-name>InitServlet</servlet-name>
          <servlet-class>cn.itcast.servlet.InitServlet</servlet-class>
          <!-- 通过 load-on-startup 让Servlet 随服务器启动 加载,完成初始化 -->
          <!-- 中间值 是一个数字 取值 0-9 ,代表优先级 0最高 -->
          <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>cn.itcast.servlet.HelloServlet2</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>HelloServlet3</servlet-name>
        <servlet-class>cn.itcast.servlet.HelloServlet3</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ConfigServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.ConfigServlet</servlet-class>
        <!-- 通过 init-param 标签 传递初始化 信息 -->
        <init-param>
            <param-name>company</param-name>
            <param-value>传智播客</param-value>
        </init-param>
        <init-param>
            <param-name>address</param-name>
            <param-value>春生泰克</param-value>
        </init-param>
      </servlet>
      <servlet>
        <servlet-name>ContextServlet1</servlet-name>
        <servlet-class>cn.itcast.servlet.contextdemo1.ContextServlet1</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>VisitServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.contextdemo2.VisitServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ShowVisitTimesServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.contextdemo2.ShowVisitTimesServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ReadFileServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.contextdemo3.ReadFileServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>DefaultServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.DefaultServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>CountLetterServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.CountLetterServlet</servlet-class>
      </servlet>
    
    
    
    
    
    
    
    
    
      
      <!-- 配置Servlet 访问 路径 -->
      <servlet-mapping>
          <servlet-name>HelloServlet</servlet-name>
          <url-pattern>/hello</url-pattern>
      </servlet-mapping>
      
      <servlet-mapping>
          <servlet-name>InitServlet</servlet-name>
          <url-pattern>/init</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <url-pattern>/hello2</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>HelloServlet3</servlet-name>
        <url-pattern>/hello3</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ConfigServlet</servlet-name>
        <url-pattern>/config</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ContextServlet1</servlet-name>
        <url-pattern>/context1</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>VisitServlet</servlet-name>
        <url-pattern>/visit</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ShowVisitTimesServlet</servlet-name>
        <url-pattern>/show</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ReadFileServlet</servlet-name>
        <url-pattern>/readfile</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>DefaultServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>CountLetterServlet</servlet-name>
        <url-pattern>/countletter</url-pattern>
      </servlet-mapping>
      
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
  • 相关阅读:
    码农的半衰期只有15年?
    微软面试100题2010年版全部答案集锦(转自July)
    大量url,如何去重
    后缀树求最长子字符串
    转 STL hash_map & map
    有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链:利用弗洛伊德算法求最长路径
    获取本机地址信息,遇到小问题...有待解决
    HDOJ 1006
    归并排序
    插入排序的简单实现
  • 原文地址:https://www.cnblogs.com/vaer/p/3925112.html
Copyright © 2020-2023  润新知