1)Servlet是javaEE规范之一,规范就是接口
2)Servlet是javaWeb三大组件之一,三大组件分别是Servlet程序,Filter过滤器,Listener监听器
3.Servlet是运行在服务器上的一个java小程序,它可以接收客户发送过来的请求,并响应数据给客户端。
1.编写一个类去实现Servlet接口
2.实现service方法,处理请求,并响应数据
3.到web.xml中去配置servlet程序的访问地址
1.执行Servlet构造器方法
2.执行init初始化方法
第一,二步是在第一次访问的时候 创建Servlet程序会调用
3.执行service方法
第三步每次访问都会调用。
4.执行destroy销毁方法
在web工程停止的时候调用。
请求分发处理:
页面跳到servlet 通过表单:
用以下方式获得表单的提交方式,调用对应的get或post里的方法
1.编写一个类去继承HttpServlet类
2. 根据业务需求要重写doGet()和doPost()方法
3.配置程序访问地址
Servlet程序和ServletConfig对象都是由Tomcat负责创建的,我们负责使用。
Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。
在web.xml中的
什么是ServletContext?
1.servletcontext是一个接口,它表示servlet上下文对象
2.一个web工程,只有一个ServletContext对象实例
3.ServletContext对象是一个域对象
什么是域对象?
域对象,是可以像Map一样存取数据的对象,叫域对象。
这里的域指的是存取数据的操作范围。
存数据 取数据 删除数据
Map put() get() remove()
域对象 setAttribute() getAttribute() removeAttribute()
1.获取web.xml中配置的上下文参数context-param
2.获取当前的工程路径,格式/工程路径
3.获取工程部署后在服务器上硬盘上的绝对路径
4.像Map一样存取数据
1.在web.xml里配置
可以在控制台打印输出。
运行结果:
在获取工程部署的绝对路径时,/ 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的web目录
我们现在在web下新建css文件夹和imgs文件夹
用同样的方法我们也可以获取到对应我们想要的文件的路径:
ServletContext像map一样存取数据:
补:ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
这里的域指的是数据的操作范围,整个web工程。
在同一个工程下不同的servlet的ServletContext对象的地址是相同的 只有一个对象。
什么是HTT协议?
协议是指双方或多方,相互约定好,大家都需要遵守的规则,叫协议。
所谓HTTP协议,就是指客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP协议。HTTP协议中的数据又叫报文。
客户端给服务器发送数据叫请求。
服务器给客户端回传数据叫响应。
请求又分为GET请求,和POST请求两种。
1.GET请求
1.请求行
(1)请求的方式 GET
(2)请求的资源路径【+?+请求参数】
(3)请求的协议的版本号 HTTP/1.1
2.请求头
key:value 组成 不同的键值对,表示不同的含义。
1.请求行
(1)请求的方式 POST
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1
2.请求头
(1)key:value 不同的请求头,有不同的含义
空行
3.请求体=====>就是发送给服务器的数据
Accept:表示客户端可以接收的数据类型
Accept-Language:表示客户端可以接收的语言类型
User-Agent:表示客户端浏览器的信息
Host:表示请求时的服务器ip和端口号
GET请求有哪些:
1.form标签method-get
2.a标签
3.link标签引入css
4.Script标签引入js文件
5.img标签引入图片
6.iframe引入html页面
7.在浏览器地址栏输入地址后敲回车
POST请求有哪些:
1.form标签 method=post
1.响应行
(1)响应的协议和版本号
(2)响应的状态码
(3)响应状态描述符
2.响应头
(1)key:value 不同的响应头,其含义不同
空行
3.响应体========>>>>>>就是回传给客户端的数据
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)是超级常见的也巨难搞的错误
500 表示服务器已经收到请求,但是服务器内部错误(代码错误) 常见但是一般有错误提示
HttpServletRequest类有什么用?
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。
前端页面:
Servlet;
注:当获取多个值时用数组形式,并且用getParameterValues获取,输出时可以用集合类Arrays.asList()输出
运行结果:
(POST请求)当输入中文内容时可能会乱码:
我们把前端页面提交方式method由get改为post我们会发现输入中文时:
会发生乱码。
解决方法:
我们发现不再产生乱码问题。
什么是请求的转发?
请求穿法是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
代码演示:
运行结果:
请求转发的特点:
1.浏览器地址栏没有变化
2.他们是一次请求
3.他们共享Request域中的数据
4.可以转发到WEB-INF目录下
5.不可以访问工程以外的资源
代码:
做如上操作
c.html:
在web目录下建立index.html
运行结果:
点击超链跳到c.html
再点击超链跳回主页
以上演示是纯前端页面html之间的页面跳转,下面我们用之前提到的请求转发的方式来实现以下该操作。
修改后:
先建立一个用来跳转的servlet:
修改后的index.html
运行结果:
我们点击之前html之间的跳转超链 还是可以进行正常的页面之间来回跳转的
然后我们点击下方请求转发的超链
我们再点击调回首页的超链:
我们会发现产生了错误。
这是为什么呢?
于是我们就需要利用base标签来解决这个问题:
base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转。
我们修改c.html:
这样就可以了。
在javaWeb中,路径分为相对路径和绝对路径两种:
相对路径是:
. 表示当前目录
.. 表示上一级目录
资源名 表示当前目录/资源名
绝对路径:
http://ip:port/工程路径/资源路径
在web中/斜杠是一种绝对路径。
/斜杠 如果浏览器解析,得到的地址是:http://ip:port/
/斜杠如果被服务器解析,得到的地址是:http://ip:port/工程路径
1.
2.servletContext.getRealPath("/");
3.request.getRequestDispatcher("/");
特殊情况:response.sendRediect("/");把斜杠发送给浏览器解析,得到http://ip:port/
HttpServletResponse类的作用
HttpServletResponse类和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置。
字节流 getOutputStream 常用于下载(传递二进制数据)
字符流 getWriter() 常用于回传字符串(常用)
两个流同时只能使用一个。
使用了字节流就不能再使用字符流。反之亦然,否则就会报错。
如何往客户端回传数据
要求:往客户端回传字符串数据。
运行结果:
当我们回传中文时,会出现中文乱码:
所以我们要涉及到:
我们先来打印出来看看他的字符集是什么?
设置完字符集再次运行:
我们会发现依然是乱码,这是因为服务器和浏览器的编码格式不同。
我们改一下qq浏览器的编码:
就不再乱码了。
但是这种手动改浏览器的编码很麻烦,我们用一句代码也可以代替实现:
再次运行一下:
我们输出语句打印一下现在的字符集:
我们发现页面中文不乱码
打印出的字符集也确实是utf-8.
请求重定向,是指客户端给服务器发请求。然后服务器告诉客户端说,我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。
我们先写一个servlet:
我们从response1跳转到response2:
我们写出response2的servlet代码:
运行效果:
我们发现我们成功从response1跳转到response2了。
请求重定向的特点:
1.浏览器地址栏会发生变化
2.两次请求
3.不共享Response域中数据
4.不能访问WEB-INF下的资源
5.可以访问工程外的资源
运行结果: