Java网络编程

 
GET / HTTP/1.1
Host: 127.0.0.1:8088
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,ja;q=0.8

Servlet

什么是servlet

1.servlet是javaEE规范之一,规范就是接口
2.servlet是javaweb三大组件之一,三大组件分别是:servlet程序,filter过滤器,Listener监听
3.servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端

手动实现servlet

1.编写一个类去是实现servlet接口
2.实现service方法,处理请求,并响应数据
3.到web.xml中去配置servlet程序的访问地址(注:url-pattern不能缺少"/",servlet-name的值要相对应)

Servlet的生命周期

1.执行servlet构造器方法
2.执行init方法
3.执行service方法
4.执行destroy方法

Servlet的继承体系

Servlet <- GenericServlet <- HttpServlet <- 自定义的Servlet程序

Servlet接口只是负责定义Servlet程序的访问规范

GenericServlet类实现了servlet接口,做了很多实现并持有一个ServletConfig引用,并对ServletConfig的使用做一些方法

HttpServlet抽取类实现了service()方法,并实现了请求的分发处理

ServletConfig类

servlet和servletConfig对象都是由Tomcat负责创建

servlet程序默认是第一次访问时创建,servletConfig是每个servlet程序创建时就创建一个对应的servletConfig对象

ServletConfig类的三大作用

1.可以获取servlet程序的servlet-name的值

2.获取初始化参数int-param

3.获取servletContext对象

ServletContext类

ServletContext类的四个作用

  • 1.获取web.xml中配置的上下文参数context.param

  • 2.获取当前的工程路径,格式:/工程路径

  • 3.获取工程部署后在服务器上的绝对路径

  • 4.像Map一样存取数据

ServletContext是一个接口,它表示Servlet上下文对象
一个web工程,只能有一个ServletContext对象实例
servletContext是一个域对象(域对象是可以像Map一样存取数据的对象)

Http协议

客户端给服务器发送数据叫请求
服务器给客户端回传数据叫响应

请求分为GET请求和POST请求
GET请求
	1.请求行
		请求的方式	GET
		请求的资源路径[+?+请求参数]
		请求的协议版本号 HTTP/1.1
	2.请求头
		key:value 组成,不同的键值对,表示的含义不同
		
POST请求
	1.请求行
		请求的方式	POST
		请求的资源路径[+?+请求参数]
		请求的协议版本号 HTTP/1.1
	2.请求头
		key:value 组成,不同的键值对,表示的含义不同
	空行
	3.请求体 --------> 发送给服务器的数据

HttpServletRequest类

每次只要有请求进入tomcat服务器,tomcat服务器就会把请求过来的HTTP协议信息解析到封装好的Request对象中,然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有请求的信息。

HttpServletResponse

设置返回给客户端的信息

两个输出流的说明

字节流	getOutputStream()	常用于下载(二进制数据)
字符流 getWrite()			常用于回传字符串(常用)
两个流只能同时使用一个,否则会报错

请求转发

服务器收到请求后,从一个资源转到另一个资源
请求转发是一次请求
共享request对象
浏览器中的地址栏不会发生变化
请求转发的目标只能是本应用中的资源

请求重定向

重定向是两次请求,第二次请求一定是GET
浏览器中的地址栏会发生变化
不共享Request对象
重定向的URL可以是其他应用,不限于当前应用
重定向的响应头为302,并且必须要有Location响应头
不能访问WEB-INF下的资源
重定向就不要在使用response.getWrite()或response.getOutputStream()输出数据,不然可能出现异常

Request对象

作用:request对象中封存了当前请求的所有请求信息
使用:
	获取请求头数据
		req.getMethod();//获取请求方式
		req.getRequestURL();//获取请求URL信息
		req.getRequestURI();//获取请求URI信息
		req.getScheme();获取协议
	获取请求行数据
		req.getHeader("键名");//返回指定的请求头信息
		req.getHeaderNames();//返回请求头的键名的枚举集合
	获取用户数据
		req.getParmenter("键名");//返回指定的用户数
		req.getParameterValues("键名");//返回同键不同值的请求数据(多选)
		req.getParameterNames();//返回所有用户请求数据的枚举集合

Response对象

作用:用来响应数据到浏览器的一个对象
使用:
	设置响应头:
		setHeader(String name,String value);//在响应头中添加响应信息,但是回同键覆盖
		addHeader(String name,String value);//在响应头中添加响应信息,不会覆盖
	设置响应状态:
		sendError(int num,String msg);//自定义响应状态码
	设置响应实体:
		resp.getWrite().write(String str);//响应具体的数据给浏览器
	设置响应编码格式:
		resp.setContentType("text/html;charset=utf-8");