0
点赞
收藏
分享

微信扫一扫

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()


系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、绝对路径
  • 二、乱码问题
  • 现象
  • 解决乱码问题
  • 解决请求乱码
  • 解决响应乱码
  • 总结

前言

因为现在的路径都不是绝对路径会有安全隐患404,即找不到资源文件

一、绝对路径

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_02


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_03


由于相对路径会有问题,隐患404

现在我们把一整套的相对路径改成绝对路径

服务器解析 :/ 代表的是当前项目

浏览器解析:/ 代表的 是8080

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_04

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_05


因为这样写,一个两个还好,如果很多的话,并不方便,我们有没有简单的办法?有,加个base标签

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_06

特别需要注意的是如下,千万注意!!!

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_07


所以不能加 /

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_08


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_09


项目名动态获取在jsp的时候会讲,这里暂时不管

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_10


跳转的地方也要变成绝对路径,都加上 /

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_11


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_12


浏览器解析的 / 代表的 就是 8080

8080 下 还得加个项目名 才能找到我们想要的路径

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_13


当然后面真实项目中我们肯定会动态获取项目名

动态获取项目名其实就是前面文章所讲的 获取虚拟路径

/ + 项目名 = 虚拟路径

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_14


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_15


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_16


可以回首页,就说明绝对路径是完全没有问题的

二、乱码问题

现象

如果前面代码都敲了一遍,应该已经发现这个问题了,直接教你乱码了

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_17


好了不开玩笑,这个页面应该很熟悉

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_18


然后前台打印出来的效果:

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_19


虽然平时不建议使用中文,如果万一我们的项目中就是有中文呢,不可避免的有中文怎么办?

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_20


怎么解决乱码问题?首先我们要先知道为什么会出现乱码问题

乱码实际上就是编码与解码不一致,就会出现乱码

那么什么叫编码,什么叫解码呢?

计算机底层是二进制的,计算机还有个名字叫电脑,

为什么叫电脑,因为计算机是计算是用通电状态来表示数据的

用 1和 0 来表示 1 代表 通电 0 代表不通电

所以编码就是将字符转化为二进制的过程

解码则相反这里又涉及了请求乱码和响应乱码

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_21

  • 服务器的默认编码不支持中文
    所以我们需要去了解一下支持中文的
    GBK 和 UTF-8
    我们中国大陆用的较多的是 UTF-8,因为它比GBK支持的字符多一些
  • 客户端(浏览器)的编码 其实是我们设置的,解码默认为 GBK
    不知道大家 是否还有印象,我们新建一个html(HTML5)页面的时候
  • javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_22

  • 所以我们发现一个很严重的问题
    无论是 请求还是响应 在默认情况下 都是乱码
    所以默认情况下,无论是请求还是响应,一定是乱码的

解决乱码问题

解决请求乱码

只说问题不说解决办法就是耍流氓,所以我们不耍流氓,我们来讲讲解决方案

在哪去解决问题?在servlet中去解决,我们去设置编码

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_23


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_24


我们写完之后测试一下,看看控制台,发现并没有什么用

继续看看还有啥没有处理

原因如下,我们解决的是post请求

还得解决get请求

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_25


改成post 就可以了

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_26


post请求一行代码就解决了

那么问题我们解决一半了,下面还剩下 get ,get请求怎么处理呢?

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_27


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_28


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_29


修改了服务器的配置,一定要重启一下服务器,

然后测试一下

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_30


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_31

解决响应乱码

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_32


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_33

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_34


怎么解决,有两种方式

1、直接将服务器编码设置为GBK(不推荐)——原理:因为浏览器默认解码就是GBK

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_35


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_36

2、将服务器编码与浏览器编码统一设置为UTF-8

这就有一个痛点,我们怎么用服务器端的代码 去改变 浏览器的编码格式 呢?

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_乱码问题_37


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_38


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_39


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_40


javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_有中文_41

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_服务器_42

总结

1、

相对路径改绝对路径会更稳定,更靠谱,可以杜绝出现404

绝对路径需要加标签或者自己加上项目名,加标签要灵活使用,样板如下:

** **

javaEE006.03 路径和乱码问题、绝对路径、获取虚拟路径request.getContextPath()_绝对路径_43

2、
解决乱码问题 三行代码,最终留下一行最精简的代码:
response.setContentType(“text/html;charset=UTF-8”);

3、获取虚拟路径 request.getContextPath()
最终得到的是 /BookStore04


举报

相关推荐

0 条评论