Http协议
- 超文本传输协议(HTTP,HyperText Transfer Protocol),HTTP是一个客户端和服务器端请求和应答的标准(TCP)。
- 版本 1.0 => 请求数据,服务器返回后, 将会断开连接;1.1 => 请求数据,服务器返回后, 连接还会保持着。 除非服务器 | 客户端 关掉。 有一定的时间限制,如果都空着这个连接,那么后面会自己断掉。
- Http请求:包括 请求行 、 请求头 、请求体
- 请求行:包括请求方式,请求地址,协议版本
POST /examples/servlets/servlet/RequestParamExample HTTP/1.1
- 请求头
Accept: 客户端向服务器端表示,我能支持什么类型的数据。
Referer : 真正请求的地址路径,全路径
Accept-Language: 支持语言格式
User-Agent: 用户代理 向服务器表明,当前来访的客户端信息。
Content-Type: 提交的数据类型。经过urlencoding编码的form表单的数据
Accept-Encoding: gzip, deflate : 压缩算法 。
Host : 主机地址
Content-Length: 数据长度
Connection : Keep-Alive 保持连接
Cache-Control : 对缓存的操作
- Http响应: 响应行 、 响应头 、响应体
- 响应行:协议版本,状态码 ,对应状态码的消息
HTTP/1.1 200 OK
- 响应头
Server: 服务器是哪一种类型。 Tomcat
Content-Type : 服务器返回给客户端你的内容类型
Content-Length : 返回的数据长度
Date : 通讯的日期,响应的时间
- GET 请求和 POST 请求
- GET:数据拼接在地址栏中,数据的长度有限(2k-8K),安全性低
- POST:以流的方式写数据,数据在请求体中。有一个
Content-Length
的请求头表明数据的长度。数据长度更长,安全性更高
- 使用:一般单纯从服务端获取数据或者携带普通数据使用
GET
,需要携带敏感数据或者文件使用POST
Servlet
- Web资源
- 静态资源:html 、 js、 css
- 动态资源:servlet/jsp
- servlet
- servlet是什么:其实就是一个java程序,运行在我们的web服务器上,用于接收和响应客户端的http请求。 更多的是配合动态资源来做。 当然静态资源也需要使用到servlet,只不过是Tomcat里面已经定义好了一个 DefaultServlet。
- servlet的使用
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println(1);
}
@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() {
}
}
public class Servlet2 extends HttpServlet {
/**
* get 请求执行这里
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
System.out.println("doGet");
}
/**
* post 请求执行这里
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
System.out.println("doPost");
}
}
- 配置Servlet,在
WEB-INF/web.xml
写入
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 向tomcat报告, 我这个应用里面有这个servlet, 名字叫做HelloServlet , 具体的路径是com.servlet.HelloServlet -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.servlet.HelloServlet</servlet-class>
</servlet>
<!-- 注册servlet的映射。 servletName : 找到上面注册的具体servlet, url-pattern: 在地址栏上的path 一定要以/打头 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
</web-app>
- Servlet 的生命周期:从创建到销毁的一段时间
- init方法 在创建该servlet的实例时,就执行该方法。一个servlet只会初始化一次, init方法只会执行一次,默认情况下是 : 初次访问该servlet,才会创建实例。
- service方法:只要客户端来了一个请求,那么就执行这个方法了。该方法可以被执行很多次。 一次请求,对应一次service方法的调用
- destroy方法:servlet销毁的时候,就会执行该方法
- 注意:doGet 和 doPost不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行。
- 让Servlet创建实例的时机提前
- 默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。
- 那么这个时候,初次访问,可能会在init方法中逗留太久的时间。 那么有没有方法可以让这个初始化的时机提前一点。
- 在配置的时候, 使用load-on-startup元素来指定, 给定的数字越小,启动的时机就越早。 一般不写负数, 从2开始即可。
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.servlet.HelloServlet04</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
-
ServletConfig
对象
- Servlet的配置,通过这个对象,可以获取servlet在配置的时候一些信息
//1. 得到servlet配置对象 专门用于在配置servlet的信息
ServletConfig config = getServletConfig();
//获取到的是配置servlet里面servlet-name 的文本内容
String servletName = config.getServletName();
System.out.println("servletName="+servletName);
//2、。 可以获取具体的某一个参数。
String address = config.getInitParameter("address");
System.out.println("address="+address);
//3.获取所有的参数名称
Enumeration<String> names = config.getInitParameterNames();
//遍历取出所有的参数名称
while (names.hasMoreElements()) {
String key = (String) names.nextElement();
String value = config.getInitParameter(key);
System.out.println("key==="+key + " value="+value);
}
网友评论