JAVAweb中常用的小知识点之Servlet

举报
Jack20 发表于 2021/02/02 18:00:16 2021/02/02
【摘要】 一、 servlet 是如何运行的?当用户向浏览器地址栏输入http://ip:port/helloweb/sayHello?name=zs1)  浏览器使用ip:port(端口号)连接服务器2)  浏览器将请求数据按照http 协议打成一个数据包(请求数据包)发送给服务器请求数据包的内容包含了请求资源路径(/helloweb/sayHello?name=zs),另外,在请求数据包当中,还会...

一、 servlet 是如何运行的?

当用户向浏览器地址栏输入http://ip:port/helloweb/sayHello?name=zs

1)  浏览器使用ipport(端口号)连接服务器

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组件可以共享requestresponse 对象。

  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)  事件是否处理完毕

  转发是一件事未做完

  重定向是一件事已经做完

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。