servlet: server applet
概念:运行在服务器端的小程序
*servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
*将来我们定义一个类,实现Servl接口,复写方法
快速入门:
1.创建一个JavaEE项目
2.定义一个类,实现Servlet接口
3.实现接口中的抽象方法
4.配置Servlet
在web.xml中进行配置
<servlet>
<servlet-name>dem01</servlet-name>
<servlet-class>com.example.comProject.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dem01</servlet-name>
<url-pattern>demo01</url-pattern>
</servlet-mapping>
执行原理:
1.当服务器受到客户端浏览器的请求时。解析请求的url路径,获取访问的Servlet的资源路径
2.查找web.xml,查看是否有对应的<url-pattern>标签体的内容
3.如果有,则再找到对应的<servlet-class>全类名
4.tomcat会将字节码加载进内存,并创建其对象
Servlet中的生命周期
1.被创建:执行init方法
2.提供服务:执行service方法,执行多次
3.被销毁:执行destroy,执行一次
*服务器正常关闭时,才会执行destroy方法,在Servlet销毁之前执行
Servlet3.0版本介绍
好处:
支持注解配置。可以不用web.xml
使用步骤:
1.创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
2.定义一个类,实现Servlet接口
3.复写方法
4.在类上使用@webServlet注解,进行配置
@webServlet("资源路径")
HTTP请求介绍
概念:Hyper Text Transfer Protocol 超文本传输协议
*传输协议:定义了客户端和服务器端通信时发送数据的格式
*特点:
1.基于TCp/IP的高级协议
2.默认端口号是8080:
3.基于请求/响应模型的:一次请求对应一次响应
HTTP历史版本:
*1.0:每一次请求响应都要重新建立连接
*1.1:复用连接
请求消息数据格式
1.请求行
*格式:请求方式 请求url 请求协议/版本
GET/login.http/HTTP/1.1
*请求方式:
HTTP协议有7种请求参数,常用的有两种
*GET
1.请求参数在请求行中,具体说就是在url之后
2.请求的url长度是有限度的
3.该方式不太安全
*POST
1.请求参数在请求体中。
2.请求的url的长度没有限度的
3.该方式相对安全
2.请求头:客户端告诉浏览器的一些信息
*格式:请求头名称:请求头的值
*常见的请求头:
1.User—Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
*可以在服务器段获取该头信息,解决浏览器兼容问题
2.Referer:http://localthost/login.html
*告诉服务器,我(当前请求)从哪里来?
作用:
1.防盗链
2.统计工作
3.请求空行
字面意义上的空行,用于分隔POST的请求头与请求体
4.请求体(正文)
封装POST传递的参数信息
request使用
request对象和respond对象的原理
1.tomcat服务器会根据请求的url中的资源路径创建对应的Servlet的对象
2.tomcat服务器,会创建request和respond对象,request对象封装请求消息
3.tomcat将request和respond对象传递给service方法,并调用service方法
4.程序员(我们),可以通过request对象获取请求数据,通过respond对象响应消息数据
5.服务器再给浏览器做出响应之前,会从respond对象拿程序员设置的响应消息数据。
总结:request和respond对象是服务器创建的,由我们使用。request是获取请求消息,response对象是设置响应消息
request对象的继承体系结构:
ServletRequest --接口
|继承
HTTPServletRequest --接口
|实现
org.apache.catalina.connector.RequestFacade --(类)实现接口
request基本功能:
1.获取请求消息数据
1.获取请求行数据
*请求头如:GET/虚拟目录/login.http?name=zhangsan/HTTP/1.1
*实现方法:
1.获取请求方式:String getMethod()
2.(*)获取虚拟目录:String getContextPath()
3.获取Servlet路径:String getServletPath()
4.获取get方法的请求参数:name=zhangsan String getQueryString()
5.(*)获取请求的URI:
String getRequestURI() /虚拟目录/login.http
String getRequestURL() http://localhost/虚拟目录/login.http
URL:统一资源定位符 http://localhost:8080/requestdemo02
URI:统一资源标识符 /requestdemo02
6.获取协议或版本号:/HTTP/1.1
String getProtocol()
7.获取客户机的IP地址
String getRemoteAddr()
2.获取请求头数据
方法:
*String getHeader(String name):通过请求头的名称获取请求头的值
*Enumeration<String> getHeaderNames:获取所有请求头的名称
3.获取请求体数据
*请求体:只有post请求方式,才有请求体,在请求体中封装了POST请求的参数
*步骤:
1.获取流对象
*BufferedReader getReader(): 获取字符输入流,只能操作字符数据
*ServletInputStream getInputStream():获取字节流,可以操作所有数据类型
*在文件上传中使用
2.再从流对象中拿数据
request功能进阶
1.获取请求参数的方法:无论是get还是post方法都可以使用下列方法获取请求参数
1.String getParameter(String name):根据请求参数获取参数值 username=username&passward=123
2.String[] getParameterValues(String name):根据请求参数获取参数值的数组 studentbname=li&studentbname=王;用于属性名相同,如复选框
3.Enumeration<String[]> getParameterNames():获取所有请求参数的名称
4.Map<String,String[]> getParameterMap():获取所有参数的mao集合
*中文乱码问题
*get方式:tomcat8以上已经将get方式中文乱码问题解决了
*Post方式:解决方式
解决:在获取参数设置request的编码:req.setCharacterEncoding("utf-8");
2.请求转发:一种在服务器你内部资源跳转的方式
1.步骤
1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2.通过RequestDispatcher进行转发:forward(ServletRequest request,ServletRespond respond)//进请求的request与respond一并转发过去post提交
2.特点
1.浏览器地址栏路径不发生变化
2.只能访问当前服务器内部资源中
3.转发是一次请求,多个资源之间使用的是同一个请求
3.共享数据
*域对象:一个有作用范围的对象,可以在作用范围内共享对象
*request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
*方法:
1.setAttribute(String name,Object value);储存数据
2.Object getAttribute(String name);获取数据
3.void removeAttribute(String name):移除数据
4.获取ServletContext
*ServletContext getServletContext(),可以通过request对象获取
BeanUtil工具类
用于封装JavaBean类,简化数据封装
1.JavaBean要求:标准的类
1.类必须被public修饰
2.必须提供空参的构造器
3.成员变量必须使用private修饰
4.提供更高的setter与getter方法
2.功能:封装数据
概念:
成员变量:
属性:setter与getter方法截取后的产物
例如:getUsername()-->Username-->username
方法:
1.setProperty()
2.getProperty()
3.populate(Object obj,Map map)