一、有关URL编码

   1、在URL的规范中定义了一些保留字符,如::  /  ?  & =  @  % 等,在URI中有它的作用。如果要在URI中包含这些字符,必须转码,即%字符后跟十六进制数值表示方式。
   在java中可以使用java.net.URLEncoder类的encode()方法编码,用java.net.URLDecoder类的decode()方法解码。
二、何谓Web容器
 对于每个请求,容器创建一个线程并转发给适当的Servlet来处理。
 JSP终究会被容器转译为Servlet并加载执行。
三、Servlet
   一个Servlet 类必须继承Httpservlet
   输出HTML时,必须通过Java的输入输出功能(HttpServletResponse取得PrintWriter)
四、项目目录
WEB-INF:名称是固定的,而且一定是位于应用程序根目录下。该目录下的文件和目录对外界是封闭的。也就是说客户端无法使用下面的文件。不想让外界存取的资源,可以放在这个目录下。
web.xml:Web应用程序部署描述文件,一定是放在WEB-INF中根目录下,名称一定是web.xml。
lib:放置JAR文件的目录,一定是放在WEB-INF中根目录下,名称一定是lib。
classes:放置编译过后.class文件的目录,一定是放在WEB-INF目录下,名称一定是classes。编绎过后的类文件,必须有与包名称相符的目录结构。
  两个获取路径的方法 

假设url为http://localhost:8080/webtest/ser

  则环境路径  request.getContextPath() 返回  /webtest
  Servlet 路径  request.getServletPath()返回 /ser
五、Servlet    API大全
★编码问题
  Servlet容器默认编码为ISO-8859-1,浏览器一般为UTF-8,所以交互过程中要作转码操作:
   1、容器向浏览器发送内容时        
    response.setHeader("Content-type", "text/html;charset=UTF-8");//设置请求头; 必须放在方法开始的位置 

或者   response.setCharacterEncoding("UTF-8");//告知浏览器编码方式; 必须放在方法开始的位置

       response.getWriter().append("好呀");  
    2、容器接收浏览器内容时
      request.setCharacterEncoding("UTF-8");//只对post有效
      //以下为Get方式(由于Get参数在URL中,URL是由HTTP服务器处理,而非容器)
        String name = request.getParameter("name");
        name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
 补充:
   1 设置Locale   浏览器如果有发送Accept-Language标头,可以使用HttpServletRequest的getLocale()取得一个Locale对象,代表客户端可接受的语系。可以使用HttpServletRequest的setLocale()设置Locale信息。
    Locale包括了语系和编码信息。语系通常通过标头Content-Language来设置,而setLocale也会设置HTTP响应的Content-Language标头。
   2 使用setContentType()时可以指定charset的值,如果指定了值会自动调用setCharacterEncoding()。
   3 如果使用setContentType()指定了charset或使用了setCharacterEncoding(),则setLocale()就会被忽略。
   4 如果要接收中文并要响应浏览器中文,必须同时设置request和response的编码。
   5 MIME 类型  可以使用ServletContext的getMimeType()方法得到某个文件的MIME类型名称。
★常用方法 
getServletContext()
getServletConfig()
1 、关于HttpServletRequest
getParameter()
getParameterValues() 复选框等的值
getParameterNames() 参数名称
getParameterMap() 参数以Map对象返回,key为参数名称,value是值,以字符串数组String[]返回(考虑复选问题)。
    取得HTTP的标头信息有如下方法:
  getHeader()
  getHeaders()
getHeaderNames()
  getContextPath() web应用程序环境路径
    getIntHeader()
    getDateHeader()
 
getReader()  取得一个BufferedReader对象,对过该对象读取请求的Body数据。
getInputStream() //取得ServletInputStream,它是InputStream的子类,代表请求Body的串流对象,利用它处理上传的文件区段。
  同一请求期间,getReader()和getInputStream()只能择一调用,否则抛出IllegalStateException异常。
getPart()、getParts() //Servlet3.0中,新的上传文件方法,协助处理文件上传。 @MultipartConfig标注可用来设置上传文件的相关配置。
  使用RequestDispatcher调派请求:当需要多个Servlet来完成请求时,用此方法调用其它Servlet相对URL网址。具体如下:
     getRequestDispatcher() 取得RequestDispatcher接口的实现对象实例。包含以下几个方法
      include() 将另一个Servlet的操作流程包括至目前的Servlet操作流程中。
      forward() 将请求处理转发给别的Servlet。若调用该方法,则当前的Servlet不能有任何响应确认(Commit)。   在被转发请求的Servlet中,可通过请求范围属性取得对应信息。
      请求范围属性  在inclue()和forward()时包括请求参数的做法,仅适用于传递字符串值给另一个Servlet。有关方法如下:
   setAttribute()
   getAttribute()
   getAttributeNames()
   removeAttribute()
 请求对象仅在此次请求周期内有效。 
 在设置请求范围属性时,名称由java.或者javax.开头的通常保留给某些特定意义的属性。比如下面几个:
 javax.servlet.include.request_uri
 javax.servlet.include.context_path
 javax.servlet.include.servlet_uri
 javax.servlet.include.path_info
 javax.servlet.include.query_string 给定的请求参数
2、关于HttpServletResponse
 setContentType() 设置响应类型
  getWriter()取得PrintWriter对象,然后使用println()等方法输出HTML内容。
  setHeader()、addHeader()设置响应标头
    setIntHeader()、 addIntHeader()、setDateHeader()、addDateHeader()
 sendRedirect() 重定向  可以指定绝对或者相对URL地址。地址栏会发生变更
 sendError()传送错误状态信息
getOutputStream() 取得ServletOutputStream,直接使用串流对象对浏览器进行字节数据的响应。
     getServletContext().getResourceAsStream()  从文件取得串流数据
  容器可以(但非必要)对响应进行缓冲,通常容器默认都会对响应进行缓冲。有关缓冲的几个方法:
getBufferSize()
setBufferSize()  必须在调用HttpServletResponse的getWriter()或者getOutputStream()方法之前调用,所取得的Writer或者ServletOutputStream才会套用这个设置。否则报IllegalStateException。
isCommitted()
reset()
resetBuffer()
flushBuffer()

我的Java之旅 第六课 JAVA WEB 请求与响应的更多相关文章

  1. 我的Java之旅 第五课 JAVA 语言语法 集合

    JAVA集合只能存放引用类型的的数据,不能存放基本数据类型,int 可以用 Integer代替. 一.集合接口  1.  Iterable<E> 实现这个接口允许对象成为 "fo ...

  2. 我的Java之旅 第四课 JAVA 语言语法 基础

    1  整型           int num = 1_000_000; //从java 7开始支持的语法 ,只是让人更易读,java编绎器会去除   2  字符串        一定不能使用==运算 ...

  3. 我的Java之旅 第七课 JAVA WEB 会话管理

    1.隐藏域       隐藏域其实不是Servlet/JSP的会话管理机制的内容,但它能实现简单的页面状态记录的效果. 2.Cookie    Cookie类    setMaxAge() 设置有效期 ...

  4. JAVA之旅(六)——单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖

    JAVA之旅(六)--单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖 java也越来越深入了,大家加油吧!咱们一步步来 一.单例设计模式 什么是设计模式? JAVA当中有 ...

  5. 《快乐编程大本营》java语言训练班-第4课:java流程控制

    <快乐编程大本营>java语言训练班-第4课:java流程控制 第1节. 顺序执行语句 第2节. 条件分支语句:if条件语句 第3节. 条件分支语句:switch 条件语句 第4节. 条件 ...

  6. 我的Java之旅 第三课 从Applet到JSP

    一.Applet   Applet是一种特殊的Java程序,它本身不能单独运行(因为本身没有main()),需要嵌入在一个HTML文件中,借助浏览器或者appletviewer来解释执行.   App ...

  7. JAVA中反射机制六(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  8. 我的Java之旅 第八课 Servlet 进阶API、过滤器与监听器

    1.Servlet.ServletConfig与GenericServlet     首次请求的顺序      => 生成HttpServletRequest与HttpServletRespon ...

  9. JAVA学习第二十六课(多线程(五))- 多线程间的通信问题

    一.线程间的通信 实例代码: 需求是:输入一个姓名和性别后,就输出一个姓名和性别 class Resource { String name; String sex ; } class Input im ...

随机推荐

  1. Linux pwn入门教程(6)——格式化字符串漏洞

    作者:Tangerine@SAINTSEC 0x00 printf函数中的漏洞 printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进 ...

  2. 周末,说声php的setter&getter(魔术)方法,你们辛苦了

    php 作为快速迭代项目的语言,其牛逼性质自不必多说.今天咱们要来说说php语言几个魔术方法,当然了,本文主要以setter&getter方法说明为主. 首先,咱们得知道什么叫魔术方法? 官方 ...

  3. value,innerHTML,innerText之间的区别

    value:是DOM对象的属性.主要用于获取单标签的属性,(针对单标签): innerHEML:用于获取闭合双标签里面的内容,(可以识别标签): innerText:用于获取闭合单标签里面的内容,(不 ...

  4. Spring Boot国际化开发实战

    本章将讲解如何在Spring Boot和Thymeleaf中做页面模板国际化的支持,根据系统语言环境或者session中的语言来自动读取不同环境中的文字. 国际化自动配置 Spring Boot中已经 ...

  5. python爬取微信信息--显示性别/地域/词云(附代码)

    看到一篇有意思的博客 利用微信开放的接口itchat 可以获取登录的微信好友信息 并且利用图像工具显示分析结果 非常的有意思 记录下实现过程 并提供可执行代码 首先要 import itchat 库 ...

  6. 在Android Studio添加本地aar包引用

    1.如何在Android Studio添加本地aar包引用 https://jingyan.baidu.com/article/2a13832890d08f074a134ff0.html 2.完成上述 ...

  7. Rsync文件同步工具

    前段时间因公司需求,需要把备份的文件进行同步保存,后面就想到了我们大家都最熟悉的文件同步工作Rsync,于是就捣鼓了一下午时间,然后总结了下大概过程和参数详情. 首先了解了下rsync同步的大致原理: ...

  8. 从零开始学 Web 之 BOM(二)定时器

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  9. Vue + Element UI 实现权限管理系统 前端篇(十一):第三方图标库

    使用第三方图标库 用过Elment的同鞋都知道,Element UI提供的字体图符少之又少,实在是不够用啊,幸好现在有不少丰富的第三方图标库可用,引入也不会很麻烦. Font Awesome Font ...

  10. Eureka多机高可用

    线上Eureka高可用集群,至少三个节点组成一个集群,推荐部署在不同的服务器上,IP用域名绑定,端口保持一致. 10.1.22.26:876210.1.22.27:876210.1.22.28:876 ...