简述servlet
什么是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的更多相关文章
- 简述Servlet的基本概念
Servlet的基本概念 Servlet的概念 http协议作用于客户端-服务端.由客户端发送请求(Request),服务器端接收到数据之后,向客户端发送响应(Response),这就是请求-响应模式 ...
- Servlet题库
一. 填空题 Servlet中使用Session对象的步骤为:调用 HttpServletRequest.getSession() 得到Session对象,查看Session对象,在会话中保 ...
- Java面试题_第二阶段(Servlet、HTTP、Session、JSP、 Ajax、Filter、JDBC、Mysql、Spring)
1.1. 描述Servlet调用过程? 答案: (1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址. (2)浏览器根据 ...
- 优酷土豆2014校园招聘笔试题目之Java开发类
先总体说下题型,共有20道选择题,4道简答题,3道编程题和1道扩展题,题目都比较简单,限时一小时完成. 一.选择题 选择题非常简单,都是基础题,什么死锁发生的条件.HashMap和HashSet查找插 ...
- javaEE简答题整理
1. 什么是JavaEE?其编程思想是什么? JavaEE是一个标准的中间件体系结构,是企业分布式应用开发标准.JavaEE的编程思想是组件—容器. 2. 为什么提出JavaEE体系结构? (1)为满 ...
- java web面试
1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理. 原博http://blog.csdn.net/shuaishenkkk/article/d ...
- 【Javaweb】笔面试题 ---(1)
Javaweb 面试题:理解才是最重要的,而不是原封不动的背下来 一.请简述doget和dopost它们的区别 1) get是从服务器上获取数据,post是向服务器传送数据. 2) 在客户端,Get方 ...
- Java 面试题:百度前200页都在这里了
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
- 史上最全java面试题
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
随机推荐
- Solr入门介绍
solr入门案例 solr是apache下的一个全文检索引擎系统. 我们需要在服务器上单独去部署solr, 通过它的客户端工具包solrJ, 就是一个 jar包, 集成到我们项目中来调用服务器中 ...
- Mysql数据库优化之SQL及索引优化
1. 如何发现有问题的SQL? 使用mysql慢查询日志对有效率问题的Sql进行监视 (1) show variables like 'slow_query_log'; 查看慢查询日志是否 ...
- Servlet+纯java+MySQL实现课程信息的增删改查
Dbutil: package com.zh.util; import java.sql.Connection; import java.sql.DriverManager; import java. ...
- ci 配置ckeditor + ckfinder 无图片上传按钮
一:配置路径有问题 {$base_url}assets/js/editor/ckfinder/ckfinder.html --> http://www.cnblogs.com/assets/j ...
- jQuery 初知
jQuery 初知 介绍: jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗 ...
- 2. Dubbo原理解析-Dubbo内核实现之基于SPI思想Dubbo内核实现(转)
转载自 斩秋的专栏 http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 SPI接口定义 定义了@SPI注解 public ...
- FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解
Problem Description 最后来个字符串签个到吧,这题其实并不难,所需的算法比较基础,甚至你们最近还上过课. 为了降低难度,免得所有人爆零.这里给几个提示的关键字 :字符串,回文,二分, ...
- loj#3 -Copycat
原题链接:https://loj.ac/problem/3 题目描述: --- Copycat 内存限制:256 MiB 时间限制:1000 ms 输入文件: copycat.in 输出文件: cop ...
- HDU 6186 CS Course(前缀+后缀)
http://acm.hdu.edu.cn/showproblem.php?pid=6186 题意:给出n个数,共有n次询问,每次询问给出一个数p,求除去第p个数后的n-1个数的&.|.^值. ...
- 初学者易上手的SSH-struts2 03数据封装
这一章我们一样来获取数据,看看与上一章有什么不同吧.数据封装也有三种方式.下面我们来一一介绍. 第一种:属性封装. 类就用LoginAction吧.里面有两属性,name,pwd.给这两个属性写上ge ...