Servlet学习笔记(三)

时间:2022-10-20 17:59:09

Servlet学习笔记(三)

一、HTTP协议

1.请求:客户端发送欸服务器端的数据

1.1 HTTP请求报文:

  • 报文首部
    • 请求行
    • 请求首部字段
    • 通用首部字段
    • 实体首部字段
  • 空行(\r\n)
  • 报文主体(传输的数据)

2.响应:服务器端发送给客户端的数据

2.1 HTTP响应报文

  • 报文首部
    • 响应行
    • 响应首部字段
    • 通用首部字段
    • 实体首部字段
  • 空行(\r\n)
  • 报文主体(传输的数据)

3.响应状态码

  • 1xx:服务器端接受客户端消息,但是没有接受完成,然后等待一段时间后响应1xx状态码
  • 2xx:成功,常用的是200(代表成功请求)
  • 3xx:重定向,常用有302(重定向)、304(访问缓存)
  • 4xx:客户端错误
    • 404:请求路径没有资源
    • 405:请求方式没有对应doXxx方法
  • 5xx:服务器端错误,常用是500(服务器内部出现问题)

二、Response对象

1.Response设置响应消息

1.1 设置状态码:setStatus(int sc)

1.2 设置响应头:setHeader(String name, String value)

  • 如果要重定向的花,可以先设置响应码302,然后再设置重定向路径Location;或者直接使用sendRedirect(String name, String value)来进行重定向

1.3 设置响应体:

  • 获取输出流
    • 字符输出流:PrintWriter getWriter()
    • 字节输出流:ServletOutputStream getOutputStream()

2.书写路径的注意事项:

2.1 相对路径和绝对路径

  • 相对路径:"."代表当前目录,".."代表上一级目录,"../.."代表上上一级目录,以此类推(是以.或者..开头的)
  • 绝对路径:如:"https://www.baidu.com/directory/index.html" URL中的URI"/directory/index.html"该路径位绝对路径(是以/开头的)

2.2 什么时候用相对路径和绝对路径?

  • 如果路径是发送给客户端使用的,则使用绝对路径(就是要获取虚拟目录,通过request.getContextPath()来获取)
    • 比如a标签、form标签、重定向等等需要使用绝对路径
  • 如果路径是给服务器端使用的,那么直接使用相对路径即可(不需要获取虚拟目录,直接使用资源路径即可)
    • 再请求转发时候,使用的就是相对路径

3.response对象输出到浏览器乱码?

tomcat服务器默认将response的编码设置位ISO-8859-1编码的,而浏览器有的编码是UTF-8,有的是GBK,因此乱码出现了。所以如果直接将中文输出到肯定不行的。解决方法如下:

  • 通过设置response.setCharacterEncoding("utf-8"):这样可以解决获取请求中中文乱码的问题,但是该方法对相当于写死了,因为不同的浏览器解析request请求不一样,Chrome浏览器按照utf-8解析,那么正常显示,但是IE浏览器按照gbk解析就出现问题了,因此这个不推荐

  • 在开始就定义让浏览器解析该请求的编码格式:response.setContentType("text/html;charset=utf-8");,这样子将来不管在哪个浏览器都是按照utf-8编码格式来解析的。这个代码不仅可以指定浏览器解析页面时的编码,同时也内含setCharacterEncoding的功能,所以在实际开发中只要编写 response.setContentType("text/html;charset=utf-8");就可以解决页面输出中文乱码问题。

    //虽然设置为UTF-8,但是浏览器默认解析的是GBK,有的浏览器是UTF-8,所以这样子写死会导致不兼容,一般不用这个方法
    resp.setCharacterEncoding("UTF-8");
    //这个设置让tomcat用utf-8来解析response响应,并且通知浏览器用utf-8来解码
    resp.setContentType("text/html;charset=utf-8");
    PrintWriter pw = resp.getWriter();
    pw.write("你好啊!");

三、ServletContext对象

1.什么是ServletContext对象?

ServletContext对象代表整个web应用,可以和程序的容器(即服务器)通信

2.获取ServletContext对象

  1. 通过request对象获取:request.getServletContext()
  2. 通过HttpServlet对象获取:this.getServletContext()

3.ServletContext对象有什么功能/方法?

  • 获取MIME类型(互联网通信过程中定义的一种文件数据类型)

    • getMimeType(String file)
    • 格式:大类型/小类型 text/html image/jpg
  • 设置域对象共享数据

    • setAttribute(String name, Object value)
    • getAttribute(String name)
    • removeAttribute(String name)
    • ServletContext对象的范围:所有用户的所有请求的数据
  • 获取文件真实(是在服务器中的真实路径)路径

    • getRealPath(String path):如:String realPath = servletContext.getRealPath("/d.txt");这样子结果会得到H:\Java\JavaWeb\out\artifacts\JavaWeb_war_exploded\d.txt,因为获取的路劲就是你的当前web应用的根目录,再加上你的文件的路径,所以:

      •   String b = context.getRealPath("/b.txt");//web目录下资源访问
        System.out.println(b);
      •   String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
        System.out.println(c);
      •   String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
        System.out.println(a);

Servlet学习笔记(三)的更多相关文章

  1. servlet学习笔记三

    Servlet主要内容: 1)状态跟踪 一.状态跟踪 HTTP协议是无状态协议,即请求与请求之间没有任何关系,也就是不会记住任何数据. 但若想在请求间传递数据,怎么办?web里的三个基本容器对象可以解 ...

  2. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. &lbrack;Firefly引擎&rsqb;&lbrack;学习笔记三&rsqb;&lbrack;已完结&rsqb;所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  5. JSP学习笔记&lpar;三&rpar;&colon;简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  6. java之jvm学习笔记三&lpar;Class文件检验器&rpar;

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  7. VSTO学习笔记&lpar;三&rpar; 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  8. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  9. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

随机推荐

  1. 『TCP&sol;IP详解——卷一:协议』读书笔记——18

    2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...

  2. 【BZOJ 3224】普通平衡树 模板题

    删除节点时把节点splay到根: 然后把根左子树的最右边节点splay到根的左孩子上: 然后删除就可以了: 我的教训是删根的时候根的右孩子的父亲指针一定要记得指向根的左孩子!!! my AC code ...

  3. 浏览器兼容问题汇总&lt&semi;转&gt&semi;

    浏览器的内核 Mozilla Firefox ( Gecko ) Internet Explorer ( Trident ) Opera ( Presto ) Safari ( WebKit ) Go ...

  4. Java之面向对象例子(三) 多态,重写,重载,equals&lpar;&rpar;方法和toString&lpar;&rpar;方法的重写

    重写(继承关系) 子类得成员方法和父类的成员方法,方法名,参数类型,参数个数完全相同,这就是子类的方法重写了父类的方法. 重载 在一个类里有两个方法,方法名是完全一样的,参数类型或参数个数不同. 例子 ...

  5. week&lowbar;one-python基础 列表 增删改查

    # Author:larlly #列表增删改查#定义列表name = ["wo","ni","ta","wo"] #定义 ...

  6. Ubuntu(14&period;04LTS)学习札记

    这篇博文是我在基于Ubuntu学习一些知识的札记,方便日后进行不断回顾,这里进行统一记录,当然当学到新的东西也会陆续更新!!!还请各位博主不要见笑,小弟在此谢过~\(≧▽≦)/~啦啦啦!!!! 1.U ...

  7. 拓扑优化中SIMP方法与水平集方法有何优缺点,水平集法变换到高维,不是更复杂了

    作者:周平章链接:https://www.zhihu.com/question/52008623/answer/187927508来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  8. 【转】使用screw plus对PHP源码加密

    运行环境 ubuntu 14.04 php 5.6 源码地址 https://github.com/del-xiong/screw-plus http://git.oschina.net/splot/ ...

  9. Web安全测试漏洞场景

    HTTP.sys 远程代码执行   测试类型: 基础结构测试   威胁分类: 操作系统命令   原因: 未安装第三方产品的最新补丁或最新修订程序   安全性风险: 可能会在 Web 服务器上运行远程命 ...

  10. 如何制作Jar包并在android中调用jar包

    android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmani ...