Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思
使用他需要知道:
b/s架构:浏览器和服务器的连接
c/s架构:客户端和服务器的连接
http协议: Hypertext Transfer Protocol, 超文本传输协议
tomcat: Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器
http协议:
书写格式:
HTTP
协议的特点:
1.
支持客户
/
服务器模式。
2.
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的 有
GET
、
POST
。每种方法规定了客户与服务器联系的类型不同。由于
HTTP
协议简单,使得HTTP服务器程序规模小,因而通信速度很快。
3.
灵活:
HTTP
允许传输任意类型的数据对象。传输的类型由
Content-Type
加以标记。
4.
无连接:无连接是表示每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答
后,即断开连接。采用这种方式可以节省传输时间。
HTTP1.1
版本后支持可持续连接。通过这种连接
,
就有可能在建立一个
TCP
连接后
,
发送请求并得到回应,然后发送更多的请求并得到更多的回应.
通过把建立和释放
TCP
连接的开销分摊到多个请求上,则对于每个请求而言,由于 TCP
而造成的相对开销被大大地降低了。而且, 还可以发送流水线请求,也就是说在发送请求
1
之后的回应到来之前就可以发送请求
2.
也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。
5.
无状态:
HTTP
协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送 的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP
之
URL :
HTTP
(超文本传输协议)是一个基于请求与响应模式的、应用层的协议,常基于
TCP
的连接方式, 绝大多数的 Web
开发,都是构建在
HTTP
协议之上的
Web
应用。
HTTP URL (URL
是一种特殊类型的
URI
,包含了用于查找某个资源的足够的信息
)
的格式 如下:
http://host[:port]/[abc_path]
http://IP(
主机名
/
域名
):
端口
/
访问的资源路径
--http
表示要通过
HTTP
协议来定位网络资源;
--host
表示合法的
Internet
主机域名或 者
IP
地址;
--port
指定一个端口号,为空则使用缺省端口
80
;
--abs_path
指定请求资源的
URI
; 如果
URL
中没有给出
abs_path
,那么当它作为请求
URI
时,必
--须以
“/”
的形式给出,通常 这个工作浏览器自动帮我们完成。
HTTP
请求 :
HTTP
请求由三部分组成,分别是:请求行、请求头、请求正文。
通过
chrome
浏览器,
F12 —> Network
查看
1. Get
请求(没有请求体)

2. Post
请求

HTTP
响应:
在接收和解释请求消息后,服务器返回一个
HTTP
响应消息。
HTTP
响应也是由三个部分组成,分别是:状态行、消息报头、响应正文。

格式
状态行
响应头
1
响应头
2
…
响应空行
响应体
消息头
HTTP
消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始
行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行), 消息报头(可选),空
行(只有
CRLF
的行),消息正文(可选)组成。
每一个报头域都是由
名字
+":"+
空格
+
值
组成,消息报头域的名字是大小写无关的。
请求头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
Referer
:该请求头指明请求从哪里来 。
如果是地址栏中输入地址访问的都没有该请求头 地址栏输入地址,通过请求可以看到,此时多了
一个
Referer
的请求头,并且后面的值 为该请求从哪里发出。比如:百度竞价,只能从百度来的才有效果,否则不算;
通常用来做统计工作、 防盗链。
响应头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和 对
RequestURI 所标识的资源进行下一步访问的信息。
--Location
:
Location
响应报头域用于重定向接受者到一个新的位置。
Location
响应报头域,常用在更换域名的时候。
response
.
sendRedirect
(
"http://www.baidu.com"
);
--
Refresh
:自动跳转(单位是秒),可以在页面通过
meta
标签实现,也可在后台实现。
<meta
http-equiv
=
"refresh"
content
=
"3;url=http://www.baidu.com"
>
Tomcat
服务器:
什么是
Tomcat
Tomcat
是一个符合
JavaEE WEB
标准的最小的
WEB
容器
,所有的
JSP
程序一定要有
WEB
容器的支持才能运行,而且在给定的 WEB
容器里面都会支持事务处理操作。
Tomcat
是由
Apache
提供的(
www.apache.org
)提供的可以用安装版和解压版,安装版可以在服务中出现一个 Tomcat
的服务,免安装没有,开发中使用免安装版。
Tomcat
简单的说就是一个运行
Java的网络服务器,底层是
Socket
的一个程序
,它也是
JSP
和
Servlet
的一个容器。
Tomcat
是
Apache
软件基金会(Apache Software Foundation
)的
Jakarta
项目中的一个核心项目,由
Apache
、
Sun
和其他一些公司及个人共同开发而成。
由于有了
Sun
的参与和支持,最新的
Servlet
和
JSP
规范总是能在
Tomcat
中得到体现。因为
Tomcat
技术先进、性能稳定,而且免费,因而深受
Java
爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web
应用服务器
。
Tomcat
服务器是一个免费的开放源代码的
Web
应用服务器,属于轻量级应用服务器, 在中小型系 统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP
程序的首选。 对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache
服务器,可利用它响应
HTML
(标准通用标记语言 下的一个应用)页面的访问请求。实际上 Tomcat
部分是
Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与
Apache
独立的进程单独运行的。
当配置正确时,
Apache
为
HTML
页面服务,而
Tomcat
实际上是在运行
JSP
页面和
Servlet
。另外, Tomcat 和
IIS
等
Web
服务器一样,具有处理
HTML
页面的功能,另外它还是 一个
Servlet
和
JSP
容器,独立的 Servlet
容器是
Tomcat
的默认模式。不过,
Tomcat
处理静态
HTML
的能力不如
Apache 服务器。目前 Tomcat
最新版本为
9.0
。
Servlet
的实现
Servlet
是
Server
与
Applet
的缩写,是服务端小程序的意思。使用
Java
语言编写的服务器端程序,可以生成动态的 WEB
页,
Servlet
主要运行在服务器端,并由服务器调用执行, 是一种按照
Servlet
标 准来开发的类。 是 SUN
公司提供的一门用于开发动态
Web
资源的技术。(言外之意:要实现
web
开 发,需要实现 Servlet
标准)
Servlet
本质上也是
Java
类,但要遵循
Servlet
规范进行编写,没有
main()
方法,它的创建、使用、 销毁都由 Servlet
容器进行管理
(
如
Tomcat)
。(言外之意:写自己的类,不用写
main
方法,别人自动调用)
Servlet
是和
HTTP
协议是紧密联系的,其可以处理
HTTP
协议相关的所有内容。这也是
Servlet
应用广泛的原因之一。
提供了
Servlet
功能的服务器,叫做
Servlet
容器,其常见容器有很多,如
Tomcat, Jetty, WebLogicServer, WebSphere, JBoss 等等。
Servlet 如何创建 两种方式
继承
HttpServlet
类,并到如响应的包,该类中已经完成了通信的规则,我们只 需要进行业务的实现即可。
实现接口Servlet,重写 service 方法。
在规范中有一个叫做
service
的方法,专门用来做
请求处理的操作,业务代码则可以写在该方法中。
设置注解
在完成好了一切代码的编写后,还需要向服务器说明,特定请求对应特定资源。
开发servlet
项目,使用
@WebServlet
将一个继承于
javax.servlet.http.HttpServlet
的类定义为
Servlet 组件。在Servlet3.0
中 , 可以使用
@WebServlet
注解将一个继承于
javax.servlet.http.HttpServlet
的类 标注为可以处理用户请求的 Servlet
。
用注解配置
Servlet
@WebServlet
(
name
=
"Servlet01"
,
value
=
"/ser01"
)
@WebServlet
(
name
=
"Servlet01"
,
urlPatterns
=
"/ser01"
)
也可以配置多个访问路径
@WebServlet
(
name
=
"Servlet01"
,
value
=
{
"/ser01"
,
'/ser001'
})
@WebServlet
(
name
=
"Servlet01"
,
urlPatterns
=
{
"/ser01"
,
'/ser001'
})
生命周期:
init 在 Servlet
实例创建之后执行(证明该
Servlet
有实例创建了)
service 每次有请求到达某个 Servlet
方法时执行,用来处理请求(证明该
Servlet
进行服务了)
destory Servlet
实例销毁时执行(证明该
Servlet
的实例被销毁了)
内置对象方法的使用:
HttpServletRequest (req)
HttpServletRequest
对象 :
主要作用是用来接收客户端发送过来的请求信息
HttpServletResponse( resp )
HttpServletResponse对象:
向客户端输
出数据,需要通过
response
对象
。
HttpServletRequest (req)
常用方法:

getservletpath:获取servlet的映射名称
getcontextpath:获取项目的映射名称
getparametervalues:获取复选框
请求乱码问题
由于现在的
request
属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程 中默认使用的编码方式为 ISO-8859-1(
此编码不支持中文
)
,所以解析时一定会出现乱码。要想解决这种 乱码问题,需要设置 request
中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。
方式一:
request
.
setCharacterEncoding
(
"UTF-8"
);
resp.setContextType("text/html;charset=UTF-8")
这种方式只针对
POST
有效(必须在接收所有的数据之前设定)
方式二:
new
String
(
request
.
getParameter
(
name
).
getBytes
(
"ISO-8859-1"
),
"UTF-8"
);
借助了
String
对象的方法,该种方式对任何请求有效,是通用的。
Tomcat8
起,以后的
GET
方式请求是不会出现乱码的
IDE:设置
Help--custom vm options--Dfile.encoding=UTF-8
转发和重定向:
1.转发一次请求,重定向两次请求
2.转发在项目内部,不可以跨域,重定向可以跨域
3.重定向由于两次请求,req作用域不可以再带值

req.getRequestDispatcher("...jsp?name==HelloWorld").forward(req,resp) //转发
resp.sendRediirect("...jsp?name=HelloWorld") //重定向
单列模式
懒汉式 默认
1.构造器私有化
2.提供一个static静态属性对象
3.提供一个public的static方法,返回一个实例对象
4.懒汉模式,只有在用户调用方法时,才会创建对象,之后再次调用,返回的是同一对象
饿汉式
在类加载的时候就会创建对象
三大作用域
HttpServletRequest : 生命周期 :一次请求之间
req.setAttribute("key","value")//设置值
req.removeAttribute("key")//移除值
req.getAttribute("key")//获取值
一次请求之间
HttpSession : 生命周期 :一次会话之间(默认存活时间30分钟)
req.getSession(false) :有Session直接用,没有则不用创建
req.getSession(true):有Session直接用,没有创建一个新的Sesssion
唯一标识:SessionID
req.getSession(true):有Session直接用,没有创建一个新的Sesssion
唯一标识:SessionID
HttpServletContext :生命周期:服务器启动关闭之间
获取:ServletContext
1.getServletContext
2.req.getServletContext
3.req.getSession().getServletContext()
2.req.getServletContext
3.req.getSession().getServletContext()
req.getServletContext().setAttribute()//获取
req.getServletContext().removeAttribute() //移除
最重要作用:获取文件或文件夹的绝对路径
三个方法存, 取,移除方法
setAttribute("key","value")//设置值
removeAttribute("key")//移除值
getAttribute("key")//获取值
获取文件或者文件夹的绝对路径
String upload = req.getServletContext().getRealPath("upload//文件地址");
System.out.println(upload//文件地址+"<<<");