专栏首页王小雷Servlet学习笔记

Servlet学习笔记

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spark学习之在集群上运行Spark(6)

    Spark学习之在集群上运行Spark(6) 1. Spark的一个优点在于可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力。 2. Spark既能...

    王小雷
  • Spark学习之基础相关组件(1)

    Spark学习之基础相关组件(1) 1. Spark是一个用来实现快速而通用的集群计算的平台。 2. Spark的一个主要特点是能够在内存中进行计算,因而更快。...

    王小雷
  • 14.1 Apache Spark 简介快速入门

    Spark使用先进的DAG调度系统,查询优化器与物理执行引擎,实现了批处理与流处理的高性能。

    王小雷
  • LeetCode325.最大子数组之和为k

     这道题暴力很好做,但是找技巧确实不好想,首先假设这么一个场景,从下标为0到下标为100,和sum = 2000,假设我们要求的目标k=800,那么我们只要...

    mathor
  • 牛津中国小哥提出“3D-BoNet”,比3D点云实例分割算法快10倍!

    实现有效的三维场景理解(3D scene understanding)是计算机视觉和人工智能领域的关键问题之一。近年来,针对三维点云理解的研究取得了显著的进展,...

    新智元
  • Google Play应用被植入病毒,背后又是这个黑客组织搞的鬼

    著名杀毒软件公司卡巴斯基的研究人员表示,多年来,黑客们一直在使用 Google Play 散布一种非常先进的后门程序,这种后门能够窃取大量敏感数据。

    新智元
  • natapp内网穿透工具

    崔笑颜
  • python 发送邮件解决所有乱码问题 转

    使用python发邮件很简单,但是遇到乱码问题很烦恼。 乱码问题有几种:有发件人名称乱码,有标题乱码,也有正文乱码的问题。

    donghui
  • Python网络——Urllib&Requests

    Urllib 库,它是 Python 内置的 HTTP 请求库.不需要额外安装即可使用,在 Python中,有 Urllib 和 Urlib2 两个库可以用来实...

    羊羽shine
  • [日常] Go语言圣经-竞争条件习题

    练习 9.1: 给gopl.io/ch9/bank1程序添加一个Withdraw(amount int)取款函数。其返回结果应该要表明事务是成功了还是因为没有足...

    陶士涵

扫码关注云+社区

领取腾讯云代金券