关于Javaweb的知识总结

在web服务器运行阶段,每个Servlet都只会创建一个实例对象,然而,每次HTTP请求,web服务器都会调用

所请求Servlet实例的service(HttpServletRequest request,HttpServletReponse reponse)方法,重新创建一

个request对象和一个response对象。

  HttpServletResponse接口继承自ServletResponse,专门用于封装HTTP响应消息,且响应消息分为 状态行,响

应消息头,响应消息体三部分。

当Servlet向客户端回送响应消息时需要在响应消息中设置状态码。

setStatus(int status)方法用于设置HTTP响应消息状态码,并生成响应状态行 并且只要通过setStatus(int)

status 方法设置了状态码,即可实现状态行的发送。 正常情况下,web服务器默认会发送一个状态码为200的状

态行。

sendError(int sc)方法用于发送表示错误信息的状态码

addHeader()、setHeader()、addIntHeader()、setIntHeader()、都是用于设置各种头字段的,另外setContentType

()、setLocale()和setCharacterEncoding()方法用于设置字符编码,这些方法可以有效地解决乱码问题。

getOutputStream 方法所获取的字节输出流对象是ServletOutputStream类型

5.2.4 请求重定向


    某些情况,针对客户端请求,一个Servlet类可能无法完成全部工作。这时。可以使用请求重定向来完成

。所谓请求重定向,指的是web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求url

所指向的web资源,而是指定了一个新的资源路径,让客户端重新发送请求。

  为了实现请求重定向,在HttpServletResponse接口中,定义了一个sendRedirect()方法,该方法用于生成

302响应吗和Location响应头,从而通知客户端重新访问Location响应头中指定的url。

  public void sendRedirect(java.lang.String location) throws java.io.IOException

    参数Location 可以使用相对url web服务器会自动将相对url翻译成绝对url,再生成location 头字段


  5.4.1  获取请求参数

  String getParameter(String name) 该方法是用于获取指定名称的参数值,如果请求消息中没有指定名称的

参数,getParameter方法返回null,如果指定名称的参数没有设置值,则返回空子串,否则如果请求消息中包含

多个该指定该名称的参数,则返回String getParaneter(name)方法中第一次出现的参数值

String 【】getParameterValues(String name)Http消息中可以有多个相同名称的参数(通常由一个包含多个同名

字段元素的FORM表单生成),如果要获得HTTP消息中的同一个参数名的多个值,此方法可以返回一个数组来包含所有

返回的参数值。

  Enumeration getParameterNames()方法用于返回一个包含请求参数名的Enumeration对象,在此基础上面可以对

参数名进行遍历

  Map getParameterMap()该方法用于将请求消息中的参数名和参数值装进一个Map对象中返回 

    用UTF-8编码 莫名其妙的乱码!!!

          5.5 ReuqestDispatcher对象的应用

  当一个web资源收到客户端的请求后,如果希望服务器通知另外一个资源去处理请求,这时,除了使用sendRedirect()

方法实现请求重定向外,还可以通过RequestDispatcher借口的实例对象来解决。

getRequestDispatcher(String path)方法 返回封装了某个路径所指定资源的RequestDispatcher对象,其中path必须

以“/”开头,用于表示当前web应用的根目录。需要注意的是,WEB-INF目录中的内容对RequestDispatcher对象也是可见

的,所以,传递给getRequestDispatcher()方法的资源可以是WEB-INF目录中的文件


  请求转发:

forward(ServletRequest request,ServletResponse response) 该方法用于将请求从一个Servlet传递给另外的一个

web资源。在Servlet中,可以对请求做一个初步处理,然后通过调用这个方法,将请求传递给其他资源进行响应。需要

注意的是,该方法必须在响应提交给客户端之前被调用,否则将抛出异常。

请求包含:

  include(ServletRequest request,ServletResponse response) 该方法用于将其他资源作为当前响应内容包含进来

当客户端访问Servlet时,通过调用include()方法将其他web资源包含进来,这样,当请求处理完毕后回送给客户端的

响应结果既包含当前Servlet的响应结果,也包含了其他web资源的响应结果。

COOKIE对象

  服务器向客户端发送cookie时,会在HTTP响应头字段中增加Set-Cookie 响应头字段。Set-Cookie头字段中设置的Cookie

遵循一定的语法格式  set-Cookie:user=itcast;path=/;  其中user表示cookie的名称,itcast表示cookie的值,path

表示 cookie的属性。cookie必须以键值对的形式存在,其属性可以有多个,但是这些属性之间必须用;和空格隔开。

setMaxAge(int expity)和getMaxAge()方法

当设置的值 时正整数的时候表示cookie存活的秒数  值为0的时候表示;立即删除cookie信息,默认情况下,Max-Age

的属性时-1; 

setPath(String uri)和getPath方法

这个方法是针对Cookie的Path属性的。如果创建某个cookie对象没有设置path属性,那么该cookie只对当前访问路径所属

的目录以及子目录有效。如果想让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath方法

将其path属性设置为/;

6.4 Session对象

Cookie技术 可以将用户的信息保存在各自的浏览器中,并且可以在多次请求下实现数据共享。但是,如果传递的信息系比

较多,使用cookie技术显然会增大服务器端程序处理难度。这时可以使用session实现,session是一种将会话数据保存到

服务器端的技术。

Cookie 案例之实现上次访问时间

    首先定义一个变量 LastAccessTime代表上次访问时间默认值设为空

  然后再创建cookies数组来获得来自客户端的请求cookie ,根据获得的cookie的长度进行遍历来查询 名称是 LastAccess

的对象,并根据获得的对象来获得对应的值 并将得到的值赋值给LastAccessTime变量代表上次访问时间,若得到的LastAccessTime

的值为空说明,客户端是第一次访问,页面应输出语句 您是第一次访问本站!否则直接输出访问时间

  其次创建一个cookie对象,并设置其属性名为 LastAccess 和值 LastAccessTime ,然后向客户端发送 创建的cookie。需要

注意的是 cookie为保存在客户端的缓存数据,相当于去医院看病的号码,而session是保存在服务器的数据相当于去医院按照

卡号看病并保存病例的过程。

  Session案例之实现用户登录

    首先需要一个处理类IndexServlet ,在类中创建一个Session对象,然后创建保存数据类 user的对象,利用session

对象来获得属性名为 user的对象,如果user为空则代表是第一次登录,此时页面应该提示用户登录,用一个超链接转到Login。html

页面来提供用户登录。若用户已经登录,则应该显示登录的用户名,用user对象的getUsername方法来获得。

然后继续创建cookie对象将session的标识号存到cookie对象当中去。

Session案例之实现购物车

  实现此项目需要实现5个类,其中第一个类Book类用来封装图书信息,其中指定了id和name属性来表示图书编号和名称

BookDB:该类用于模拟保存所有图书的数据库。该类实现时,通过map集合存储了5个不同的book对象,提供了获取指定图书

和所有图书的相关方法。

ListBookServlet:该类用于显示所有可购买图书的列表,通过单击购买连接,便可将指定的图书添加到购物车中。

purchaseServlet:该类有两个功能,一个是将用户购买的图书信息保存到Session对象中,一个是在用户购买图书结束后

,将页面重新定向到用户已经购买的图书列表

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

推荐阅读更多精彩内容