Servlet基础
一、网络基础概念
互联网,英文是internet,又称国际网络。是网络与网络之间-所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一且巨大的全球化网络,在这个网络中有交换机、路由器等网络设备、各种不同的连接链路、种类繁多的服务器和数不尽的计算机、终端。使用互联网可以将信息瞬间发送到千里之外的人手中,它是信息社会的基础。
二、HTTP简介
HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
2.1 HTTP请求报文
HTTP 报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。一 般一个HTTP请求报文由请求行、请求报头、空行和请求数据4个部分组成。如下图:
①请求行由请求方法、URL字段和HTTP协议的版本组成。
②请求报头通知服务器关于客户端请求的信息。
③空行
④请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。
2.2 HTTP响应报文
在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP 的响应报文由状态行、响应报头、空行、响应正文组成。
①状态行:一般由服务器HTTP协议的版本、服务器发回的响应状态码、状态码的文本描述等组成。
②响应报头:用于服务器传递自身信息的响应
③空行
④响应正文就是服务器返回的资源的内容。
三、B/S与C/S应用
B/S:浏览器与服务器应用。体验要求一般,加载资源少;升级方便、无需安装、维护便利、跨平台。比如淘宝页面。
C/S:客户端和服务器应用。体验要求极高,加载资源多;升级不方便、安装不方便、维护不方便、不跨平台。比如英雄联盟游戏
B/S开发模式也叫web开发。
四、连接的建立跟断开
4.1、连接的建立(3次握手)
过程:
①客户端对服务器说:我想连接你。(请求连接)
②服务器对客户端说:我知道了,可以连接。(同意连接)
③客户端对服务器说:我们连接吧。(确认连接)
三次握手的结果是:客户端和服务器都可以发送消息和接收消息,即可以数据传输。
①第一次握手:
客户端将标志位SYN置1,随机产生一个值seq=x,并将数据包发给服务器。然后客户端进入SYN_SENT状态,等待服务器确认。
②第二次握手:
服务器收到数据包后标志位SYN=1知道客服端请求建立连接,服务器将标志位SYN和ACK都置1,随机产生一个值,并将数据包发给客户端确认连接请求,服务器进入SYN_RCVD状态
③第三次握手:
客户端收到确认后若ACK为1,则将该数据包发送给服务器,服务器检查ACK为1则连接建立成功,客户端与服务器进入ESTABLISHED状态完成三次握手,可以传输数据。
4.2 断开连接(4次挥手)
过程:
①客户端对服务器说:我想断开。(请求断开)
②服务器对客户端说:我知道了,但是我还没准备好,请等待。(准备断开的工作)
③服务器对客户端说:数据发完了,可以断开。(关闭数据传送)
④客户端对服务器说:那我们断开吧。(确认断开)
客户端等待了2MSL后依然没有收到回复,则证明服务器已正常断开,客户端也断开连接。
四次挥手的结果是:客户端和服务端总共发送4个包确认连接的断开
①第一次挥手:
客户端发送一个FIN,用来关闭客户端到Server的数据传送,客户端进入FIN_WAIT_1状态。
②第二次挥手:
服务器收到FIN后,发送一个ACK给客户端,服务器进入CLOSE_WAIT状态。
③第三次挥手:
服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
④第四次挥手:
客户端收到FIN后,客户端进入TIME_WAIT状态,发送ACK给服务器,服务器收到之后进入CLOSED状态,完成四次握手。
五、服务器软件介绍
Tomcat是目前非常流行的一款开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。它和其它服务器软件类似,能将本地资源向外提供服务。
常见Web应用服务器:Tomcat(Apache)、Weblogic( Oracle), WebSphere(IBM)和JBoss( Redhat)。
六、Tomcat下载、安装、及目录介绍
官网下载:http://tomcat.apache.org/ .默认端口号是8080
mysql的默认端口号:3306
安装:解压到任意目录(注意路径不要有中文和空格)
目录介绍:
bin:存放可执行文件
conf:存放配置文件
lib:存放第三方依赖包
logs:存放日志
temp:存放临时文件
webapps:存放应用程序
work:存放运行时的文件
七、Servlet
7.1、在IDEA中配置Tomcat
7.2、web项目的打包方式(war)
web项目的默认打包方式是war
java项目的默认打包方式是jar
7.3、Servlet简介
servlet是运行在服务器上的应用程序。
7.4、Servlet使用步骤
- 创建web项目,编写web.xml
<servlet>
<servlet-name>Index</servlet-name>
<servlet-class>com.blb.seven.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Index</servlet-name>
<url-pattern>/IndexServlet</url-pattern>
</servlet-mapping>
-
编写Servlet
-
运行项目
-
http://ip:端口号/项目名称/映射地址
7.5、Servlet实例
- ①实现servlet接口
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/HelloServlet")
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
- ②继承HttpServlet类(实现servlet接口)
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Servlet是单实例多线程的。
一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。
7.6、Servlet生命周期
-
加载跟实例化Servlet
Servlet 通过调用 构造 方法进行实例化,构造方法必须为无参构造方法。默认是在第一次被访问的时候构造对象。也可以在web.xml中通过N配置Servlet被创建的时机。(N为一个整数表示优先级,>=0表示在web服务器启动的时候创建,<0表示第一次访问时创建)
-
Servlet 实例创建完毕后立马通过调用 init () 方法进行初始化,如果初始化失败抛出ServletException,Servlet对象将会被垃圾回收器回收。init初始化操作只会执行一次。初始化时机紧跟Servlet创建。
-
Servlet 调用 service() 方法来处理客户端的请求。
-
Servlet 通过调用 destroy() 方法终止(结束)。
-
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
7.7、Servlet接收表单数据与返回数据
接收表单数据
request.getParameter("xxx");
返回数据
response.getWriter().write("xxx");
7.8、get请求与post请求
问题:get请求与post的请求的区别是什么?
get:
1,参数拼接在url,不安全
2,只能是字符串类型
3,大小有限制2kb,速度快
post:
1,参数封装到请求体,安全
2,还可以是非字符串类型比如文件
3,理论上大小没限制,速度慢
7.9、转发与重定向
7.9.1、转发
req.getRequestDispatcher("xxx").forward(req, res);
一次请求,返回200,地址栏没变化
7.9.2、重定向
res.sendRedirect("xxx");
二次请求,第一返回302,第二次请求会使用第一次请求响应中的Location头信息地址进行访问。第二次请求返回200或者304,地址栏会改变。