Servlet
什么是Servlet
1.Servlet是javaEE规范之一。是一个接口
2.Servlet是javaweb三大组件之一,三大组件分别是Servlet程序、Filter过滤器、Listener监听器。
3.Servlet是运行在服务器上的一个java小程序,可以接收客户端发送过来的请求,并响应数据给客户端。
实现Servlet
1.编写一个类去实现Servlet接口
2.实现service方法,处理请求并响应数据
3.到web.xml中去配置servlet程序的访问地址
url中的地址是如何定位到Servlet程序中去使用的
客户端浏览器通过一个地址:http://ip:port/工程路径/资源路径
服务器:ip唯一,监听端口(一个程序一个端口)。
通过ip定位服务器
通过port定位tomcat
通过工程路径访问确定哪个工程
资源路径→xml中寻找路径是否存在,然后通过servlet-mapping标签中的name找到servlet标签,再通过servlet-class找到对应的类去执行service方法。
servlet生命周期
1.执行servlet构造器方法
2.执行init初始化方法
3.执行service方法
4.执行destory销毁方法
1 2步在第一次访问的时候创建servlet程序会调用
3步 每次访问都会调用
4步在停止的时候会执行
请求的分发处理:就是根据请求方式的不同GET和POST来进行分发处理。
Servlet程序的实现
1.通过实现Servlet接口,实现其中的service方法
2.通过继承HttpServlet来实现,只需要重写doGet或doPost方法就行了
3.使用IDEA生成servlet,直接在包下面new servlet
Servlet的继承体系
ServletConfig类
Servlet程序信息的配置类
1.可以获取servlet程序的别名就是servlet-name
2.获取初始化参数init-param
3.获取servletContext对象
servlet和servletConfig都是由tomcat负责创建,我们负责使用。
servlet程序都是默认第一次访问时创建,servletConfig是每个servlet程序创建的时候,就创建一个对应的servletConfig对象。
继承HttpServlet类的时候可以通过getServletConfig()方法获取自己的ServletConfig对象,重写init(ServletConfig config)方法的时候要使用super.init()方法
ServletContext类
1.是一个接口,表示servlet上下文
2.一个web工程只有一个ServletContext实例
3.ServletContext是一个域对象
什么是域对象:
是一个像map一样可以存储数据的对象叫做域对象
这里的域指的是存储数据的操作范围
存数据 setAttribute
取数据getAttribute
删除数据removeAttribute
四个作用:
1.获取web.xml中配置的上下文参数
2.获取当前的工程路径。格式:/工程路径
3.获取工程部署后在服务器磁盘上的绝对路径
4.像map一样存储数据
5.ServletContext在web工程部署的时候创建,在web工程停止时销毁,作用范围是整个web工程
HTTP协议
什么是HTTP协议?
指客户端和服务器之间通信时,发送的数据需要遵守的规则叫做HTTP协议。
HTTP协议中的数据又叫做报文
请求的HTTP协议格式
客户端给服务器发送数据叫做请求
服务器给客户端发送数据叫做响应
请求又分为GET请求和POST请求
GET请求:
1.请求行:请求的方式 GET,请求的资源路径[+?+请求参数],请求的协议和版本号 HTTP/1.1
2.请求头 key:value组成,不同键值对不同的含义
POST请求
1.请求行:请求的方式 POST,请求的资源路径[+?+请求参数],请求的协议和版本号 HTTP/1.1
2.请求头 key:value 不同键值对有不同的含义
空行
3.请求体:发送给服务器的数据
常用请求头的说明:
Accept 表示客户端可以接收的数据类型
Accept-Language 客户端可以接收的语言类型
User-Agent 客户端浏览器信息
Host 服务器ip和端口号
GET请求和POST请求的区分
GET请求
1.form method=get
2.a标签
3.link引入css
4.script引入js文件
5.img引入图片
6.iframe引入html页面
7.在浏览器地址栏输入后敲回车
POST请求
1.form method=post
响应的HTTP协议格式
1.响应行
1)响应的协议和版本号 HTTP/1.1
2)响应状态码
3)响应状态描述符
2.响应头
key:value 不同的响应头有其不同的含义
空行
3.响应体
回传给客户端的数据
常见的响应码
200 请求成功
302 请求重定向
404 请求服务器已经收到了,但是要的数据不存在
500 表示服务器已经收到请求,但是服务器内部错误(代码)
MIME
是HTTP协议中的数据类型
HttpServletRequest类
作用:每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象当中,然后传递到service方法(doGet和doPost)中使用,可以通过这个类获取到所有的请求信息。
一个请求一个HttpServletRequest对象
请求的转发
什么是请求的转发?
是指服务器收到请求后,从一个资源跳转到另一个资源的操作叫做请求转发。
请求转发是无法出栈的,不能访问外部的资源,会自己定位到工程目录下。转发可以访问WEB-INF中的资源。
使用转发的页面跳转与使用a标签的页面跳转的区别
web中/的不同意义
在web中/是一种绝对路径。
1./如果被浏览器解析得到的地址是http://ip:port/
2./ 如果被服务器解析得到的地址是http://ip:port/工程路径
3.特殊情况,response.sendRediect("/");把斜杠发送给浏览器解析。得到http://ip:port/
HttpServletReponse类
和HttpServletRequest类一样,每次浏览器请求进来都会创建一个HttpServletReponse对象。HttpServletRequest表示请求过来的信息,HttpServletReponse表示返回的信息
两个输出流
字节流:getOutputStream() 常用于下载,传递二进制数据
字符流:getWriter() 常用于回传字符串(常用)
两个流同时只能使用一个,使用了字节流就不能使用字符流,否则就会报错。
请求重定向
什么意思:客户端给服务器发送请求,然后服务器给客户端一个新地址然后去访问。(可能原服务已废弃)
请求重定向第二种方法(推荐使用):
response.sendRedirect(url)
JavaEE的三层架构
一个web工程应该含有的包
常见错误
1.url没有加/,启动时会报错。
2.mapping和servlet两个标签中的name不对称。在IDEA中会提示(最近使用了IDEA之后发现确实比eclipse方便了很多)
3.servlet标签中的class全类名错了,IDEA有提示