Servlet & HTTP笔记

Servlet

Servlet体系结构
Servlet–接口
GenericServlet–抽象类
HttpServlet–抽象类

GenericServlet:将Servlet接口中的其他方法做了默认空实现,只将service()方法抽象

HttpServlet:对http协议的一种封装,简化操作
1.定义类继承HttpServlet
2.复写doGet/doPost方法

Servlet相关配置
urlpartten:Servlet访问路径
一个Servlet可以定义多个访问路径:@webServlet({"/d4","/dd4"})
路径定义规则:
1./xxx:路径匹配
2./xxx/xxx:多层路径,目录结构
3.*.do:扩展名匹配

HTTP

Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了客户端和服务器端通信时发送数据的格式
特点:
1.基于TCP/IP的高级协议
2.默认端口号:80
3.基于请求/响应模型:一次请求对应一次响应
4.无状态的:每次请求之间相互独立的,不能交互数据

历史版本
1.0:每一次请求响应都会建立新的连接
1.1:复用连接

请求消息数据格式
1.请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1
请求方式:
HTTP协议中有7种请求方式,常用的有两种
GET:
1.请求参数在请求行中,url后
2.请求的url长度有限制
3.不太安全
POST:
1.请求参数在请求体中
2.请求的url长度没有限制
3.相对安全
2.请求头:客户端浏览器告诉服务器的一些信息
请求头名称:请求头值
常见的请求头:
1.User-Agent:浏览器告诉服务器,访问的时候所用浏览器版本信息

可以在服务器端获取该头的信息,解决浏览器的兼容性问题

2.Referer:
告诉服务器当前请求从哪里来
作用:
防盗链
统计

3.请求空行
空行:用于分隔POST请求的请求头和请求体的
4.请求体(正文):
封装POST请求消息的请求参数

Request

1.request对象和response对象的原理
二者都是服务器创建的
request对象用来获取请求消息,response用来设置响应消息
2.request对象继承体系结构
ServletRequest–接口
继承
HttpServletRequest–接口
实现
org.apache.catalina.connector.RequestFacade 类(tomcat)
3.request功能
一.获取请求消息数据
1.获取请求行数据
GET /day14/demo1?name=zhangsan HTTP/1.1
方法:
获取请求方式:GET
String getMethod()
获取虚拟目录:/day14
String getContextPath()
获取Servlet路径:/demo1
String getServletPath()
获取get方式请求参数:name=zhangsan
String getQueryString()
获取请求URI: /day14/demo1
String getRequestURI(): /day14/demo1
StringBuffer getRequestURL(): :http://localhost/day14/demo1

获取协议及版本:HTTP/1.1
String getProtocol()
获取客户机的IP地址:
String getRemoteAddr()
2.获取请求头数据
方法:

 String getHeader(String name):通过请求头的名称获取请求头的值
 Enumeration<String> getHeaderNames():获取所有的请求头名称

3.获取请求体数据
请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
步骤
获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型的数据
再从流对象中拿数据
二.其他功能
1.获取请求参数的通过方式:无论get还是post请求方式都可以使用下列方法获取请求参数

1. String getParameter(String name):根据参数名称获取参数值    username=zs&password=123
2. String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game
3. Enumeration<String> getParameterNames():获取所有请求的参数名称
4. Map<String,String[]> getParameterMap():获取所有参数的map集合

中文乱码问题
get方式:tomcat8以及将get方式乱码问题解决了
post方式:仍会乱码
解决:在获取参数前,设置request的编码:
request.setCharacterEncoding(“utf-8”)

2.请求转发:一种在服务器内部的资源跳转方式
步骤
通过request对象获取请求转发器对象:RequsetDispatcher getRequestDispatcher(String path)
使用RequestDispatcher对象来进行转发:forward(Servlet Request request,ServletResponse response)
特点:
浏览器地址栏路径不发生变化
只能转发到当前服务器内部资源中
转发是一次请求

3.共享数据
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
void setAttribute(String name,Object obj):存储数据
Object getAttribute(String name):通过键获取值
void removeAttribute(String name):通过键移除键值对

4.获取SevletContext
ServletContext getServletContext()

BeanUtils工具类,简化数据封装
* 用于封装JavaBean的
1. JavaBean:标准的Java类
1. 要求:
1. 类必须被public修饰
2. 必须提供空参的构造器
3. 成员变量必须使用private修饰
4. 提供公共setter和getter方法
2. 功能:封装数据

    2. 概念:
        成员变量:
        属性:setter和getter方法截取后的产物
            例如:getUsername() --> Username--> username


    3. 方法:
        1. setProperty()
        2. getProperty()
        3. populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中

猜你喜欢

转载自blog.csdn.net/FallingSkies/article/details/82966575
今日推荐