前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet学习笔记

Servlet学习笔记

作者头像
王小雷
发布2019-05-26 21:28:56
4320
发布2019-05-26 21:28:56
举报
文章被收录于专栏:王小雷王小雷

Servlet学习笔记 1.0 Servlet 概述 1.1 Servlet是运行在服务器端的Java小程序,通过HTTP协议用于接受客户端请求,并发出响应。 1.2 Servlet中的方法 public void servlet(ServletRequest req,ServletRequest res) throws ServletExcepation,java.io.IOException ServletRequest req:代表着请求对象,该对象有HTTP协议的请求部分的所有内容。它的实现类由服务器提供,封装数据也是服务器来做。 ServletRequest res:代表着响应对象,该对象中由我们写数据(HTTP协议的响应部分)进去。它的实现类也是由服务器提供的。 service: 由服务器调用,每次请求都会调用一次。服务器采用的是多线程机制。 2.0 Servlet 的编码步骤 2.1 编写一个类实现javax.servlet接口,或者继承javax.servlet.GenericServlet. 2.2 编译 set classpath=%classpath%;E:\IDE\tomcat-8.0.26\lib\servlet-api.jar javac -d . HelloServlet.java 2.3 修改web.xml 2.4 部署,把应用部署到Tomcat上,访问地址:http://localhost:8080/DemoServlet/hello 3.0 Servlet 的执行过程 4.0 Servlet 的编写方式 1、javax.servlet.GenericServlet:通用的Servlet实现,抽象类 2、javax.servlet.http.HttpServlet:与HTTP协议有关的,抽象类。 3、Servlet的核心类 5.0 Servlet 的生命周期 6.0 Servlet 的线程安全 尽量使用局部变量,避免使用实例变量。 7.0 Servlet 的一些细节 7.1 一个Servlet可以映射到多个地址上。 7.2 可以使用地址通配符* 7.2.1(优先级高) *.do 必须以*号开头 如:*.do 7.2.2(优先级高) 以/开头,必须以*结尾 如:/action/* 7.2.3 默认的Servlet,映射路径是<url-pattern>/</url-pattern>。不需要配,因为默认的Servlet负责处理用户请求找不到的处理工作。一切都是Servlet。 7.2.4 应用在启动时就完成Servlet的实例化和初始化。2为启动的顺序。 web.xml <load-on-startup>2</load-on-startup> 8.0 ServletConfig:Servlet的参数配置 8.1 ServletConfig:代表看针对当前Servlet的参数配置。 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。 8.2 如何得到ServletConfig对象的应用:在初始化Servlet,由容器产生,并传递给你 9.0 ServletContext 9.1 ServletContext代表着当前应用。每个应用只有一个ServletContext对象的实例,由容器提供。 9.2 如何获取ServletContext的实例:ServletConfig.getServletContext(); 9.3 ServletContext的生命周期:诞生,应用被加载时就由容器被创建好。活着,应用不挂就一直活着。死亡,应用挂了就挂了。 9.4 域(存活范围)对象:ServletContext称为应用范围域对象。 ServletContext{ private Map<String,Object>map = new HashMap<String,Object>(); public void setAttribute(String key,Object value){ map.put(key,value); } public void removeAttribute(String key){ map.remove(key); } public void getAttribute(String key){ return get(key); } } 注:当前应用的所有Servlet共享同一个ServletContext。 9.5 配置应用级的参数web.xml 用ServletContext取。 10.0 servlet转发、实现中文文件的下载、读取 10.1 servlet转发 Demo1.java public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletExcepation, IOException{ ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/servlet/Demo2"); rd.forward(request,response); //转发 } } Demo2.java public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletExcepation, IOException{ response.getWriter().writer("i am secent servlet") } 10.2 Servlet实现中文文件的下载 DemoIo.java public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletExcepation, IOException{ //文件在哪?以不变以万变 ServletContext sc = getServletContext(); String realPath = sc.getRealPath("/WEB-INF/classes/27.jpg");//文件存放的真是路径 //System.out.println(reaPath); //构建文件的输入流 InputStream in = new FileInputStream(realPath); //要获取 的文件名 String filename = realPath.substring(realPath.lastIndexOf(file.separator)+1); //告知客户端以下载的方式打开:Content-Disposition=attachment;filename=27.jpg response.setHeader("Content-Type","application/octet-stream"); response.setHeader("Content-Disposition","attachment;filename"+URLEncoder.encode(filename,"UTF-8"));//中文属于不安全字符,需要使用url编码 //用response的字节流进行输出 OutputStream out = response.getOutputStream(); int len = -1; byte b[] = new byte[1024]; while((len = in.read(b))!=-1){ out.write(b,0,len); } in.close(); out.close(); } } 10.3 读取配置文件的各种方式 10.3.1 利用ServletContext读取: a b c ,可以读取任何位置上的资源,使用限制只能是在web应用中用。 private void test10(HttpServletRequest request,HttpServletResponse response) throws ServletExcepation,IOException{ String path = getServletContext().getRealPath("/a.properties"); //String path = getServletContext().getRealPath("/WEB-INF/classes/b.properties"); //String path = getServletContext().getRealPath("/WEB-INF/classes/com/demo/resource/c.properties"); InputStream in = new FileInputStream(path); Properties props = new Properties(); props.load(in); System.out.println(props.getProperty("hello")); } 10.3.2 利用ResourceBundle读取: b c,不能读取properties的文件。只要是java程序便可。 private void test20(HttpServletRequest request,HttpServletResponse response) throws ServletExcepation,IOException{ ResourceBundle rb = ResourceBundle.getBundle("b"); ResourceBundle rb = ResourceBundle.getBundle("com.demo.resource.c"); System.out.pringtln(rb.getString("hello")); } 10.3.3 类加载器读取:只能读取classes或者类路径中的任意资源(更专业),但是不适合读取特别大的资源。建议读b c ,a也可以但是文件过大不推荐。不要让tomcat等服务器在有空格的目录中。 private void test20(HttpServletRequest request,HttpServletResponse response) throws ServletExcepation,IOException{ ClassLoader c1 = ServletContextDemo7.class.getClassLoader();//得到类加载器 InputStream in = cl.getResourceAsStream("b.properties"); Properties props = new Properties(); props.load(in); System.out.println(props.getProperty("hello")); } private void test30(HttpServletRequest request,HttpServletResponse response) throws ServletExcepation,IOException{ ClassLoader c1 = ServletContextDemo7.class.getClassLoader();//得到类加载器 URL url = cl.getResource("com/demo/resource/c.properties") String path = url.getPath(); InputStream in = new FileInputStream(path); Properties props = new Properties(); props.load(in); System.out.println(props.getProperty("hello")); }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年10月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档