Servlet基础(2)

Servlet的生命周期:
生命周期:自然界人从出生到最终走向西方极乐世界,这个周期过程就是人的生命周期,
其实servlet的生命周期和人的一样,从servlet对象被创建,经过使用servlet对象,
到最终servlet对象被销毁,整个过程就是servlet的生命周期。
与生命周期相关的三个方法:
>>> 初始化阶段:
init(ServletConfig config) 初始化方法:首次访问这个Servlet,servlet对象会被创建,执行初始化方法,执行一次。
>>> 运行阶段:
service(ServletRequest req, ServletResponse res) 服务方法:每次访问servlet时,服务方法都会被执行,执行多次。。
>>> 销毁阶段:
destroy()销毁方法:在服务器正常关闭时。会执行销毁方法,执行一次。
比如:

 public class LifeServlet extends GenericServlet {/*** 初始化方法*/@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("首次访问LifeServlet时,会执行这个初始化方法-------------");}/*** servlet的服务方法*/@Overridepublic void service(ServletRequest arg0, ServletResponse arg1)throws ServletException, IOException {System.out.println("每次访问lifeservlet,都会执行这个服务方法--------");}/*** 销毁方法*/@Overridepublic void destroy() {System.out.println("在服务器关闭时,会执行销毁方法----------");}}

在web.xml文件上面配置访问路径:

               <servlet><servlet-name>lifeServlet</servlet-name><servlet-class>cn.itcast.firstmyapp.servlet.LifeServlet</servlet-class></servlet><servlet-mapping><servlet-name>lifeServlet</servlet-name><url-pattern>/life</url-pattern></servlet-mapping>

Servlet应用-HttpServlet
在开发中,通常浏览器访问web服务器端的资源,是带有协议的访问,比如说http协议、https协议等,所以说
在创建servlet时。需要使用带有协议的servlet,那么咱们程序员在创建servlet时,通常用继承HttpServlet的
方式来实现。
1.查看HttpServlet源码得到的结论:
在HttpServlet里面重写service方法时,因为在service方法里面,最终调用doGet或者doPost方法,
所以说在重写服务方法时,一般情况下不会重写service方法,而是直接重写doGet和doPost方法
在客户端发送get请求,在服务器端就用doGet方法接收、
在客户端发送Post请求,在服务器端就用doPost方法来接收
代码如下:

  public class MyHttpServlet extends HttpServlet{/*** 接收客户端发送的get请求*/public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String method = req.getMethod();System.out.println(method);System.out.println("这是发送的get请求");}/*** 接收客户端发送的post请求*/public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String method = req.getMethod();System.out.println(method);System.out.println("这是发送的Post请求");}}

在开发中,注意的细节:
>>>1.在使用对象时,使用带有协议的请求和响应对象HttpServletRequset和HttpServletResponse
>>>2.在开发时,继承HttpServlet是,直接重写doGet和doPost方法,而不是重写service方法
访问servlet的具体执行过程:见图分析。

使用Eclipse工具开发servlet
通过开发工具创建servlet有两种方式:
>>> 1.先创建一个普通的java类,需要去实现Servlet接口,或者继承对应的HttpServlet(GenericServlet)类,
咱们普通的java类就具有了servlet功能,所以需要手动在web.xml配置文件中添加访问servlet的路径信息。
>>> 2.直接创建servlet,会自动在web.xml文件中添加访问servlet的路径信息。
步骤:
1.新建web项目:
比如说:创建一个web项目名称:chapter03
2.创建一个servlet程序:
比如说:先创建一个包,名称cn.itcast.servlet ,servlet的名称:TestServlet01
3.部署和访问servlet:
通过开发工具部署web项目,如chapter03,访问它下面的servlet资源:
访问的地址:http://localhost:8080/chapter03/testServlet01

注意:一般情况下,为了简化开发,咱们会在doPost方法里面调用doGet方法。
具体见下代码:

  /***  doGet方法,用来接收浏览器发送的get请求*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubPrintWriter out = response.getWriter();out.print("this servlet is created by eclipse");}/*** doPost方法,用来接收浏览器发送的post请求*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}

需求: 可以发送get请求和post请求得到1到100之间的和

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int sum=0;for(int i=0;i<=100;i++){sum=sum+i;}------}/*** doPost方法,用来接收浏览器发送的post请求*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}

实现Servlet的虚拟路径映射
1.Servlet的多重映射:一个Servlet,可以对应多个访问路径。
比如:一个servlet对应的访问路径:/test02 或者 /test03

         </servlet-mapping><servlet-mapping><servlet-name>TestServlet01</servlet-name><url-pattern>/test02</url-pattern></servlet-mapping><servlet-mapping><servlet-name>TestServlet01</servlet-name><url-pattern>/test03</url-pattern></servlet-mapping>

2.Servlet的映射路径可以使用通配符
servlet的映射路径有三种方式:、
>>> 完全目录匹配: 比如 /hello
>>> 目录匹配: 比如 /abc/* 或者 /*
>>> 扩展名匹配: .do ,.action 注意 /*.do这种写法是错误的。
优先级:完全目录匹配>目录匹配>扩展名匹配
3.缺省Servlet
什么是缺省Servlet:它的映射路径 “/” ,代表这是一个缺省的servlet.
缺省的servelt作用:处理请求的资源找不到的问题(404 代表请求的资源找不到)

ServletConfig接口
什么是ServletConfig: 它是servlet的配置对象,作用就是获取与servlet的初始化参数。
它的子类是GenericServlet和HttpServlet.
它被实列化是通过web服务器实现的。
得到servletConfig对象:getServletConfig()
ServletConfig常用的方法:
>>>> 1. 获取servlet的初始化参数的值:getInitParameter(String name):根据encoding获取utf-8
>>>> 2. 获取servlet初始化参数的名称:getInitParameterNames() :获取encoding和username等名称
>>>> 3. 得到servletContext对象:getServletContext()
>>>> 4. 获取servlet的名称:getServletName():对应web.xml里面TestServlet02
初始化参数的配置:

     <!-- servlet初始化参数的配置 --><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>username</param-name><param-value>x</param-value></init-param>

3.ServletContext接口
ServletContext对象是在web服务器启动时就创建了,是web服务器创建的servletContext对象,
每一个web项目只有一个ServletContext对象。
ServletContext对象的作用:获取web应用程序的初始化参数,在web应用程序能共享数据,获取web项目下的资源文件。
得到ServletContext对象:
>>>>1.通过ServletConfig对象: config.getServletContext()
>>>>2.直接得到: getServletContext();

获取web应用程序的初始化参数(web应用程序就是web项目)
>>>> 1. 获取全局初始化参数的值:getInitParameter(String name)
>>>> 2. 获取全局初始化参数的名称:getInitParameterNames()
比如:

<!-- 配置全局的初始化参数 --><context-param><param-name>AAA</param-name><param-value>aaa</param-value></context-param><context-param><param-name>BBB</param-name><param-value>bbb</param-value></context-param>

2.实现多个servlet对象之间共享数据:因为一个web项目只有一个ServletContext对象。
ServletContext对象就是域对象:域对象在一定范围内能存值和取值。
域对象相关的方法:
存值:void setAttribute(String key,Object obj);
取值:Object obj = getAttribute(key);
删除值:void removeAttribute(key);
比如:在TestServlet04里面存值:

  //1.得到ServletContext对象ServletContext context = this.getServletContext();//2.存值context.setAttribute("key", "servlet04里面存的值----");

在TestServletO5里面获取值:

 //1.得到servletContext对象ServletContext context = this.getServletContext();//2.从ServletContext取值Object obj =context.getAttribute("key");String value=obj.toString();response.setContentType("text/html;charset=utf-8");response.getWriter().print(value);

3.获取Web下面的资源文件
通过ServletContext对象能够获取Web项目下面文件的字节输入流,或者文件的绝对路径。
路径问题:
普通java项目:直接使用jdk编译java文件,所以说文件的路径是相对于工作空间。
比如:

Properties por = new Properties();InputStream inStream = new FileInputStream("src/config.properties");por.load(inStream);String value =por.getProperty("key");System.out.println(value);

web项目:运行在tomcat服务器上面的,所有说文件的路径是相对于tomcat服务器。
服务器端是没有src这个目录,写路径不能写src,必须相对于tomcat服务器端的路经。
1.获取文件的自己输入流:路径是相对于tomcat服务器的路径
InputStream in =getResourceAsStream(String path)
比如:

// 获取文件的字节输入流ServletContext context = this.getServletContext();String path="/WEB-INF/classes/config.properties";InputStream in = context.getResourceAsStream(path);Properties pro= new Properties();pro.load(in);//获取配置文件的值String v1 = pro.getProperty("Company");String v2= pro.getProperty("Address");response.getWriter().print("company name :"+v1+" company address :"+v2);

2.获取文件的绝对路径:路径是相对于服务器端的路径
String realPath = getRealPath(path);
比如:

 //1.得到ServletContext对象ServletContext context = this.getServletContext();//2.获取文件的绝对路径String path="/WEB-INF/classes/config.properties";//3.调用getRealPath//E:\soft\apache-tomcat-7.0.55\webapps\chapter03\WEB-INF\classes\config.propertiesString realPath = context.getRealPath(path);System.out.println(realPath);InputStream in = new FileInputStream(realPath);

学习javaweb第四天相关推荐

  1. JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  2. Silverlight4 学习视频(四)

    Silverlight教程 Silverlight 4 新特性归纳整理 1.网络摄像机和麦克风允许为聊天或客户服务应用程序共享视频和音频: 2.视频和音频本地记录功能可以直接捕捉原始视频,扩大应用场景 ...

  3. python学习之第四课时--运算符

    python学习之第四课时--运算符 运算符 1.算数运算 运算符 描述 实例 a=10,b=20 = 加,两个对象相加 a+b输出30 - 减,一个数减去另一个数 a-b输出-10 * 乘,两个数相 ...

  4. ASP.NET Core 2 学习笔记(四)依赖注入

    原文:ASP.NET Core 2 学习笔记(四)依赖注入 ASP.NET Core使用了大量的依赖注入(Dependency Injection, DI),把控制反转(Inversion Of Co ...

  5. Spring Cloud 学习笔记(四)-Spring Cloud Hystrix

    Spring Cloud 学习笔记(四)-Spring Cloud Hystrix 由于前一阵子项目的原因,今天才继续弄上,今天想学习一下Hystrix组件 这个组件还挺抽象的,最开始我一直没太明白, ...

  6. Android画图学习总结(四)——Animation(中)

    在Android画图学习总结(四)--Animation(上)中详细介绍了Tween Animation的定义.使用,由于篇幅有限,很多中重要的方面没有说明,这篇文章一方面做个完整的总结说明,另外一方 ...

  7. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  8. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  9. Windows x64内核学习笔记(四)—— 9-9-9-9-12分页

    Windows x64内核学习笔记(四)-- 9-9-9-9-12分页 前言 9-9-9-9-12分页 实验一:线性地址转物理地址 页表基址 定位基址 PTE to PXE 实验二:通过页表基址定位各 ...

  10. Intel VT学习笔记(四)—— VMCS(下)

    Intel VT学习笔记(四)-- VMCS(下) 要点回顾 VM-Exit Information Guest state fields 代码实现 参考资料 要点回顾 在上一篇中,我们了解了如何设置 ...

最新文章

  1. 编译linux内核的错误,linux内核编译错误
  2. python如何读写文件-Python之写入文件(1)
  3. SAP WebClient UI页面标签的决定逻辑介绍
  4. 成功网络管理员必备“软件”素质
  5. DVD-Cloner 2022 for mac(DVD光盘刻录工具)
  6. 【BZOJ4199】【NOI2015】品酒大会(后缀数组)
  7. STM32小车篇之超声波测距
  8. 字符串类型变量的相关内置函数详解
  9. 中国已消失的 9 所世界级大学
  10. SpringBoot + Vue 结合支付宝支付(3)--调用api
  11. bzoj4987 Tree [树形背包]
  12. 初步了解3dmax建模方式和多边形建模
  13. 【问】前台销售时卡顿
  14. 申请python原因_为什么很多人喜欢 Python?
  15. 【Flink】搭建单机环境
  16. Hbase完全分布式部署
  17. 谁说大厂都用 React,微信读书官网用 Vue
  18. java字符串大小写转化
  19. 个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?
  20. 【计算机图形学】壹 · 光栅图形学之直线段的扫描转换算法

热门文章

  1. Mac OS X 背后的故事(九)半导体的丰收(中)
  2. 冬瓜哥对时间和空间的理解方式—时空参悟(上)
  3. PostgreSQL checksum与Data Corruption
  4. 为什么uzi排到古手羽就秒_Uzi排到古手羽秒退引热议?“网友发表看法,弹幕疑似给出答案”...
  5. mind map 思维导图
  6. span超过容器自动换行
  7. 2017、2018年JS面试题记录分享
  8. go每日新闻--2021-01-16
  9. [置顶]史上最详细最全的Linux上安装Oracle的教程-centos7-humf
  10. [技术讨论]网络软件开发的bug分析与公司开发管理问题之阿里篇