8.request/response/servlet学习笔记

本文内容
什么是Servlet与Servlet是如何执行的
了解Servlet实现关系
手动和自动开发Servlet

servlet生命周期(面试)
servlet的配置(访问路径/启动时加载)
ServletConfig对象API的使用
ServletContext对象API的使用

Response响应对象的使用
Request请求对象的使用

简单说:
Servlet
response
request

目标:

1.Servlet(创建,配置,访问,手动和自动创建和配置Servlet)

2.掌握Servlet的生命周期方法以及调用时机;
掌握Servlet的访问路径以及优先级关系
3.掌握ServletContext对象
获取web工程名(getContextPath())
获取web项目下的文件资源;
InputStremm getResourseAsStream(“”)
String getRealPath(“”);
Class类
getResourseAsStream(“”)
存值、取值、移除值操作。

掌握HttpServletResponse对象重定向、响应乱码问题的解决方法

掌握HttpServletRequest对象如何接受表单请求参数;
掌握Request域对象存值、取值、移 除值的操作;
掌握post请求、get请求乱码原因以及解决办法

导入项目有叹号(解决)

5.1 Servlet的概述
.理解什么是Servlet?
.如何创建一个Servlet?(了解)

1、Servlet:是运行在 Web 服务器中的一个Java类。通过 HTTP协议接受客户端的请求,同时也会给客户端一个响应。

2.创建一个Servlet的思路:
a)创建一个类实现Servlet接口,实现接口里面的方法
b)配置我们定义的Servlet

5.2 Servlet的入门
创建一个类实现Servlet接口,重写接口里面的方法

在web.xml中配置我们的Servlet

注意:
1.Servlet接口找不到
2.输出中文是...
3.web.xml中 servlet-name要对应上
4.<url-pattern>/hello</url-pattern>要以/开头
5.3 Servlet的执行流程
理解Servlet的执行流程,从而读懂配置文件中的内容。
打开浏览器访问,说明
http://localhost:8080/web_test1/hello
6.1 Servlet的实现关系
SUN设计之初,是有野心,以后的互联网不仅仅只使用http协议,可以通过GenericServlet实现。HttpServlet是一个与协议相关的Servlet是专门用来处理HTTP协议的请求。通常编写一个Servlet一般都会让这个Servlet继承HttpServlet重写service方法。
在service方法内部根据请求方式不同执行不同的doXXX的方法(get请求执行doGet方法,如果是post请求就会执行doPost方法)。
所以往往继承了HttpServlet之后不需要重写service方法,只需要重写doGet和doPost方法即可。往往请求要处理的内容的代码都是一致的,所以需要让doGet和doPost相互调
用可以简化编程。
6.2 Eclipse中使用Servlet模板
新建Servlet
完成Servlet的配置
查看web.xml文件,会自动生成如下内容:
1.1 Servlet的生命周期
.Servlet的生命周期方法有哪些?
.Servlet的生命周期方法分别什么时候被调用?
Servlet生命周期总结:
1.第一次访问servlet,servlet会被创建,并将servlet对象常驻内存,调用init方法进行初始化操作,init方法只执行一次。
2.开启一个线程,调用service方法,用于处理来自浏览器端的请求,以后都是开启一个线程来处理浏览器端请求。(执行多次)
3.当tomcat服务器正常关闭时,会调用destroy方法将servlet销毁。
代码参见:web01\src\com\itheima\servlet\demo1\ServletDemo1.java
浏览器访问:http://localhost:8080/web01/ServletDemo1
1.2 Servlet启动时加载的配置
.什么情况下需要设置启动服务器时加载Servlet?
.如何设置Servlet的启动时加载?
1、当初始化一个Servlet的时间比较长的时候,第一个访问的用户需要等上一段时间,这样一来用户体验会非常差。所以我们可以在启动服务器的时候初始化Servlet,服务器启动完了,Servlet也就初始化完成了。
2、在web.xml中配置:
1.3 Servlet的访问路径的配置
.访问路径分为哪几种?
.对于同一个Servlet,访问路径的优先级是怎样的?
1、访问路径分为:全路径匹配、目录匹配、扩展名匹配,实际上目录匹配也属于全路径匹配。
全路径匹配:以/开头,例如:/ServletLife、/abc/ ServletLife; /a/b/c.do
目录匹配:以/开头,结尾;例如:/、/aaa/代表任意字符);
扩展名匹配:以开头,.xxx结尾,例如:.do、.abc;(x是任意字符)
像aaa.do是不合法的
注意:不能同时使用/
开头,.xxx结尾的路径;例如: /.do 像:/aaa.do属于全路径匹配
2.全路径匹配>目录匹配>扩展名匹配,越精确优先级越高;
例如:
访问路径:/website/aaa/demo1.do
完全:/aaa/demo1.do
目录:/aaa/

扩展名:.do
总结:
完全路径: /aaa/bbb, /hello
目录匹配: /
, /ccc/*
扩展名匹配: *.do, .abc,.action
hello ,错误

2.1 ServletConfig对象
.ServletConfig对象的作用是什么?
ServletConfig对象是用来获取Servlet的一些配置信息的,例如获取Servlet的名称,Servlet的初始化参数…
注意:Servlet的配置信息都是在web.xml的Servlet标签里面配置的。
总结:
ServletConfig对象(了解):保存了Servlet在web.XML中的配置信息
this.getServletConfig(); //获取
Iterator
2.2 ServletContext对象之获取web项目信息
.什么是ServletContext?
.ServletContext对象有什么作用?
1、ServletContext对象又称为Servlet的上下文对象,保存了整个web项目的信息,通过这个上下文对象可以保存或者获取web项目的信息。
一个web项目只有一个ServletContext对象,服务器会为每个项目创建一个ServletContext对象。
2、可以获取文件的MIME类型、全局参数、web项目工程名。
.获取文件的MIME类型(文件下载时要用):
conf/web.xml
.获取web项目请求工程名:
.获取全局初始化参数:
要点:
ServletContext:一个web应用只有一个,它保存的是本web应用的配置信息
1.获取mimeType,(文件下载时要用)
2.获取web工程名
3.获取全局初始化参数
3.1 ServletContext对象之读取web项目下文件
之前使用IO流就可以读取文件(java项目中)。现在是一个web项目,web项目需要发布到tomcat下才能访问的。获取web项目下的文件如果使用传统的IO就会出现问题(原因:路径中使用的是相对路径,相对的是JRE环境)。
读取文件的代码实现
public interface ServletContext
path的值:
D:\apache-tomcat-7.0.53\webapps\web01\WEB-INF\classes\db.properties
补充:
web工程中,普通java类如何读取文件..
web项目读取文件的方式三:
Class类:
InputStream getResourceAsStream(String name)
3.2 ServletContext对象之作为域对象存取数据
.什么是域对象.
.ServletContext如何进行存值、取值和移除值?

1、如果把一个数据存到某个对象身上,在多个地方又能通过这个对象取出来,那么这个对象存的值就有了一定的作用范围,这个对象也就称为域对象。ServletContext作为一个域对象,它的作用范围是整个web项目,因为服务器会为每个web项目创建一个ServletContext对象,只要这个web项目在服务器上没被移除或者服务器没有关闭,那么ServletContext域对象就存在,它身上的数据也就在。
2、存值、取值和移除值的方法:
域对象:
1.作用域,作用范围
i.web服务器启动,ServletContext就会创建.
ii.web服务器停止或项目从服务器卸载,ServletContext就会销毁
2.setAttribute(String,Object)
getAttribute(Stirng)
Servlet总结:
1.手动自动配置Servlet
2.Servlet生命周期
3.配置servlet启动时加载
4.Servlet访问路径的配置
5.获取ServletConfig
6.获取ServletContext
1.getMimeType()
2.全局参数
3.getRealPath(“/”)
4.getResourceAsStream(“/”)
5.作为域对象使用(setAttribute,getAttribute)
4.1 Response对象的概述
.什么是Response?
当用户通过浏览器去访问服务器之后,服务器会对浏览器做出一个回答(响应),这个响应里面包含了很多信息,这些信息会封装成到Response对象身上,这个对象也成为响应对象。
4.2 Response对象的API讲解
掌握几个常用的方法:
1、setHeader()方法是设置一个key对应一个value的响应头信息,设置的头信息会替换原来的头信息;addHeader()方法是设置一个key对应多个value的响应头信息,添加的头信息会追加到原来的头信息后面
2、HttpServletResponse对象常用的方法
4.3 Response对象的API的代码演示
.让页面重定向有几种方式?

重定向的2中方式:

解决页面输出中文乱码和定时刷新页面:

1.重定向
2.定时刷新
3.向浏览器输出中文
4.4 页面定时跳转的案例扩展
.如何实现倒计时的功能?
主要是使用javascript里面的循环定时器来倒计时。
代码参见:web01\WebContent\response\demo1.html
访问:http://localhost:8080/web01/response/demo1.html
5.1 Response对象响应的中文乱码处理

字符流是有缓冲区的, response设计默认的缓冲区编码是ISO-8859-1,这个字符集不支持中文的。所以一定会出现乱码问题,一旦出现乱码问题,我们只需要设置response字符流缓冲区的编码和设置浏览器默认打开时候采用的字符集一致即可
总结:
reponse响应中文乱码(记住下面的总结即可):

//1.向页面输出中文字符串
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print("你好!");

        //2.向页面输出二进制,文件

response.getOutputStream().write(byte[]);

  1. 注意:先设置编码,后向页面输出
    response.getWriter().print("你好!");
    response.setContentType("text/html;charset=UTF-8");//放前面
    5.2 Request对象的概述及API的介绍
    .掌握获取请求参数的方法
    .掌握Request作为域对象存值、取值和移除值的方法
    1、获取请求参数的方法:
    Map<String,String[]>

2、Request域存值、取值、移除值的方法:
5.3 Request对象的API的代码演示
访问:
结果:
6.1 Request对象接收表单请求参数
表单页面:
接收请求参数
结果:
6.2 Request对象接收表单请求参数时中文乱码处理
.post请求提交参数乱码,如何解决?
.get请求提交参数乱码, 如何解决
1、post请求提交的参数是在请求体中传递的,数据会存放在request字符缓冲区里面,而缓冲区默认编码是iso-8859-1编码,所以我们只需要设置缓冲区编码为utf-8即可。
2、get请求提交的参数是在地址栏中传递的额,浏览器会对数据进行一次编码,数据发送到服务器之后,服务器默认使用iso-8859-1进行解码,这样乱码就产生了。要知道我们程序是不应该改浏览器和服务器的字符集,所以,我们只能倒着编码和解码一次就可获得原来的字符。如下图所示:
代码演示:
request请求参数乱码的解决:
//解决post乱码
request.setCharacterEncoding("utf-8");
request.getParameter("name");
//解决get方式乱码
String name = request.getParameter("name");
name = new String(name.getBytes("iso-8859-1"),"utf-8");
总结:
Servlet
1.手动和自动创建Servlet,并配置,可以通过浏览器访问到
2.Servlet生命周期方法有哪些.何时执行.
3.配置Servlet启动时加载
4.掌握Servlet 的URL的3种配置方式
5.获取ServletConfig(了解)
6.获取ServletContext
a.getMimeType()文件下载时使用
b.String getRealPath(“/”)
c.InputStream getResourceAsStream(“/”)
2)作为域对象使用(1.有3个方法setAttribute(String,Object),getAttribute(String),removeAttribute(String) 2.范围多大)
Response
setStatus()
setHeader(“key”,”value”)
getWriter()
getOutputStream() ; //下载时用
sendRedirect(“path”);
setContentType(“text/html;charset=utf-8”);
Request
String getMethod();
getRemoteAddr();
getHeader(“User-Agent”);
String getParameter(String);
String[] getParameterValues(String)
Map<String,String[]> getParameterMap()
目标:
1.掌握Servlet的生命周期方法以及调用时机;
掌握Servlet的访问路径以及优先级关系
2掌握ServletContext对象
获取web工程名
获取web项目下的文件资源;
存值、取值、移除值操作。
3.掌握HttpServletResponse对象,重定向、
响应乱码问题的解决方法
4.掌握HttpServletRequest对象如何接受表单请求参数;
掌握Request域对象存值、取值、移 除值的操作;
掌握post请求、get请求乱码原因以及解决办法
post
request.setCharactorEncoding(“utf-8”);
get:
new String(getParameter(“name”).getBytes(“iso-8859-1”),”utf-8”)
中文乱码.
1.请求乱码
①get
a.String name = request.getParameter(“username”);
b.name = new String(name.getBytes(“iso-8859-1”),”utf-8”);
②post
a.request.setCharacterEncoding(“utf-8”);
2.响应中文乱码
(1)response.setContentType(“text/html;charset=utf-8”);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,397评论 0 10
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,182评论 11 349
  • 天气逐渐转凉了,宝贝肠胃不好的可以试试这款脆皮香蕉。 食材:香蕉1个 鸡蛋1个 米粉1勺 操作:1.把香蕉切块备用...
    田野_4750阅读 263评论 0 1
  • 最近几年各类男士几乎都钟爱成熟性感的络腮胡子,看来这个造型仍然非常流行。 以下是HISDRESS girls 为男...
    穿衣打扮搭配阅读 1,636评论 0 50