详解Servlet

Servlet

1. Servlet生命周期
和Servlet程序有关的四个核心方法
interface Servlet
	Constructor方法
		对应当前Servlet程序创建过程
	init方法
		对于创建Servlet程序进行初始化配置的方法
	service方法
		Servlet提供服务核心方法
	destroy方法
		Servlet程序销毁方法

生命周期
	1. Servlet程序,实例化过程
	2. Servlet程序初始化配置过程
	3. Servlet程序提供服务,并且处于始终提供服务的过程中,不会重新创建
	4. 当Tomcat服务器退出时,Servlet程序会执行destroy方法

【注意】
	每一个Servlet程序,有且只创建,初始化一次!!!
	不管请求从哪些地方得到,都可以提供服务,不再创建,
	可以认为是一个【单例对象】
2. Servlet常用方法
2.1 HttpServletRequest常用API
方法名称作用
getRequestURL方法返回客户端发出请求时的完整URL
getRequestURI方法返回请求行中的资源名部分
getQueryString方法返回请求行中的参数部分
getRemoteAddr方法返回发出请求的客户机的IP地址
getRemoteHost方法返回发出请求的客户机的完整主机名
getRemotePort方法返回客户机所使用的网络端口号
getLocalAddr方法返回WEB服务器的IP地址
getLocalName方法返回WEB服务器的主机名
getMethod得到客户机请求方式
getParameter获取指定参数的值
getParameterMap获取所有的请求参数和对应的所有值
getParameterNames获取所有的请求参数名称
getParameterValues获取指定参数的所有的值
getInputStream获取请求的传输内容的流
getHead获取指定名称的请求消息头值
2.2 HttpServletResponse常用API
方法名称作用
setStatus(int code)设置响应状态码
setHeader(name,value)设置响应信息头
setCharacterEncoding(String);设置编码格式
setContentType(String)设置返回数据mimetype
getWriter()获取字符输出流
getOutputStream()获取字节输出流
addHeader给定的名字和和数值加到响应的头部
containsHeader是否指定的响应消息头部已被设置过了
addCookie新增Cookie
encodeURL可以对url进行重定向
【补充知识点状态码】
status作用解释
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理
3. Servlet重定向和转发【重点】
3.1 重定向
【重点】
	浏览器行为,浏览器根据服务器响应的要求,重新转向其他URL地址。

生活案例
	用户询问前台,卫生间在哪里,前台告知之后,用户自行前往
	用户可以看作是浏览器,浏览器发送请求到服务器(前台),前台(服务器)告知前台地址,用户(浏览器)自行前往
	
	HttpServletResponse 响应对象完成

注意事项:
	1. 重定向是浏览器行为
	2. 重定向存在两次请求,两次Request,两次request内容完全不一样
	3. 重定向之后,浏览器的URL会发生改变
	4. 重定向可以申请当前服务器内部资源,也可以重定向网络端资源

// 响应重定向
resp.sendRedirect("Resources URL");
3.2 转发
【重点】
	转发是服务器行为,服务器根据用户的请求,当前Servlet转发给其他Servlet处理,最终反馈给用户

生活案例:
	用户在窗口吃饭,点餐之后,服务人员会将需求转发给后厨,后厨完成之后,在返回给服务人员,再给用户
	HttpServletRequest 请求对象完成

注意事项:
	1. 转发是服务器行为
	2. 转发情况下,用户的请求是一次,生成了一个Request对象,和对应的response对象,在转发的过程中,所有的Request和Response都是对应当前用户的
	3. 转发之后,用户端浏览器URL不会发生改变
	4. 转发在当前服务器内部资源完成,不能对应外部资源
// 使用请求Request对象完成转发操作,并且带走了对应的Request对象,和Response对象
req.getRequestDispatcher("Localhost Resources URL").forward(req, resp);
4. 域对象【难点】
4.1 什么是域对象
在一个区域范围以内有效的对象。可以存储数据,存储信息,数据的迁移。。。

JavaWEB项目域对象 Application
Request对象 请求对象
Session对象 会话机制中存储数据的对象
4.1 Request域对象【常用】
使用的方法:
	setAttribute(String name, Object obj);
		在Request域对象中添加指定的名字的属性,并且赋值object,可以是任意数
		据类型
	Object getAttribute(String name);
		从Request域对象中获取对应名字属性的值
	removeAttribute(String name);
		删除指定Request域对象中对应的属性
4.2 ServletContext域对象【代表整个JavaWEB项目】
// 1. 获取ServletContext类对象
ServletContext servletContext = this.getServletContext();

// 2. 获取服务器信息
String serverInfo = servletContext.getServerInfo();
System.out.println(serverInfo);

// 3. 查看当前工作路径
String realPath = servletContext.getRealPath(".");
System.out.println(realPath);

// 4. 设置整个Web项目中属性,可以在任何一个当前JavaWEB项目资源中获取到
servletContext.setAttribute("iPhone0", "6sp");
servletContext.setAttribute("iPhone1", "7p");
servletContext.setAttribute("iPhone2", "8p");
String country = servletContext.getInitParameter("Country");
String province = servletContext.getInitParameter("Province");
System.out.println(country + ":" + province);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值