• Servlet深层知识


    一、ServletContext实现请求转发
    1、得到请求分发器:RequestDispatcher
    ServletContext.getRequestDispatcher(String path):path转发的目标。path路径必须以"/"开头,"/"就代表当前应用。比如/day05 /

    特点:原来用户请求的地址不变,响应由目标响应的。

    二、读取配置文件的三种方式
    *.properties *.xml
    1、使用ServletContext.getRealPath(String filePath)读取资源文件。path路径必须以"/"开头,"/"就代表当前应用。
    作用:getRealPath:得到指定相对路径path资源的实际存放路径(部署绝对路径)

    特点:可以读取任何文件,只能用在web开发环境下。
    2、ResourceBundle:非Web环境下。专门读取*.properties文件的。只能读取类路径下的资源文件。
    3、类加载器:ClassLoader
    非Web环境下。读取任何资源文件。只能读取类路径下的资源文件。


    三、Servlet规范中核心接口类图

    四、HttpServletResponse概述
    1、作用:向客户端输出内容。
    2、具体方法:
    响应行:响应码;响应码描述;
    响应头:
    正文:流

    五、向客户端页面输出中文数据
    1、字节流
    data.getBytes("UTF-8")
    解决浏览器乱码问题:
    a、更改浏览器的编码(不可取)
    b、通知浏览器使用UTF-8解码。(响应头:Content-type=text/html;charset=UTF-8)
    response.setHeader("Content-Type", "text/html;charset=UTF-8");或者response.setContentType("text/html;charset=UTF-8");
    c、给客户端输出<meta>头
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    2、字符流
    a、PrintWriter(JavaWeb中)默认查ISO-8859-1,可以通过HttpServletResponse.setCharacterEncoding(编码)更改默认编码
    不要忘记通知浏览器以相同的编码进行解码。
    b、HttpServletResponse.setContentType("text/html;charset=UTF-8")
    有2个作用:更改字符流的默认编码为UTF-8,同时通知了客户端解码码表



    六、HttpServletResponse应用案例:
    1、控制动态资源不要缓存
    2、控制静态资源的缓存时间
    3、文件下载:中文名称的文件下载
    4、定时刷新
    5、动态输出随机验证码图片
    七、HttpServletResponse的一些细节
    1、在同一个Servlet中,response的字节和字符输出流互斥。
    2、response的所有输出是输出到自己的缓存中的。容器从response对象的缓存中取出正文数据与响应头和响应码组织成HTTP协议的格式,然后再打给浏览器。
    3、response的输出流,容器会自动给你关闭。

    八、HttpServletRequest概述及常用方法
    1、该对象中包含了所有客户端带过的东东

    九、HttpServletRequest获取请求头
    十、HttpServletRequest获取请求参数(内省;BeanUtils框架)
    getParameter(name)方法
    getParameterValues(String name)方法
    getParameterNames方法
    getParameterMap方法 :key:请求参数名 value:请求参数值数组
    getInputStream:以流的形式获取正文数据

    十、请求参数的中文乱码问题:
    1、POST:
    客户端使用什么编码,就以什么编码传递请求参数。
    通知自己的处理程序,客户端提交过来的数据编码:request.setCharacterEncoding("UTF-8");(对get无效)
    2、GET:
    ISO-8859-1
    手工编码:new String(data.getBytes("ISO-8859-1"),"UTF-8");
    十二、请求转发和重定向的不同
    请求重定向:(客户端行为)
    地址栏会变。发出了2次请求。
    response.setStatus(302);
    response.setHeader("Location", "/day05/servlet/RequestDemo5");
    或者
    response.sendRedirect("/day05/servlet/RequestDemo5");

    请求转发:(服务器行为)
    地址栏不会变。发出了1次请求。
    源资源(工商局) 目标资源(民政局):共享请求中的数据


    重点:
    ServletRequest也是一个域对象:Map<String,Object>

    --

    一、各种表单输入域(中文请求参数)
    1、如果表单输入域的type为radio和checkbox,如果用户一个都不选,则不向服务器传递数据。
    2、如果选择了radio或checkbox的输入项中的其中一个,看他们有没有value,如果有,则传value的取值。如果没有,值为on。
    ---------------------------------------------------------------------------------------------------------------------------------
    二、请求转发和包含
    1、请求转发:(当前应用内转)
    方式一:
    ServletContext.getRequestDispatcher(String path):path必须以"/"开头,表示绝对路径
    方式二:
    ServletRequest.getRequestDispatcher(String path):path如果"/"开头,表示绝对路径;如果不以"/"开头,表示相对路径

    2、转发的细节:AServlet(源组件)--->BServlet(目标组件)
    **转发前会清空response的正文。

    转发页面上只会输出目标组件的输出,源组件的任何页面输出都无效。

    原则:转发前,不要刷新或关闭response的输出流。
    3、包含:RequestDispatcher
    AServlet(源组件)--->BServlet(目标组件):AServlet包含BServlet的输出内容

    目标组件所有设置的头都无效,正文有效。
    ---------------------------------------------------------------------------------------------------------------------------------
    三、各种URL地址的写法
    绝对地址:建议使用
    绝对路径的写法:何时需要加上应用名称"/day06"(如果地址给客户端用,要加上。如果给服务器端用,"/"就代表当前应用,即"/day06")
    <img src="path"/> 要加/day06
    <link type="text/style" href="path"/> 要加/day06
    <a href="path"/> 要加/day06
    <script type="text/javascript" src="path"/> 要加/day06
    <form action="path"/> 要加/day06

    getRequestDispatcher(String path): 不要加。"/"就代表了
    头:Refresh=2;URL=path 要加/day06
    ServletContext.getRealPath(String path): 不要加。"/"就代表了

    response.sendRedirect(String path): 要加/day06

  • 相关阅读:
    面向对象
    Vue + webpack 项目实践
    配置webstorm监听less时时转换
    delegate事件代理
    JS for 循环
    JS while 循环
    JS switch 分支语句
    JS if 判断
    JS 运算符
    JS typeof() parseInt() parseFloat()
  • 原文地址:https://www.cnblogs.com/yys369/p/5325902.html
Copyright © 2020-2023  润新知