Servlet 2 生命周期 ServletConfig 自定义缺省Servlet
2014-08-20 17:24
405 查看
目录:
Servlet 主要作用 通过程序来生成 网页
Servlet 生命周期
读取本地工程下的文件
读取web工程发布后的文件
获得输入字符串,统计字母次数
使用ServletConfig对象 向Servlet传递初始化信息
读取 全局初始化参数
统计浏览器访问次数案例
自定义缺省Servlet
*注:web.xml配置文件在最下面,注意查看
Servlet 主要作用 通过程序来生成 网页
Servlet 生命周期
读取本地工程下的文件
读取web工程发布后的文件
获得输入字符串,统计字母次数
html
使用ServletConfig对象 向Servlet传递初始化信息
读取 全局初始化参数
统计浏览器访问次数案例
自定义缺省Servlet
web.xml
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>
相关文章推荐
- Servlet建立 生命周期 继承结构 Servlet的配置 ServletConfig ServletContext
- Servlet之重定向、配置访问路径、处理多个请求、生命周期、config和context、层次结构、线程安全问题
- 什么是Servlet,Servlet的生命周期、servletconfig、servletContext
- 第10天(就业班) servlet的映射路径、生命周期、自动加载+init方法+线程并发安全、servletconfig对象+servletcontext对象入门、servletcontext对象的使
- Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】
- Java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
- 关于 web.config 里自定义节点的设置和读取
- 温故知新--servlet(三)--servlet的调用过程和生命周期
- Android自定义view生命周期
- servletconfig和ServletContext的用法和区别
- 三种思路实现自定义404页面:Tomcat、SpringMVC精准匹配、重写DispatchServlet
- Spring Boot 第三节 自定义 servlet
- Servlet的生命周期
- ServletConfig与ServletContext对象详解
- ServletConfig与servletContext
- Servlet 介绍 执行流程 生命周期 启动项配置
- SpringBoot之自定义Servlet
- servlet生命周期
- 自定义View第一篇(view生命周期的简介)
- Servlet-生命周期