今天下班,为了解决 2 个问题,升级自己的博客网站:
  • 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 点多,公司只有我一个人了,真没想到还会出这幺蛾子,酸爽......


更多相关文章

  1. 面试官:为什么静态方法不能调用非静态方法和变量?
  2. 静态链表
  3. IDA静态分析
  4. 静态路由实例
  5. 图书管理系统【部署开发环境、解决分类、图书、前台页面模块】
  6. 队列(静态方式)
  7. 小程序静态资源如何设置防盗链?
  8. html页面传值问题已解决
  9. 如何检测用户有关退出页面的信息?

随机推荐

  1. 37000 字 + 代码,艿艿肝的 Shiro 从入门到
  2. Linux学习:Linux基础简介。
  3. HTTP/2:更快的页面加载时间[每日前端夜话0
  4. 最强 Spring Cloud 注册中心 Nacos,和艿艿
  5. 答应我,别再if/else走天下了可以吗
  6. 2021-1-17
  7. 在 Node.js 中转换 SVG 图像格式[每日前
  8. 可能是第二好的 Spring OAuth 2.0 文章,艿
  9. 从TypeScript的类中派生接口[每日前端夜
  10. 写了一个 SSO 单点登录的代码示例给胖友!