Servlet详细讲解
目录
Servlet简介
Servlet的生命周期
获取请求行
获取请求头
获取请求数据
设置响应头
设置响应数据
request请求转发
request重定向
Cookie对象
session对象
ServletContext对象
Servlet简介
通过Servlet之第一个web项目后,我们已经知道了servlet的的大致流程,这里我进行servlet的详细讲解
Servlet是一个接口,HttpServlet实现了该接口,而我们写的MyServle是继承了HttpServlet,Servlet接口规范了服务器和浏览器的交互,使得我们只需重写service方法,不用写main方法Tomcat也能调用,这里Tomcat调用是用我们的包名加类名反射创建对象调用的,接下来我们进行讲解Servlet的其他常用方法。
Servlet的生命周期
- 从第一次被调用到服务器关闭
- 如果在web.xml文件中配置了<load-on-startup>1<load-on-startup>,1是执行顺序,其生命周期为从服务器启动到服务器关闭
init() servlet初始化方法,在servlet第一次被加载到内存的时候被调用,只执行一次
service() 真正处理请求的方法
destroy() servlet被销毁时被执行,也就是服务器关闭时
其实在这里不仅仅只有service方法,还有doget和dopost方法
service方法:是当你在浏览器发出请求时,不管是get请求还是post'请求,都能够执行
doget方法:只能接受get请求
dopost方法:只能接受post请求
好了,接下来讲解浏览器发送请求数据之后,服务器是如何处理的
request对象中封装了当前请求的所有信息,request对象是由服务器创建的,并作为实参传递给处理请求的servlet的service方法虽然我们也由doget和dopost方法,这里我们以service为例,主要是讲解request对象
获取请求行
String method = req.getMethod(); //获取请求方式
String url = req.getRequestURL(); //获取请求URL
String uri = req.getRequestURI(); //获取请求URI
String h = req.getScheme(); //获取协议
获取请求头
String value = req.getHeader(""); //获取指定请求头,这里是键值对的形式,传过去一个键会获取值,如果键不存在,返回null
Enumberation e = req.getHearderNames(); //返回所有键的名字,可以结合上面的方法,获取所有的值
获取请求数据
String name = req.getParameter("uname"); //这里的键值需要你的请求数据中的键值相对应,如果不存在,返回null
String[] favs = req.getParameterValues("fav"); //这里是对同键不同值的信息获取,同样的,如果fav不存在,返回null
通过上面的学习,服务器已经能够获取浏览器的请求信息了,那如何才能将处理后的信息,返回给浏览器呢,这里服务器创建了一个response对象,做此次请求的响应,其中在response中服务器已经为我们封装好了,请求信息是谁发过来的,以及响应信息发给谁,我们只需写响应信息即可
设置响应头
resp.setHeader("",""); //设置键值对的格式,会覆盖键
resp.addHeader("",""); //添加键值对,不会覆盖键
resp.sendError(404,"sorry"); //设置状态码
resp.setHeader("content-type", "text/html; charset = utf-8"); //设置响应编码格式,告诉浏览器是html文件
resp.setContentType("text/html; charset = utf-8"); //设置响应编码格式,等价于上面
设置响应数据
resp.getWriter().write("this is response"); //数据打印到浏览器中
resp.getWriter().write("<b>this is response</b>"); //数据打印到浏览器中,设置文本为html可执行html代码
request请求转发
req.getRequestDispatcher("page").forward(req,resp); //请求转发,实现多个servlet处理,这里是让page去处理
使用request对象实现不同的Servlet的数据流转,其作用域是一次请求内有效
String str = (String) req.getAttribute(Object value); //获取request作用域数据
req.setAttribute(Object name, Object value); // 设置request作用域数据
request重定向
对于请求转发每次刷新都会请求一次,所以当表单数据不允许重复提交时,也就是每提交一次,数据都会变化的情况下,就不能使用请求转发了,这里引入了重定向,重定向是两次请求,两个request对象
resp.sendRedirect(""); //引号里是你重定向的URL(网络资源)或URI(本地资源)
Cookie对象
使用了重定向,会发现浏览器发起的信息无法得到,也就是发送的不同请求的数据共享问题,为了解决此问题,引入了Cookie,存储在浏览器中,Cookie也是Session的基础,每一个浏览器中的Cookie会对应一个服务器中的session
Cookie c = new Cookie(String name, String value); //创建Cookie对象,一个Cookie对象只能存储一条信息
resp.addCookie(c); //响应Cookie信息给浏览器
c.setMaxAge(); //设置Cookie的存活时间,括号里面是秒,不设置默认是浏览器运行期间。
c.setPath(路径); //设置该Cookie对象的有效路径,不设置默认是所有路径都会带着该Cookie
Cookie[] cks = req.getCookies(); //获取Cookie信息,默认带一个JSESSIONID
cks[0].getName(); //获取Cookie的name值
cks[0].getValue(); //获取Cookie的value值
session对象
同一用户不同请求之间的数据共享问题,用户第一次访问服务器,服务器会给此用户创建一个session对象存储在服务器中,并将该session对象的JSESSIONID使用Cookie技术存储到浏览器中,保证用户的其他请求能够获取到同一个session对象,也保证了不同请求能获取到共享数据,作用域是一次对话
HttpSession hs = req.getSession() //获取session对象
hs.setAttribute(String name, Object value) //存储数据
hs.getAttribute(String name) //获取数据,返回类型是Object
hs.getId() //获取JSESSIONID
hs.setMaxInactiveinterval(秒数) //设置session的有效时间
hs.invalidate() //设置session强制失效
ServletContext对象
该对象解决了不同用户之间的数据共享问题
三种方式获得的对象一样
ServletContext sc = this.getServletContext(); //获取ServletContext对象
ServletContext sc2 = this.getServletConfig.getServletContext(); //获取ServletContext对象
ServletContext sc = req.getSession.getServletContext(); //获取ServletContext对象
sc.setAttribute(String name,Object value); //数据存储
sc.getAttribute(""); //获取数据,返回Object类型,如果不存在返回null
获取web.xml文件全局配置
sc.getInitParameter(String name); //根据名字返回web.xml文件中全局配置的值,返回String,如果不存在返回null
sc.getInitParameterName(); //返回键名的枚举
获取web下的全局项目下的全局路径
String path = sc.getRealPath(String p); //p为web下的路径
Servlet详细讲解相关推荐
- Android webservice的用法详细讲解
Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...
- 2.5万字详细讲解个人网站的开发过程和项目的部署
目录 简介 1 技术介绍 1.1 个人博客功能 1.2 技术组合 1.3 工具与坏境 2 项目的环境配置 2.1 vue的环境配置 2.2 解决跨域问题 2.3 关于图标的获取 3 前端技术 3.1 ...
- WebService详细讲解
1 学习目标 2 webservice 基本概念 2.1 什么是web服务 2.2 简介 2.3 术语 2.3.1 webservice开发规范 2.3.2 SOAP 协议 2.3.3 ...
- 适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)
今天来个简单的小项目,适合新手拿来练手,在OPGG上爬取英雄联盟里的法师,ADC,打野,辅助所有英雄的胜率及选取率,是不是感觉很高大上,但是却很简单,只要用三十多行代码就能实现,详细讲解每一行代码加注 ...
- Python的零基础超详细讲解(第十三天)-Python的类与对象
基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...
- Python的零基础超详细讲解(第十二天)-Python函数及使用
基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...
- Python的零基础超详细讲解(第七天)-Python的数据的应用
往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...
- Python的零基础超详细讲解(第五天)-Python的运算符
往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...
- java异常详细讲解_Java异常处理机制的详细讲解和使用技巧
一起学习 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 1.2 ...
最新文章
- Linux服务器上监控网络带宽的18个常用命令
- go标准库的学习-crypto/sha1
- OpenCV霍夫直线检测的实例(附完整代码)
- 阿里云容器服务cni网络插件terway非官方网络性能测试
- select 和epoll模型区别
- ipad鼠标圆圈变成箭头_下一代 macOS 或将支持 Mac「投屏」到 iPad
- 计算机键盘练习,电脑键盘指法练习经验分享
- android辅助点击软件吗,自动点击器安卓7.0版本粒可辛点击上线了
- vant实现Select效果--单选和多选
- Android项目中调用第三方app
- 携程机票数据仓库建设之路
- Python学习手册(笔记)
- 关于 css 中的转换属性,CSS3中的transform转换属性
- 期货交易怎么买空(期货怎么买做空)
- SVN客户端使用教程
- HashMap源代码详解
- Linux-CentOS7-防火墙开启、关闭、以及查看防火墙状态命令
- 西班牙馅饼 ECNU3528 java
- Levinson-Durbin算法原理推导(Hermitian Toeplitz矩阵,包括实数和复数情况)
- 《计算机图形学》学习笔记(二)