复习日记-xml/tomcat/response/request

xml:

  可扩展的标签语言

  标签自定义

  作用:存储数据

  书写规范:

    1.区分大小写

    2.应该有一个根标签

    3.标签必须关闭

    4.属性必须用引号括起来

    5.标签体中的空格或者换行、制表符等都是作为数据内容存在

    6.特殊字符必须转义

xml组成部分:

    声明:<?xml ...?>

    标签:

        不能以xml开头、必须关闭、不能出现特殊字符

    属性:用引号引起来

    注释:

    CDATA:

      xml文件中的特殊字符必须转义,但是使用CDATA就可以不需要转义,直接原样输出

      cdata格式:

        <![CDATA[

          原样输出的内容

        ]]>

/////////////////////////////////////////////////////////////////////////

xml解析

  解析方式:

      1.sax解析:从上到下逐行解析,只能查询,不支持增删改

      2.dom解析:一次性将文档加载到内存中,形成一棵dom树,可以进行crud操作

  解析技术:

      JAXP:sun提供的dom和sax开发包

      JDom:dom解析方式

      jsoup:一种处理HTML特定解析开发包

      dom4j:常用的解析开发包,hibernate底层使用

//////////////////////////////////////////////////////////////////////////

反射:

  1.获取class对象的方式

      1.Class clazz = Class.forName("全限定名");

      2.Class clazz = 类名.class;

      3.Class clazz = 对象.getClass();

  2.通过class对象创建一个实例对象(相当于new类)

      object clazz.newInstance();

  3.通过class对象获取一个方法

      Method method = clazz.getMethod("方法名",Class ...  paramType);

          Class ... 表示参数个数可变、paramType表示参数类型

  4.方法执行;

      method.invoke(Object  实例对象,Object 参数);  例如:method(a,10,30);

xml约束:一个xml文件只可以有一个DTD约束,可以有多个scheme约束

  作用:规定xml中可以出现哪些元素以及属性,以及它们出现的顺序

  约束的分类:

    DTD约束:struts2、hibernate等

    schema约束:tomcat、spring等

DTD约束:

    和xml关联:

      内部关联

         格式:<!DOCTYPE  根元素名  [dtd语法]>

      外部关联-系统关联

         格式:<!DOCTYPE  根元素名 SYSTEM "约束文件的位置">

      外部关联-公共关联 

         格式:<!DOCTYPE  根元素名 PUBLIC   "DTD约束文件名称" "约束文件的位置">

SCHEMA约束:

    一个xml文档可以有多个schema约束

    xml和schema的关联

      格式:

          <根标签   xmlns="..." ...>

          <根标签   xmlns:别名="..." ...>

      名称空间;

        关联约束文件

      例如:一个约束文件中有table,另一个约束文件中也有table,在同一个xml中同时引入这两个schema约束,一旦写一个table,应该使用哪一个约束呢?

         为了避免这种情况发生,可以给其中一个约束起一个别名,使用的时候若是没有加别名就代表来自于没有别名的约束文件

          例如a:table和table

      显然:在一个xml文件中只能有一个不起别名的schema约束

tomcat:

  下载;

    .tar  .tar.gz这种结尾是提供给Linux系统使用的

    .zip  .exe这种结尾是提供给Windows系统使用的

tomcat默认端口是8080,但是项目上线时基本修改为80端口,因为80是HTTP的端口号,且在浏览器中可以省略不写

有可能出现的问题:在环境变量中配置了CATALINA_HOME(tomcat的地址),这会导致无论安装几个tomcat都只会启动该变量所注明的那个

解决:删掉

通过类加载器获取文件路径(处于classes目录下的文件)

类.class.getClassLoader().getReousrce("文件路径").getPath()

类.class.getClassLoader().getReousrceAsStream("文件路径")  返回一个流

////////////////////////////////////////////////////////////////

response:

 302:重定向

 304:读缓存

 404:用户访问错误,资源不存在

 405:访问的方法不存在

 500:服务器内部错误

常用方法:

  setStatus(int 状态码):针对于1xx、2xx、3xx   配合location响应头使用

  了解:

      sendError(int 状态码):针对于4xx、5xx

常用响应头:

  location:重定向

  refresh:定时刷新

  content-type:设置文件的mime类型,设置响应流的编码及告诉浏览器用什么编码打开

  content-disposition:文件下载需要的响应头   

重定向实现方式:

  1.response.setStatus(302);    response.setHeader("location","地址");

  2.封装以上两步:response.setRedirect("地址");  

定时刷新:

  方案一:设置响应头refresh

  方案二:通过HTTP的<meta>标签  <meta  http-equiv=“refresh"  content="3;url=..."> 三秒以后跳转到url地址

操作响应体:

  页面上要展示的内容

  常用方法;

    Writer getWriter():字符流

    ServletOutputStream  getOutputStream():字节流

    注意:自己写的东西用字符流,其余用字节流,但是这两个流不可以一起使用(互斥),当响应完成之后,服务器会判断流是否关闭,若没有服务器自动帮关闭

处理响应的中文乱码:

  方式一:response.setContentType("text/html";charset=utf-8);  

  方式二:未封装前:response.setHeader("content-type","text/html;charset=utf-8"); 

////////////////////////////////////////////////////

文件下载:

  下载方式:

    1.超链接下载

      若浏览器可以解析下载资源的MIME类型,则自动打开,若不能解析则下载

    2.编码下载  通过servlet完成

      <a href="...servletname?name=资源名">下载</a>

        1.设置文件mime类型  response.setContentType(类型)

        2.设置下载头信息  content-disposition

          response.setHeader("content-disposition","attachment;filename="+文件名)

        3.提供流 

          response.getOutputStream()

    扩展:使用commons-io工具包操作流

    扩展:通过response生成验证码

       验证码:通过Java生成的验证码放在session中,在后台和用户输入的进行对比

          作用:防止暴力攻击

request:

重要的请求头;

    user-agent:浏览器内核

    referer:页面来源,防盗链

请求的中文乱码:

  get请求:参数追加到地址栏,会使用utf-8编码,服务器接收到请求之后,使用ios-8859-1解码,所以出现乱码

  post请求:参数存放在请求体中,服务器获取请求体时使用iso8859-1解码,也会出现乱码

  通用的方式:get和post都可以使用

      new String(参数.getBytes("iso8859-1"),"utf-8");

  针对post请求还有一种处理方式:只需要将请求流的编码设置成utf-8

      request.setCharacterEncoding("utf-8");

扩展:URLEncode.encode(s,"utf-8");指定编码

   URLDecode.decode(s,"iso8859-1");指定解码

中文下载扩展:

    中文名称的文件名下载的时候名称会出现乱码问题,导致找不到指定资源,因此需要iso--->utf-8

    常见的浏览器需要提供文件名称的utf-8编码的东西

    对于火狐浏览器需要提供文件名称的base64编码

请求转发:一次会话,request域和session域数据共享

请求转发和重定向的区别;

  重定向两次请求、地址栏改变,请求转发一次请求,地址栏不变

  重定向是从浏览器发送的,请求转发是服务器内部转发,路径不一样

  重定向不存在request域对象,请求转发可以使用request域对象

  重定向是response的方法,请求转发是request的方法

  重定向可以请求站外资源,请求转发不可以   

//////////////////////////////////////////////////////////////////////////////////

jsp: java server pages  Java服务器页面

本质上是一个servlet,在HTML上嵌套Java代码

运行在服务器端,处理请求、生成动态内容

对应的Java和class文件在tomcat目录下的work目录

注意:新建的jsp文件默认charset=iso,可以去eclipse修改默认设置   

执行流程;

  1.浏览器发送请求,jspservlet找到对应的jsp文件

  2.服务器接收请求,JspServlet会帮我们查找对应的jsp文件

  3.服务器将对应的JSP页面翻译成.java文件

  4.jvm会将Java编译成.class文件

  5.服务器运行class文件,生成动态内容

  6.将内容发送给服务器,服务器组装成响应信息发送给浏览器

  7.浏览器接收数据,解析展示  

session底层依赖于cookie 

cookie:JSESSIONID=...

原文地址:https://www.cnblogs.com/tfboy/p/10375091.html