• 我的Java之旅 第六课 JAVA WEB 请求与响应


    一、有关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()

     

  • 相关阅读:
    spring配置初始化出错
    Java常用工具类(计算MD5,验证码随机生成,天数差值计算)
    Java基础(静态static)
    websocket使用nginx代理后连接频繁打开和关闭
    关于kafka客户端版本与服务端版本不一致导致的一次坑
    kafka
    maven常用命令含义
    pg数据库org.postgresql.util.PSQLException: ERROR: "xxx" is not a sequence
    @Param注解和@Mapper注解
    springmvc对参数接收的两个注解@RequestParam和@RequestBody
  • 原文地址:https://www.cnblogs.com/net515/p/6485593.html
Copyright © 2020-2023  润新知