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 ...
随机推荐
- k8s集群添加新得node节点
服务端操作: 方法一: 获取master的join token kubeadm token create --print-join-command 重新加入节点 kubeadm join 192.16 ...
- 租房数据分析,knn算法使用
import numpy as np import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel('jiemo.x ...
- IIS日志文件越来越大导致C盘空间变小处理方法
问题概述 C:\inetpub\logs\LogFiles\W3SVC文件夹越来越大,IIS日志会消耗大量的硬盘空间,有潜在写满整个硬盘空间的风险,为了解决这个问题很多用户会选择关闭日志,但显然IIS ...
- GCC编译选项笔记
警告选项 -Wall:开启大多数的警告信息 -Wextra:开启额外的警告信息,比如参数未使用警告(-Wunused-parameter) -Werror:将警告当作错误,中断编译 优化选项 -O,- ...
- docker启动服务---------------mysql
1.查找镜像: docker search mysql 也可以去官网查看镜像tag,选择自己需要的版本,否则会下载最新版本:https://hub.docker.com/_/mysql/ 2.下载镜像 ...
- linux(centos8):用sort对文本内容排序
一,sort的用途 1,作用: sort命令用于将文本文件内容加以排序. 它能够以行为单位来排序 2,sort常与uniq搭配使用,原因: 用uniq命令去重时, 需要相同的每行位置相邻才能生效, 所 ...
- subprocess中命令为参数序列和字符串的区别
参数args 参数args可以是一个参数序列,也可以是一个单独的字符串.参数序列通常是首选的,因为它允许模块处理参数的转义和引号(例如,允许文件名中有空格). 如果传递参数序列,默认情况下,程序执行序 ...
- python 微信小程序自动化
微信小程序自动化 https://www.cnblogs.com/yyoba/python27 - FautoTesthttps://www.cnblogs.com/yyoba/p/9973731.h ...
- 一篇理解什么是CanSet, CanAddr?
什么是可设置( CanSet ) 首先需要先明确下,可设置是针对 reflect.Value 的.普通的变量要转变成为 reflect.Value 需要先使用 reflect.ValueOf() 来进 ...
- 显示器类型对美乐威NDI IP转换器延时影响测试
背景 用户在选择用网络传输视频时,传输延迟通常是他们非常关心的数据.集成商在探究如何降低视频传输延时,往往专注于网络本身和视频编码的优化,容易忽略视频解码和播出也是整个视频传输过程中非常重要的环节.本 ...