JAVAweb中常用的小知识点之Servlet
一、 servlet 是如何运行的?
当用户向浏览器地址栏输入http://ip:port/helloweb/sayHello?name=zs
1) 浏览器使用ip:port(端口号)连接服务器
2) 浏览器将请求数据按照http 协议打成一个数据包(请求数据包)发送给服务器
请求数据包的内容包含了请求资源路径(/helloweb/sayHello?name=zs),
另外,在请求数据包当中,还会包含浏览器自动生成的一些信息。
3) 服务器创建两个对象:请求对象(Request)和响应对象(Response)
服务器解析请求数据包,将解析之后的数据存放到请求对象里面,方便servlet读取请求 数据(因为servlet不用解析请求数据包,如果要解析,需要理解http 协议)。
请求对象是HttpServletRequest接口的一个实现。
响应对象是HttpServletResponse 接口的一个实现,响应对象由于存放servlet处理的结果。
4) 依据请求资源路径找到相应的servlet配置,通过反射创建servlet实例。然后调用其service()方法。
在调用service()方法时,会将事先创建好的请求对象(request)和响应对象(response)作为参数进行传递。在servlet内部,可以通过request获得请求数据,戒者通过response 设置响应数据。
5) 服务器从response 中获取数据,按照 http 协议打成一个数据包(响应数据包),发送给浏览器。
6) 浏览器会解析响应数据包,取出相应的数据,生成相应的界面。
二、get和post请求的区别是什么?
1)哪一些是get请求方式
a, 直接在浏览器地址栏输入某个地址。
b,点击链接地址
c, 表单默认的提交方式
2)get请求方式的特点
a,请求参数会添加到请求资源路径后面。
请求资源路径后面添加的参数数据量大小是有限制的,
b,会将请求参数直接显示在浏览器地址栏,不安全。
c, get方式只适合于向服务器请求资源或者是
向服务器提交少量的数据。
3)哪一些是post请求方式?
a,设置表单的method="post"
4)post方式的特点
a, post方式会将请求参数及值添加到实体内容里面,可以放置大量的数据
b,因为不会将参数直接显示在浏览器地址栏,所以,相对安全。
get方式会将请求参数及参数值放在请求资源路径里面,携带的数据大小有限制,不适合提交大量的数据; post方式会将请求参数及参数值放在实体内容里面,理论上没有限制,适合大量数据的提交。
三、重定向和转发是什么,都有什么区别?
(1)重定向:
1)什么是重定向?
服务器向浏览器发送一个状态码302 及一个消息头location(location 的值是一个地址),浏览器会立即向 location所指定的地址发送一个新的请求。我们把这样一种机制叫重定向。
2)编程:
response.sendRedirect(String url);
3)需要注意的问题
在重定向之前,不能够有任何的输出;如果response 缓存当中有数据,在重定向之前,会自动清空。
4)重定向的特点:
a,地址任意
b,浏览器地址栏地址会变化(即变化为跳转之后的地址)。
(2)转发:
1)什么是转发?
一个web组件(servlet/jsp)将未完成的处理交给另外一个web组件继续完成。转发所涉及的各个web组件可以共享request和response 对象。
2)编程
step1 绑订数据到request对象上。
request.setAttribute(String name,Object obj);
request.removeAttribute(String name);
Object request.getAttribute(String name);
//如果绑订名不存在,则返回 null。
step2 获得转发器
RequestDispatcher rd = request.getRequestDispatcher(String url);
step3 转发
rd.forward(request,response);
servlet:负责业务逻辑处理(包括数据访问) 。
jsp:负责生成界面。
3)需要注意的问题:
在转发之前,response缓存的数据会被清空。
主要区别如下:
1) 地址
转发的地址必须是同一个应用内部的某个组件(不能跨应用,不能跨服务器)
比如:
地址1 http://localhost:8080/web06/aaa.jsp
地址2 http://localhost:8080/web06/bbb.jsp
地址3 http://localhost:8080/web07/ccc.jsp
地址4 http://www.tarena.com.cn
在应用web06内部的组件aaa.jsp 可以将信息转发到地址2(同一应用),但是不可以转发到地址3(跨应用)和地址4(跨服务器)
重定向的地址没有限制
2) 能否共享request
转发可以
重定向不行
原因是转发是一次请求,重定向为两次请求,Request的生命周期叧能在一次请求内,
请求结束,Request 被删除
3) 浏览器地址栏的地址是否变化
转发不变
重定向会变
4) 事件是否处理完毕
转发是一件事未做完
重定向是一件事已经做完
- 点赞
- 收藏
- 关注作者
评论(0)