servlet和http请求
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请求的更多相关文章
- Servlet处理get请求时的中文乱码问题
我们都知道,使用Servlet处理get请求时,如果get请求的参数中有中文,直接接收会是乱码,这个时候我们使用类似下面的语句来处理乱码: 12345 String name = request.ge ...
- Servlet获得Http请求,GET/POST
Servlet获得Http请求 Http请求信息格式 请求行(方法提交方式,URI,Http协议版本) GET方式提交:URI会包含查询字符串 POST方式提交:URI不会包含查询字符串 请求头 Ho ...
- web基础----->servlet中得到请求的数据
对tomcat的源码做一些分析,今天我们就开始servlet中的请求分析. form表单中的默认类型 一.在index.jsp中get请求: <form action="Paramet ...
- Servlet和HTTP请求协议
Servlet和HTTP请求协议 Servlet和HTTP请求协议 Servlet和HTTP请求协议 有待补充... servlet servlet applet 概念 servlet是运行在服务器上 ...
- Java Servlet学习笔记(四)Servlet客户端Http请求
Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP ...
- servlet 如何处理多请求访问以及线程讲解
servlet 如何处理多请求访问以及线程讲解 场景:js循环500次请求同一个后台接口,接口内部逻辑:1.查询商品数量,2.扣减商品数量 ,那么该接口是否需要考虑多线程并发安全问题? 分析: 1.先 ...
- javaweb servlet中使用请求转发乱码
乱码的方式有很多,这里指出一种不容易想到的 *请确保您的页面单独访问正常,经过servlet请求转发时,有PrintWriter out = response.getWriter()不正常,没有正常 ...
- servlet容器处理请求过程
下图是关于tomcat服务器接收客户请求并作出响应的图例. tomcat不仅仅只是一个servlet容器,也是一个web服务器,servlet容器在web服务器之内或者说servlet容器托管于web ...
- Servlet中的请求转发和重定向
跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外 ...
随机推荐
- Code笔记之:CSS块级元素、内联元素概念
文档流 将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流. 每个非浮动块级元素都独占一行, 浮动元素则按规定浮在行的一端. 若当前行容不下, 则另起新行再浮动. 内联元素也不 ...
- Visual Studio原生开发的10个调试技巧
这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧.我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧.(如果你是工作在托 ...
- CSS3系列四(Media Queries移动设备样式)
viewport设置适应移动设备屏幕大小 viewport:允许开发者创建一个虚拟窗口并自定义其窗口的大小或缩放功能 <meta name="viewport" conten ...
- nosql理解
1.NoSQL是什么? NoSQL 是 Not Only SQL 的缩写,意即"不仅仅是SQL"的意思,泛指非关系型的数据库.强调Key-Value Stores和文档数据库的优点 ...
- linux认识第一面
一.领域问题: 在客户端领域,windows始终占据了优势地位.而在服务器领域,全球98%的都是在用linux.因为linux作为服务器的载体,便宜又安全. 二.linux是基于内核的编写工具,在li ...
- Git删除tag
git tag -d v2016062101 删除本地tag git push origin --delete tag v2016062101 删除远程tag
- jquery 获取json文件数据,显示到jsp页面上, 或者html页面上
[{"name":"中国工商银行","code":102},{"name":"中国农业银行",&qu ...
- EasyUI-Datagrid 中formatter和group-formatter的使用
1.在表格属性设置函数那块写以下内容: groupFormatter:function(value,rows){ //这里可以看到每一条导入表格中的数据,可以返回group的总结值 }, column ...
- Ubuntu下安装了java但启动eclipse报错说没装java
参考资料:http://blog.csdn.net/happyteafriends/article/details/8290950 一.问题 在Ubuntu下安装了java并在~/.bashrc配置了 ...
- Json数据可视化
主要借助JSON.stringfy( value [, replacer] [, space] ). 一.参考文献 1.json数据可视化: http://www.cnblogs.com/lvdaba ...