升级博客网站遇到的坑
16lz
2021-01-22
今天下班,为了解决 2 个问题,升级自己的博客网站:
Request For Comments(RFC),是一系列以编号排定的文件。RFC 文件是由 Internet Society(ISOC)赞助发行。几乎所有的互联网通信协议都有在RFC文件内详细说明。附上 RFC 7230 and RFC 3986 源文件,有兴趣可以研究一下:
- Java 面试题页面静态化
- 使用 HttpServletResponse 直接输出 markdown 格式的文本
坑 1:
先说一下,做页面静态化的思路:
- 通过 Controller 的动作返回 jsp 页面
- 传不同的 id 就能查看不同面试题的页面
- 控制台点击生成静态页面按钮,服务器上 web 应用请求自己的 Controller ,获取 html 内容,写入文件到 nginx 静态文件目录
服务器上的 web 容器用的是 tomcat8
我在本地代码提交和测试好了,以为在服务器执行一下更新部署的脚本,结果开心的事情发生了:静态页面没有生成出来。看了一眼日志:
Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
这一看就知道是参数出问题了,网上查解决办法:意思都是说 GET 请求不支持 RFC 7230 and RFC 3986 规定外的字符,但是解决办法都不靠谱。既然是参数问题,就想到了对参数进行编码:
URLEncoder.encode(typeIdAndName, "utf-8")把 tomcat 的 server.xml 的字符集改成 utf-8,猜想 tomcat 肯定会自行解码参数,所以并没有对 controller 的参数进行解码,测一下成功了。服务器用的 tomcat8,但我本地用的 tomcat7 并不存在这个问题,被坑得血淋淋的,花了很多时间排查。
Request For Comments(RFC),是一系列以编号排定的文件。RFC 文件是由 Internet Society(ISOC)赞助发行。几乎所有的互联网通信协议都有在RFC文件内详细说明。附上 RFC 7230 and RFC 3986 源文件,有兴趣可以研究一下:
- https://tools.ietf.org/pdf/rfc7230.pdf
- https://tools.ietf.org/pdf/rfc3986.pdf
坑 2:
Controller 使用 HttpServletResponse 直接输出 markdown 格式的文本中包含中文乱码
因为文章页面的中文并无乱码,所以猜想肯定是浏览器解析和显示的问题。给 HttpServletResponse 设置好 ContentType 果然就好了。
resp.setContentType("application/json;charset=UTF-8");
问题搞完,已经 23 点多,公司只有我一个人了,真没想到还会出这幺蛾子,酸爽......
更多相关文章
- 面试官:为什么静态方法不能调用非静态方法和变量?
- 静态链表
- IDA静态分析
- 静态路由实例
- 图书管理系统【部署开发环境、解决分类、图书、前台页面模块】
- 队列(静态方式)
- 小程序静态资源如何设置防盗链?
- html页面传值问题已解决
- 如何检测用户有关退出页面的信息?