01 Servlet技术
Servlet
1、Servlet技术
1.1、什么是Servlet
- Servlet是JavaEE规范之一。规范就是接口
- Servlet就JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener"监听器。
- servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
1.2、手动实现Servlet程序
编写一个类实现Servlet接口
实现service方法,处理请求,并响应数据
到web.xml中去配置servlet程序的访问地址
<!-- servlet标签给Tomcat配置ServLet程序-->
<servlet>
<!--servLet-name标签servLet程序起一个别名(一般是类名〉-->
<servlet-name>Helloservlet</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet> <!--servLet-mapping标签给servLet程序配置访问地址-->
<servlet-mapping>
!--servlet-name标签的作用是告诉服务器,我当前配置的地址给哪个ServLet程序使用-->
<servlet-name>Helloservlet</servlet-name>
<!-- urL-pattern标签配置访问地址 -->
<!-- 斜杠在服务器解析的时候,表示地址为;http://ip:port/工程路径 -->
<!-- /hello表示地址为:http:/lip:port/工程路径/heLLo -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
1.3、Servlet的生命周期
- 执行Servlet构造器方法
- 执行Init初始化方法
- 第一、二步,在第一次访问的时候创建Servlet程序会调用
- 执行service方法
- 第三步,每次访问都会调用
- 执行destroy方法
- web工程停止的时候调用
1.4、通过继承HttpServlet实现Servlet程序
一般在实际项目中,都是使用继承HttpServlet类的方式实现Servlet程序
- 编写一个类去继承HttpServet类
- 根据业务需要重写doGet或doPost方法
- 到web.xml中的配置Servet程序的访问地址
1.5、使用IDEA创建Servlet程序
菜单--->new--->Servlet程序
1.6、Servlet类的继承体系

2、ServletConfig类
- Servlet程序和servletConfig对象都是由Tomcat负责创建,我们负责使用。
- Servlet程序认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的servletConfig对象。
2.1、ServletConfig类的三大作用
可以获联ServLet程序的别名servlet-name的值
获取韧始化参数init-param
获取ServletContext对象
servletConfig.getServletMame()
servletConfig.getInitParameter("username")
servletConfig.getInitParameter("url")
servletConfig.getsServletcontext()
注意点:重写Init方法里面一定要调用父类的init(ServletConfig)操作。
3、ServletContext类
3.1、ServletContext
ServletContext是一个接口,它表示Servlet上下文对象
一个web工程,只有一个ServletContext对象实例。
ServletContext对象是一个域对象。
ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
域对象:像Map一样存取数据的对象。
这里的域指的是存取数据的操作范围,这里即整个web工程。存数据 取数据 删除数据 Map put() get() remove() 域对象 setAttribute() getAttribute() removeAttribute()
3.2、ServletContext类的作用
ServletContext context = getServletConfig().getServletContext();
context.getIintParameter()
context.getContextPath()
/**
/ 斜杠被服务器解析地址为: http://ip:port/工程名/ 映射到IDEA代码的web目录
*/
context.getRealPath("/")
- 获取web.xml中配置的上下文参数context-param
- 获取当前的工程路径,格式:/工程路径
- 获取工程部署后在服务器硬盘上的绝对路径
- 像Map—样存取数据
4、HTTP协议
4.1、http协议
- 所谓HTTP协议,就是指,客户端和服务器之间通信时发送数据时需要遵守的规则。
- HTTP协议中的数据又叫报文。
4.2、请求HTTP协议格式
客户端给服务器发送数据叫请求。
服务器给吝户端回传数据叫响应。
请求又分为GET请求,和POST请求两种
GET
- 请求行
- 请求头
POST
请求行
请求头
空行:间隔作用
请求体
常用请求头
- Content-Type:表示发送的数据的类型
application/x-www-form-urlencoded
表示提交的数据格式是:name=value&name=value,然后对其进行url编码
url编码是把非英文内容转换为∶%xx%xx
multipart/form-data
表示以多段的形式提交数据给服务器(以流的形式提交,用于上传)
- Content-Type:表示发送的数据的类型
常见的GET or POST
- GET
- form标签method=get
- a标签
- link标签引入css
- Script标签引入js文件
- img标签引入图片
- iframe引A=入html页面
- 在浏览器地址栏中输入地址后敲回车
- POST
- form标签 method=post
- GET
4.3、响应HTTP协议格式
响应行
- 响应的协议和版本号
- 响应状态码
- 响应状态描述符
响应头
- key : value 不同的响应头,有其不同含义
空行
响应体
4.4、常用响应码
- 200
- 302:请求重定向
- 404:请求地址错误
- 500:服务器内部错误
4.5、MIME类型
MIME是HTTP协议中数据类型。
MIME的英文全称是"Multipurpose Internet Mail Extensions”多功能Internet邮件扩充服务。MIME类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应。
常见的MIME类型:文件 MIME类型 超文本标记语言文本 .html ,.htm text/html 普通文本 .txt text/plain RTF文本 .rtf application/rtf GIF图形 .gif image/gif JPEG图形 .jpeg,.jpg image/jpeg au声音文件 .au audio/basic MIDI音乐文件 mid,.midi audio/midi,audio/x-midi RealAudio音乐文件 .ra,.ram audio/x-pn-realaudio MPEG文件 .mpg,.mpeg video/mpeg AVI文件 .avi video/x-msvideo GZIP文件 .gz application/x-gzip TAR文件 .tar application/x-tar
5、HttpServletRequest类
5.1、HttpServletRequest类的作用
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpservletRequest对象,获取到所有请求的信息。
5.2、HttpServletRequest类的常用方法
| method | describe |
|---|---|
| getRequestURI() | 获取请求的资源路径 |
| getRequestURL() | 获取请求的统一资源定位符(绝对路径) |
| getRemoteHost() | 获取客户端的ip地址 |
| getHeader() | 获取请求头 |
| getParameter() | 获取请求的参数 |
| getMethod() | 获取请求的方式GET 或POST |
| setCharacterEncoding() | 设置请求体的字符集 |
| setAttribute(key,value); | 设置域数据 |
| getAttribute(key) | 获取域数据 |
| getRequestDispatcher() | 获取请求转发对象 |
| getParameterValues() | 获取请求的参数(多个值的时候使用) |
5.3、请求转发
- 请求转发是指服务器收到请求后,从一个资源跳转到另一个资源的操作。
- 请求转发的特点:
- 浏览器地址栏不发生变化
- 一次请求
- 共享Request域中的数据
- 可以转发到WEB-INF目录下
- 不可以访问工程以外的资源
5.4、base标签
当我们点击a标签进行跳转的时候,浏览器地址栏中的地址是:http:/llocalhost:8080/07_servlet/a/b/c.html
跳转回去的a标签路径是: ../../index.html
所有相对路径在工作时侯都会参照当前浏览器地址栏中的地址来进行跳转。
那么参照后得到的地址是:
http:/localhost:8080/07_servlet/index.html (正确的跳转路径)当我们使用请求转发来进行跳转的时候,浏览器地址栏中的地址是
http:/llocalhost:8080/07_servlet/forwardC
跳转回去的a标签路径是: ../../index.html
所有相对路径在工作时候都会参照当前浏览器地址栏中的地址来进行跳转。
那么参照后得到的地址是:
http:/llocalhost:8080/index.html (错误的路径)base标签可以设置当前页面中所看相对路径工作时,参照哪个路径来进行跳转
<head>
<base href=".../a/b/"> </head>
</head>
5.5、Web中的相对路径和绝对路径
- 在javaWeb中,路径分为相对路径和绝对路径两种:
- 相对路径是:
. 表示当前目录
.. 表示上一级目录
资源名 表示当前目录/资源名 - 绝对路径
- 相对路径是:
5.6、web中的/的不同意义
"/"也是一种绝对路径
“/”被浏览器解析,得到的是 ip:port
"/"被服务器解析,得到的是 ip:port/projectName
特殊情况:response.sendRediect(“/");把斜杠发送给浏览器解析。得到http://ip:port/
6、HttpServletResponse类
6.1、HttpServletResponse类的作用
HttpServletResponse类和HittpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。
HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。
如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置
6.2、两个输出流的说明
| 字节流 | getOutputstream(); | 常用于下载(传递二进制数据) |
| 字符流 | getWriter(); | 常用于回传字符串(常用) |
- 两个流一次只能使用一个,否则报错。
6.3、向客户端回传数据
//通过响应头,设置浏览器也使用UTF-8字符集
resp.setHeader("Content-Type", "text/html; charset=UTF-8");
//它会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
//此方法在获取流对象之前调用才有效
resp.setContentType( "text/html; charset=UTF-8");
6.4、请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。(因为之前的地址可能已经被废弃)
状态码:302
请求重定向的特点
- 浏览器地址栏会发生变化
- 两次请求
- 不共享Request域中的数据
- 不能跳到WEB-INF下的资源
- 可以访问到外部网络资源
实现方式
//请求重定向的第一种方案:
//1、设置响应状态码302,表示重定向,(已搬迁)
resp.setStatus(302);
//2、设置响应头,说明新的地址在哪里
resp.setHeader("Location", "http://localhost:8080"); //请求重定向的第二种方案(推荐使用):
resp.setRedirect("http://localhost:8080");
01 Servlet技术的更多相关文章
- Java Servlet 技术简介
Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...
- Web---演示servlet技术(servlet生命周期),解决中文乱码问题
本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼♪(^∇^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ ...
- 2017.11.2 JavaWeb----第六章 Servlet技术
JavaWeb ------第六章 Servlet技术 (1)在Web应用程序开发中,一般由JSP JavaBean技术和 Servlet技术的结合实现MVC开发模式.在MVC开发模式中将Web程序的 ...
- Java Web之Servlet技术
1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax. ...
- 漫谈servlet技术
1.要谈到Servlet技术,不得不先谈谈动态网页的概念. 编写过网页的人都知道,浏览器能够根据HTML静态标记语言来显示各式各样的网页.但是如果我们需要在网页上完成一些业务逻辑:比如登陆验证.或者说 ...
- JSP+JavaBean+Servlet技术(MVC模型)
一,Servlet开发用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种 ...
- java学习笔记—Servlet技术(11)
如果大家要开发一个动态的网站,那么就必须要学习一种动态的网页开发技术.那么在SUN提供的JavaEE中主要包含两种开发动态网页的技术:Servlet和JSP技术. Servlet技术简介 Servle ...
- JavaWeb:Servlet技术
JavaWeb:Servlet技术 快速开始 Servlet是什么 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 ...
- Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码
先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.h ...
随机推荐
- spring boot:使mybatis访问多个druid数据源(spring boot 2.3.2)
一,为什么要使用多个数据源? 1,什么情况下需要使用多个数据源? 当我们需要访问不同的数据库时,则需要配置配置多个数据源, 例如:电商的业务数据库(包括用户/商品/订单等) 和统 ...
- Golang数组和切片的区别
大纲 数组是固定大小 切片不是动态数组,可以扩容 区别 定义方式不一样 初始化方法不一样 package main import "fmt" func main() { // -- ...
- spring boot:用shardingjdbc实现多数据源的分库分表(shardingsphere 4.1.1/spring boot 2.3.1)
一,shardingjdbc的用途 1,官方站介绍: Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈, 它由 JDBC.Proxy 和 Sidecar( ...
- rsync安装使用中出现的报错
一,查看本地centos的版本: [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ...
- Python函数名的应用和新特性格式化输出
1.函数名指向的是函数的内存地址. def func(): print(123) print(func,type(func)) # <function func at 0x000000000 ...
- Elasticsearch(5):添加文档
1 ES数据读写流程¶ ES中,每个索引都将被划分为若干分片,每个分片可以有多个副本.这些副本共同组成复制组,复制组中的分片在添加或删除文档时必须保持同步,否则,从一个副本中读取的数据将与从另一个 ...
- C#一行代码实现(01)最小化到通知区域
主要功能 实现Winform程序最小化后,隐藏任务栏显示,在通知区域显示.左键点击通知区域图标,可以弹出菜单,包含开机启动和退出程序,可以根据需求进行定制. 一行代码 private void For ...
- JUC之线程池-三大方法-七大参数-四种拒绝策略
线程池:重点 三大方法 七大参数 四种拒绝策略 使用池化技术的理由: 我们的程序伴随着创建销毁线程十分浪费资源, 所以使用线程池,先创建线程,随用随取,用完归还 简单来说就是节约了资源. 使用线程池的 ...
- 阿里云ecs,rds,redis优惠套餐
阿里云ECS优惠套餐 阿里云RDS优惠套餐 阿里云REDIS优惠套餐 阿里云REDIS集群版 阿里云短信资源包
- 【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常
1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatExcep ...