servlet和http请求

时间:2023-02-01 22:45:57

1.servlet
servlet是和平台无关的服务器组件,可以交互式的来浏览和修改数据,生成动态的web内容。它运行于
servlet容器中
2.servlet容器
servlet容器负责servlet和客户的通信和调用servlet方法。
servlet和客户通信采用“请求/相应”模式。
3.创建servlet,及其工作原理
(1)创建一个HelloServlet.java类,实现Servlet接口,实现接口方法

init()
service();
getServletConfig();
getServletInfo();
destory();

(2)在/WEB-INF/web.xml里面配置HelloServlet
做两件事
a.注册:把servlet名字和对应的class注册到servlet容器中。

<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.servlet.HelloServlet</servlet-class>
</servlet>

b.定义url:即页面可以通过什么样的url可以访问到servlet,/是根目录

<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet1</url-pattern>
</servlet-mapping>

c.当通过浏览器访问url: http://127.0.0.1/8080/view-servlet/HelloServlet访问是

容器首先把根目录截取出来:http://127.0.0.1/8080/view-servlet/
获取servlet名字:HelloServlet
根据servlet名字,找到servlet对应的类
调用类中对应的doGet() doPost()方法

3.servlet方法和生命周期,以下方法都是有servlet容器调用(servlet响应请求过程)

(1)构造器:只调用一次,第一次请求到达时,初始化servlet(说明servlet是单实例,非线程安全)
(2)init():只调用一次,创建完实例后,用于初始化servlet,传入ServletConfig 参数
(3)service():多次调用,用于响应请求。
(4)destory():只调用一次,所在web应用被卸载前调用。

4.load-on-startup参数:

<load-on-startup>param</load-on-startup>
(1)param为负数时,容器启动时,不加载servlet
(2)param>=0时,值越大,启动越晚

5.servlet映射细节

(1)一个servlet可以有多个servlet-mapping与之匹配
(2)通配有两种方式
a. /* (带下划线)
b. *.do *.action *.aa(不带下划线)
/*.do不合法

6.init方法中的 ServletConfig,封装了servlet信息

(1)获取servlet的初始化参数<init-param>
<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
获取方法:arg0.getInitParameter("p1")
(2)获取ServletContext

7.ServletContext

(1)可以由ServetConfig获取
arg0.getServletContext()
(2)可以认为代表当前WEB应用,可以获取当前web应用的各个反面的信息
a. 获取全局初始化参数
<context-param>
<param-name>c1</param-name>
<param-value>c2</param-value>
</context-param>
b.获取当前web应用某一个文件,在容器中的绝对路径。
getRealPath("") c.获取当前web应用的名称
getContextPath();
d.获取输入流
getResourceAsStream("/WEB-INF/class/jdbc.properties") web根目录

8.Http简介
(1)什么是http

web浏览器与web服务器之间,一问一答的交互过程,必须遵循一定规则,这个规则就是http协议。
http(超文本传输协议),是一个应用层协议,用于定义,web浏览器与web服务器之间的数据交换的过程,及交换
过程中,数据的格式。

(2)http会话方式分四步

a.建立连接
b.发送请求
c.回应请求
d.关闭连接

(3)http请求结构:

一个请求行
GET http://192.168.1.246:10085/manager/objcetstore/add_obj_user.json?obj_name=lvyafei&obj_password=123456&_=1451025520332 HTTP/1.1
多个消息头:
Host: 192.168.1.246:10085
Proxy-Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://192.168.1.246:10085/manager/views/service/index.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: X-LENOVO-SESS-ID=gfp0p4t3dbr3km3eemmrl95sp1; language=zh; JSESSIONID=aaaCFA_Q49wlj7MXN2xhv; lenovo_user_id=1; lenovo_user_name=admin; lenovo_user_pwd=fbc683e842c2c61496de800fed2d0de3
空行
实体内容
obj_name:lv
obj_password:123456
_:1451025520332

(4)http响应结构

一个状态行
HTTP/1.0 200 OK
多个消息头
Server: Tengine/2.0.3
Date: Fri, 25 Dec 2015 07:10:34 GMT
Content-Type: application/json;charset=UTF-8
X-Cache: MISS from Gateway-02
Via: 1.0 Gateway-02 (squid/3.1.9)
一个空行 实体内容
<html><body>.....</body></html>

(5)POST和GET请求的区别

a. GET http://localhost:8080/HelloServlet1?txt=lvyf&passwd=123
特点:把请求参数放在url的问号后面,传输数据一般在1K以下
b. POST 在Request Headers下面有一栏FormData,请求参数在FormData里面
特点:把请求参数放在FormData里面,以http消息的实体内容发送到服务器,传输数据量大

9.在servlet里面获取请求信息

(1)
servlet的service(ServletRequest request, ServletResponse response)方法
ServletRequest(接口)封装了请求信息
ServletResponse(接口)封装了响应信息
(2)获取参数:request.getParamter("username");

10.HttpServlet

HttpServlet是一个Servlet,针对Http请求定制
在service方法中,把ServletRequest转为HttpServletRequest,然后就可获取请求的方法是post还是get
,根据请求方式创建doPost,doGet方法。

11. get请求-->到达service--service里面获取HttpServlet对象-->HttpServletRequest对象获取请求方式-->调 对应的doXX()

12.请求转发和重定向的区别?

HttpServletResponse.sendRedirect方法
RequestDispatcher.forward方法
(1)看名字就可以看出来RequestDispatcher的转发,只是向服务器内部转发,重定向是响应,不仅可向内部,也可向
外部发送请求。
(2)forward在转发者和被转发者之间共享HttpServlet对象资源,重定向,被重向的地址获取不到HttpServlet资源

servlet和http请求的更多相关文章

  1. Servlet处理get请求时的中文乱码问题

    我们都知道,使用Servlet处理get请求时,如果get请求的参数中有中文,直接接收会是乱码,这个时候我们使用类似下面的语句来处理乱码: 12345 String name = request.ge ...

  2. Servlet获得Http请求&comma;GET&sol;POST

    Servlet获得Http请求 Http请求信息格式 请求行(方法提交方式,URI,Http协议版本) GET方式提交:URI会包含查询字符串 POST方式提交:URI不会包含查询字符串 请求头 Ho ...

  3. web基础-----&gt&semi;servlet中得到请求的数据

    对tomcat的源码做一些分析,今天我们就开始servlet中的请求分析. form表单中的默认类型 一.在index.jsp中get请求: <form action="Paramet ...

  4. Servlet和HTTP请求协议

    Servlet和HTTP请求协议 Servlet和HTTP请求协议 Servlet和HTTP请求协议 有待补充... servlet servlet applet 概念 servlet是运行在服务器上 ...

  5. Java Servlet学习笔记(四)Servlet客户端Http请求

    Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP ...

  6. servlet 如何处理多请求访问以及线程讲解

    servlet 如何处理多请求访问以及线程讲解 场景:js循环500次请求同一个后台接口,接口内部逻辑:1.查询商品数量,2.扣减商品数量 ,那么该接口是否需要考虑多线程并发安全问题? 分析: 1.先 ...

  7. javaweb servlet中使用请求转发乱码

    乱码的方式有很多,这里指出一种不容易想到的 *请确保您的页面单独访问正常,经过servlet请求转发时,有PrintWriter out = response.getWriter()不正常,没有正常 ...

  8. servlet容器处理请求过程

    下图是关于tomcat服务器接收客户请求并作出响应的图例. tomcat不仅仅只是一个servlet容器,也是一个web服务器,servlet容器在web服务器之内或者说servlet容器托管于web ...

  9. Servlet中的请求转发和重定向

    跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外 ...

随机推荐

  1. 查看哪些表的哪些列含有指定字符串(如&OpenCurlyQuote;andy’存在哪些表的哪些列中)

    -- 查看表中列含有指定字符.SQL> select * from demo1;NAME                                   ID---------------- ...

  2. php文件上传进度条例子

    <?php session_start(); ?> <!DOCTYPE html> <html lang="zh-CN"> <head&g ...

  3. USACO Preface Numbering 构造

    一开始看到这道题目的时候,感觉好难 还要算出罗马的规则. 但是仔细一看,数据规模很小, n 只给到3500 看完题目给出了几组样例之后就有感觉了 解题方法就是: n的每个十进制数 转换成相应的罗马数字 ...

  4. 数据库建表的时候报 &OpenCurlyDoubleQuote;1215 Cannot add foreign key constraint”

    很大原因是因为: 引用表中的字段类型和被引用的主键的类型不统一. 比如说学生表中有一个班级ID字段引用班级表. 班级表的ID是int类型,学生表中的班级ID是Varchar类型. 肯定会提示上述121 ...

  5. 测试驱动开发实践4————testSave之新增文档分类

    [内容指引] 1.确定"新增文档分类"的流程及所需的参数 2.根据业务规则设计测试用例 3.为测试用例赋值并驱动开发 一.确定"新增文档分类"的流程及所需的参数 ...

  6. GDB 显示别的文件;在别文件打断点;执行到函数末尾;跳出当前函数

    显示别的文件:l "文件名.后缀名":行号 在别文件打断点:b "文件名.后缀名":行号 执行到函数末尾:finish 跳出当前函数(当前位置到函数的末尾不被执 ...

  7. keras神经网络做简单的回归问题

    咸鱼了半个多月了,要干点正经事了. 最近在帮老师用神经网络做多变量非线性的回归问题,没有什么心得,但是也要写个博文当个日记. 该回归问题是四个输入,一个输出.自己并不清楚这几个变量有什么关系,因为是跟 ...

  8. 养成良好的C&plus;&plus;编程习惯(持续更新)

                    c++语言的灵活是建立在对编程者个人的编程素质的严格要求基础上的,好的C++编程习惯能避免很多问题. 没有好的编程习惯,极有可能编写一行代码,编译器能报十几个错误,而且 ...

  9. python 删除非空文件夹

    import os import shutil os.remove(path) #删除文件 os.removedirs(path) #删除空文件夹 shutil.rmtree(path) #递归删除文 ...

  10. nvidia-smi failed because it couldn&&num;39&semi;t communicate with the nvidia driver

    Ubuntu装好CUDA之后过段时间提示NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. NV ...