zoukankan      html  css  js  c++  java
  • 2020.12.9

    一、今日学习内容:

    今天学习的主要内容是处理乱码

    处 理 乱 码
    在我们开发网站的时候,经常会出现乱码,出现乱码的主要原因是页面的编码方式和
    用户请求信息所使用的编码方式不相同。为了解决乱码问题,我们可以使用标准标签库中
    的标签。
    3.4.1 处理乱码的代码
    可以使用标准标签库中的相应标签处理乱码:首先声明要使用的标准标签库,之后调
    用标准标签库中的相应标签即可。
    声明标准标签库:
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    使用标准标签库中的标签进行处理,代码如下:
    <fmt:requestEncoding value="GB2312"/>
    下面介绍标准标签库的用法。
    标准标签库(JSTL)是一组能够方便用户操作的标签,能够完成很多常用的功能。JSTL
    在刚开始时是作为一个开源项目供大家使用的,在 JSP 2.0 之后,JSTL 已经成为 JSP 的一
    部分。
    标准标签库是根据 JSP 提供的自定义标签机制完成的。自定义标签能够把一些处理功
    能封装起来,其使用与普通的 JSP 标签一样简单。标准标签库的用法与所有的自定义标签
    库的用法完全相同。
    要使用自定义标签库中的标签,需执行如下几个过程:
    ● 编写标签库。
    ● 部署标签库。
    ● 使用 taglib 指令声明要使用的标签库。
    ● 访问标签库中的标签。
    3.4.2 编写标签库
    编写标签库包括两部分:编写实现文件和编写标签库描述文件。
    62 Java Web 程序设计基础教程
    因为标签库实际上就是使用 Java 文件实现功能,然后像使用普通 JSP 标签那样使用自
    己定义的标签库,所以需要编写功能的实现文件,而且需要按照一定的规则来编写。具体
    编写方法本书不作介绍,读者如果感兴趣,可以参考其他相关书籍。
    实现文件完成之后,需要编写标签库描述文件(简称 tld 文件)。标签库描述文件用于描
    述有哪些标签可以使用以及如何使用。下面是一个标签库的例子,其中使用注释进行了
    说明:

    <!--版本说明-->
    <?xml version="1.0" encoding="UTF-8" ?>
    <!---xml 文档的 schema->
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <!--标签库的属性描述-->
    <description>JSTL 1.1 i18n-capable formatting library</description>
    <!--显示的名字,在使用可视化工具进行管理的时候可以使用-->
    <display-name>JSTL fmt</display-name>
    <!--tld 文件的版本-->
    <tlib-version>1.1</tlib-version>
    <!--标签库的名字-->
    <short-name>fmt</short-name>
    <!--标签库的标识,在应用中必须是唯一的,这点非常重要-->
    <uri>http://java.sun.com/jsp/jstl/fmt</uri>
    <!--使用的验证器-->
    <validator>
    <description>
    Provides core validation features for JSTL tags.
    </description>
    <validator-class>
    org.apache.taglibs.standard.tlv.JstlFmtTLV
    </validator-class>
    </validator>
    <!--具体的标签-->
    <tag>
    <description>


    <!--标签的描述信息-->
    Sets the request character encoding
    </description>
    <!--标签的名字-->
    第 3 章 输 出 63
    <name>requestEncoding</name>
    <!--该标签对应的处理文件-->
    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag</tag-class>
    <!--是否有标签体-->
    <body-content>empty</body-content>
    <!--标签的属性-->
    <attribute>
    <description>
    Name of character encoding to be applied when
    decoding request parameters.
    </description>
    <name>value</name>
    <required>false</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute>
    </tag>
    <!--此处省略了 tld 文件的其他部分-->
    以上就是我们将要使用的标准标签库中一个标签库的 tld 文件的一部分。
    3.4.3 部署标签库
    部署标签库就是把要使用的标签库放到应用中。标签库的实现文件通常都打包成 jar 文
    件,tld 文件也可以打包到 jar 文件中。部署的时候把这些 jar 文件放在 WEB-INF 目录下的
    lib 子目录中。
    标准标签库的相关文件在两个压缩包 jstl.jar 和 standard.jar 中,所以部署的时候只需要
    把这两个压缩包放到 WEB-INF 目录的 lib 子目录中即可。
    3.4.4 声明标签库
    要使用标签,必须在相应的文件中声明该标签所在的标签库。标签库的声明可以使用
    taglib 指令完成。
    taglib 指令的基本语法格式如下:
    <%@ taglib prefix="前缀" uri="标签库的标识"%>
    开始标志为“<%@ taglib”,结束标志为“%>”,有两个属性:uri 和 prefix。uri 指出使
    用哪个标签库,其值就是标签库的唯一标识,是在 tld 文件中定义的。3.4.2 小节例子中的标
    签库的 uri 为:
    http://java.sun.com/jsp/jstl/fmt
    prefix 属性用来指定一个前缀,这个前缀表示要使用的这个标签库,在访问这个标签库
    中的标签时要根据这个前缀访问,相当于标签库的一个别名。
    假设要使用标准标签库中的核心标签库,可以使用下面的代码声明:
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    64 Java Web 程序设计基础教程
    该标签库的标识是 http://java.sun.com/jsp/jstl/core,前缀是 c。
    3.4.5 使用标签库中的标签
    标签库中标签的使用方法应该依据 tld 文件对该标签的描述来确定。一般格式如下:
    <前缀:标签名
    属性名="属性值"
    M
    >
    标签体
    </前缀:标签名>
    前缀就是声明标签库时指定的前缀,标签名是指标签库中的某一个标签的名字,即 tld
    文件中使用的标签名。在一个标签库中存在很多标签。
    使用标签的时候,可以提供一些属性。属性应该与 tld 文件中指定的属性一致。如果标
    签没有标签体,则可以写成下面的格式:
    <前缀:标签名
    属性名="属性值"
    M
    />
    下面的代码用于定义一个变量,它使用的是标准标签库中核心标签库中的 set 标签:
    <c:set var="id">
    123
    </c:set>
    c 是核心标记库的前缀,set 是核心标签库中的一个标签,var 是标签的一个属性,这个
    属性的值是 id,标签体是 123。
    要解决乱码,可以使用标准标签库中格式化标签库中的 requestEncoding 标签。该标签
    的基本格式如下:
    <fmt:requestEncoding value="编码方式"/>
    可以在文件的前面加上如下的代码:
    <%@ page contentType="text/html;charset=GB2312"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <fmt:requestEncoding value="GB2312"/>
    第一行代码声明当前页面使用的编码方式是 GB2312。第二行声明要使用的标签库。第
    三行是格式化标签,作用是把请求中的编码转换为 GB2312,请求中默认的编码方式为
    ISO8859-1。
    3.4.6 相关知识
    如果使用 Java 代码进行乱码的处理,可以有两种方式:对请求信息进行整体的编码转
    换;只对可能出现乱码的信息进行转换。
    (1) 对信息进行整体编码转换。出现乱码的主要原因是请求信息的编码方式与页面显示
    第 3 章 输 出 65
    信息所使用的编码方式不同,这时只要把请求信息的编码直接转换成页面所使用的编码即
    可。可以使用下面的代码:
    request.setCharacterEncoding("GB2312")
    参数就是页面采用的编码方式。通常页面的编码方式是 GB2312,所以上面的代码就是
    通常的格式。
    (2) 只对可能出现乱码的信息进行处理。可以使用下面的代码:
    username = new String(username.getBytes("ISO8859-1"))
    即把 username 的编码方式从 ISO8859-1 转换成页面所采用的编码方式,如果需指定要转换
    成的编码方式,可以使用下面的代码:
    username = new String(username.getBytes("ISO8859-1"),"GB2312")
    相当于把编码从 ISO8859-1 转换成 GB2312。

    二、遇到的问题:

    还是需要理解记忆。

    三、明日学习计划:

    继续学习javaweb。

  • 相关阅读:
    Linux命令笔记
    拆功放板笔记
    从输入 URL 到页面加载完的过程中都发生了什么---优化
    python学习笔记(三)
    python学习笔记(二)
    python学习笔记(一)
    公交wifi运营平台分析
    testNG小试牛刀
    maven小项目注册服务(三)--web模块
    用maven进行测试
  • 原文地址:https://www.cnblogs.com/marr/p/14178014.html
Copyright © 2011-2022 走看看