什么是Servlet?

Servlet是一种动态的web开发技术,本质就是一个运行在服务端的Java小程序,负责处理业务逻辑,生成动态web内容。

编写一个servlet步骤:
 1.编写一个类
  继承HttpServlet
  重写doGet或者doPost方法

(截图里实现了Servlet接口,其实可以不用实现的)

2.编写配置文件(web-inf/web.xml)
  注册servlet
  绑定路径


 3.访问
  http://主机:端口号/项目名/路径

例:http://localhost:8080/Servlet/ss    (Servlet包下的ss)

接受参数:  格式:key=value
 String value=request.getParameter("key")
 例如: http://localhost/day09/hello?username=tom
 request.getParameter("username")就可以获取tom值
回写内容:
 response
 response.getWriter().print("success");
 处理响应数据中文乱码:
 resp.setContentType("text/html;charset=utf-8"); //建议大家放在方法中的第一行

Servlet的体系结构

  Servlet(接口)

    ↓

  GenericServlet(抽象类)

    ↓

  HttpServlet(抽象类)

    ↓

  自定义Servlet

servlet常用方法: 

   void init(ServletConfig config):初始化
      void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
           void destroy():销毁
  
           ServletConfig getServletConfig() :获取当前servlet的配置对象

GenericServlet常用方法: 
  除了service方法没有实现,其他都实现了
  空参的init();方法,是专门留给开发者重写的方法。在init(ServletConfig config)中会调用init();但是,开发者千万不要重写带有参数的这个init方法。
 
 HttpServlet常用方法:
  对service方法进行了实现,把Service的参数做了强转,并调用了重载的Service();方法,重载的service方法根据请求方式的不同调用相应doXxx()方法(doGet和doPost方法)

Servlet的生命周期

Servlet是单实例,多线程的。默认第一次访问的时候,服务器创建Servlet,并调用init方法实现初始化操作(init只会执行一次,所以是单实例),并调用一次service方法。

每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑。

当servlet被移除的时候,或者服务器正常关闭的时候,服务器调用servlet的destory方法进行销毁操作。

正常关闭:

右键:

非正常关闭:

url-pattern的配置:
 方式1:完全匹配  必须以"/"开始 例如: /hello /a/b/c
 方式2:目录匹配  必须"/"开始  以"*"结束   例如: /a/*  /*
 方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp  *.do  *.action
 
 优先级:
  完全匹配>目录匹配>后缀名匹配

总而言之:就是优先加载url-pattern比较详细的路径。

在Servlet标签中有一个子标签,Load-on-start-up,作用:用来修改servlet的初始化时机,取值:正整数  值越大优先级越低。

当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
 若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息(defaultServlet),处理404之类的。

ServletContext上下文(全局管理者)

是一个项目的引用,代表了当前项目。

当项目启动的时候,服务器为每一个web项目创建一个ServletContext对象。

当项目被移除或者服务器关闭的时候,销毁ServletContext对象。

ServletContext的作用:
  1.获取全局的初始化参数
  2.共享资源(xxxAttribute)
  3.获取文件资源
  4.其他操作
获取servletcontext:
  方式1: getServletConfig().getServletContext()
  方式2: getServletContext();

常用方法:
   1.  String  getInitParameter(String key):通过名称获取指定的参数值
     Enumeration getInitParameterNames() :获取所有的参数名称 
    在根标签下有一个 context-param子标签 用来存放初始化参数

<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>

2.  setAttribute(String key,Object value);//设置值
     Object getAttribute(String key);//获取值
     removeAttribute(String key)://移除值

3.
   String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)

  运行结果:  
     InputStream getResourceAsStream(String path):以流的形式返回一个文件

4.
  获取文件的mime类型  大类型/小类型   String getMimeType(String 文件名称)

ServletContext是java四大域对象之一。

java四大域对象总结 后面会介绍。

获取文件的路径: 在没有ServletContext的情况下,通过类加载器也能获取文件的路径:

注意:这里的文件必须放在src目录下,不然获取不到。

运行结果:

简述servlet的更多相关文章

  1. 简述Servlet的基本概念

    Servlet的基本概念 Servlet的概念 http协议作用于客户端-服务端.由客户端发送请求(Request),服务器端接收到数据之后,向客户端发送响应(Response),这就是请求-响应模式 ...

  2. Servlet题库

    一.    填空题 Servlet中使用Session对象的步骤为:调用  HttpServletRequest.getSession()  得到Session对象,查看Session对象,在会话中保 ...

  3. Java面试题_第二阶段(Servlet、HTTP、Session、JSP、 Ajax、Filter、JDBC、Mysql、Spring)

    1.1. 描述Servlet调用过程? 答案: (1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址. (2)浏览器根据 ...

  4. 优酷土豆2014校园招聘笔试题目之Java开发类

    先总体说下题型,共有20道选择题,4道简答题,3道编程题和1道扩展题,题目都比较简单,限时一小时完成. 一.选择题 选择题非常简单,都是基础题,什么死锁发生的条件.HashMap和HashSet查找插 ...

  5. javaEE简答题整理

    1. 什么是JavaEE?其编程思想是什么? JavaEE是一个标准的中间件体系结构,是企业分布式应用开发标准.JavaEE的编程思想是组件—容器. 2. 为什么提出JavaEE体系结构? (1)为满 ...

  6. java web面试

    1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理. 原博http://blog.csdn.net/shuaishenkkk/article/d ...

  7. 【Javaweb】笔面试题 ---(1)

    Javaweb 面试题:理解才是最重要的,而不是原封不动的背下来 一.请简述doget和dopost它们的区别 1) get是从服务器上获取数据,post是向服务器传送数据. 2) 在客户端,Get方 ...

  8. Java 面试题:百度前200页都在这里了

    基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...

  9. 史上最全java面试题

    基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...

随机推荐

  1. codeforces #305 E Mike and friends

    原问题可以转化为:给定第k个字符串,求它在L-R的字符串里作为子串出现了多少次 定义子串为字符串的某个前缀的某个后缀(废话) 等价于我们把一个字符串插入到trie里,其过程中每个经过的节点和其向上的f ...

  2. Eclipse新建Java工程出现红色感叹号怎么解决?

    安装了新版本的JDK之后,在Eclipse中新建Java工程出现红色感叹号怎么解决? 其实只要在Eclipse中重新设置一下JDK路径就行了 路径:右键Java工程>>Build Path ...

  3. Python 事件驱动了解

    事件驱动 gevent协程可实现自动切换,协程在遇到IO时会进行切换,到另外一个请求,那协程是如何得知在什么时候在切换回去呢?   通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一 ...

  4. 剑指offer(63)数据流中的中位数

    题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值.我们 ...

  5. Learning-Python【3】:Python中的基本运算符

    一.算数运算 二.比较(关系)运算 比较运算只能在同类型之间进行,其中 int 与 float 同属于数字类型 三.赋值运算 1.增量赋值 2.链式赋值 3.交叉赋值 交换两个数的值,通常要借助第三个 ...

  6. Linux常用命令——文件搜索命令

    Linux常用命令——文件搜索命令 Linux  以#号开头的内容都是内容描述或配置项 find 描述:文件搜索 语法:find [搜索范围] [范围条件] . 当前目录 示例:[root@local ...

  7. angular --- s3core移动端项目(二)

    product-ctrl.js angular.modules('myApp').controller('ProductCtrl',['$scope','$rootScope','$timeout', ...

  8. babel-node + Express NodeJS项目搭建指南

    1.搭建Node.js环境 从官网下载安装 2.搭建Express环境 express 是 node.js的短精简的Web框架,官网:http://www.expressjs.com.cn/ 安装: ...

  9. fcn+caffe+siftflow实验记录

    环境搭建: vs2013,编译caffe工程,cuda8.0,cudnn5.1,python2.7. 还需要安装python的一些包.Numpy+mkl  scipy  matplotlib  sci ...

  10. 七天学会ASP.NET MVC ——深入理解ASP.NET MVC

    七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC   系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二) ...