登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
我知道了
查看详情
登录
注册
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
0
Star
0
Fork
0
whincwu
/
Algorithm Practice
代码
Issues
1
Pull Requests
0
Wiki
统计
流水线
服务
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
Servlet学习笔记
待办的
#I2C4EP
whincwu
拥有者
创建于
2021-01-05 22:18
内容整理自《head first servlet & jsp》一书,以此为蓝本进行servlet相关知识体系的搭建 [Servlet知识地图](https://naotu.baidu.com/file/ef490ad04fd6677b2fe0bd6f74c4c245) client 请求 -> Web 服务器应用(如nginx) -> Web 容器应用(如tomcat) -> Servlets 代码 servlets 运行在 Web 容器中,容器的功能包括: - 通信支持:容器负责与Web服务器通信 - 生命周期管理:容器管理 servlet 的声明周期方法调用 - 多线程支持:每个 servlet 请求由容器负责分配线程 - 声明方式实现安全:使用部署描述文件配置安全性 - JSP支持:容器负责解释执JSP 代码 容器如何处理请求 - 接收请求 - 创建 HttpServletRequest 和 HttpServletResponse 对象 - 分配线程 - 调用 servlet 的 services() 方法,并传入上面两个对象,services() 方法内部再调用 doGet 或 doPost 方法 - doGet 或 doPost 方法内部填充 HttpServletResponse 对象 - 容器将 HttpServletResponse 对象内容转换成 HTTP 响应返回 ## 容器如何找到Servlet Servlet 有 3 个名字:客户端使用的 URL 路径、容器内部使用的名称、Servlet 实际类名(及包名) [](https://excalidraw.com/#json=5938088027095040,BrUgbz9HOaz-hUjjLkGjEA) ## Servelt 生命周期 [](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiJSUgU2VydmVsdCDnlJ_lkb3lkajmnJ9cbnN0YXRlRGlhZ3JhbS12MlxuICAgIEE6IOS4jeWtmOWcqFxuICAgIEI6IOWIneWni-WMllxuICAgIEEgLS0-IEIgOiBpbml0KClcbiAgICBCIC0tPiBBOiBkZXN0b3J5KClcbiAgICBCIC0tPkI6IHNlcnZpY2UoKVxuIiwibWVybWFpZCI6e30sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) [](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gIGF1dG9udW1iZXJcbiAgcGFydGljaXBhbnQgQSBhcyBXZWLlrrnlmahcbiAgcGFydGljaXBhbnQgQiBhcyBTZXJ2bGV057G7XG4gIHBhcnRpY2lwYW50IEMgYXMgU2VydmlsZXTlrp7kvotcblxuICBBLT4-Qjog5Yqg6L2957G7XG4gIEEtPj5DOiDliJvlu7pTZXJ2ZWx05a6e5L6L77yI5p6E6YCg5Ye95pWw77yJXG4gIEEtPj5DOiBpbml0KClcbiAgbG9vcCDmjqXmlLbliLDor7fmsYJcbiAgICBBLT4-Qzogc2VydmljZSgpXG4gICAgYWx0XG4gICAgICBDLT4-QzogZG9HZXQoKVxuICAgIGVsc2UgXG4gICAgICBDLT4-QzogZG9Qb3N0KClcbiAgICBlbmRcbiAgZW5kXG4gIEEtPj5DOiBkZXN0b3J5KCkiLCJtZXJtYWlkIjp7fSwidXBkYXRlRWRpdG9yIjpmYWxzZX0) ## Servlet 相关类 [](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiY2xhc3NEaWFncmFtXG5TZXJ2bGV0IDx8Li4gR2VuZXJpY1NlcnZsZXRcblNlcnZsZXRDb25maWcgPC4uIFNlcnZsZXRcblNlcnZsZXRDb250ZXh0IDwuLiBTZXJ2bGV0Q29uZmlnXG5TZXJ2bGV0Q29uZmlnIDx8Li4gR2VuZXJpY1NlcnZsZXRcbkdlbmVyaWNTZXJ2bGV0IDx8LS0gSHR0cFNlcnZsZXRcbmNsYXNzIFNlcnZsZXQge1xuICA8PGludGVyZmFjZT4-XG4gIGluaXQoKSB2b2lkXG4gIHNlcnZpY2UoU2VydmxldFJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSkgdm9pZFxuICBkZXN0cm95KCkgdm9pZFxuICBnZXRTZXJ2bGV0Q29uZmlnKCkgU2VydmxldENvbmZpZ1xuICBnZXRTZXJ2bGV0SW5mbygpIFN0cmluZ1xufVxuY2xhc3MgU2VydmxldENvbmZpZyB7XG4gIDw8aW50ZXJmYWNlPj5cbiAgZ2V0U2VydmxldE5hbWUoKSBTdHJpbmdcbiAgZ2V0U2VydmxldENvbnRleHQoKSBTZXJ2bGV0Q29udGV4dFxuICBnZXRJbml0UGFyYW1ldGVyKCkgU3RyaW5nXG4gIGdldEluaXRQYXJhbWV0ZXJOYW1lcygpIEVudW1lcmF0aW9uflN0cmluZ35cbn1cbmNsYXNzIFNlcnZsZXRDb250ZXh0IHtcbiAgPDxpbnRlcmZhY2U-PlxuICBnZXRJbml0UGFyYW1ldGVyKFN0cmluZylcbiAgZ2V0UmVzb3VyY2VBc1N0cmVhbShTdHJpbmcpIElucHV0U3RyZWFtXG4gIC4uLlxufVxuY2xhc3MgR2VuZXJpY1NlcnZsZXQge1xuICA8PGFic3RyYWN0Pj5cbiAgbG9nKFN0cmluZykgdm9pZFxufVxuY2xhc3MgSHR0cFNlcnZsZXQge1xuICBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSlcbiAgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlKVxuICBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlKVxufSIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) ## 问题:tomcat 返回页面中文变成问号 原因(猜测):从 HttpServletResponse 获取 PrintWriter 时其默认编码不是 UTF-8,导致写入到 HTML 中的中文出现乱码,设置 HTTP 头 `Content-Type` 后,获取到的 PrintWriter 会以此为字符编码,从而正确写入字符串内容 解决办法: ```java protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置 HTTP 响应报文的编码为 UTF-8(注意:在往响应中写入数据之前设置,否则对于已写入的内容不生效) resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); } ``` ## tomcat 日志 tomcat 日志位于 $CATALINA_HOME/logs 目录下,包含下面几类 localhost_access_log.YYYY-MM-DD.txt 是接口访问日志 ``` $ tail -f localhost_access_log.2021-01-05.txt 10.14.87.202 - - [05/Jan/2021:21:23:13 +0800] "GET /Beer-v1/index.html HTTP/1.1" 200 717 10.14.87.202 - - [05/Jan/2021:21:23:15 +0800] "GET /Beer-v1/form.html HTTP/1.1" 200 701 ``` localhost.YYYY-MM-DD.log 是 Sevlet 运行日志,包含通过 HttpServlet 的log 方法、System.out、JavaSE 提供的 logging 包输出的日志,以及异常堆栈信息等。 ``` $ tail -n 30 -f localhost.2021-01-05.log INFO: Marking servlet TestInitParameter as unavailable Jan 05, 2021 5:51:06 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Allocate exception for servlet TestInitParameter java.lang.ClassNotFoundException: com.example.web.TestInitParameter at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) ... Jan 05, 2021 9:25:14 PM org.apache.catalina.core.ApplicationContext log INFO: TestInitParameter: getServletPath(): /TestInitParameter ``` catalina.YYYY-MM-DD.log 包含 tomcat 容器运行日志,如 App (Context)重启等。 ``` $tail -f catalina.2021-01-05.log Jan 05, 2021 9:22:51 PM org.apache.catalina.core.StandardContext reload INFO: Reloading Context with name [/Beer-v1] is completed Jan 05, 2021 9:25:11 PM org.apache.catalina.startup.HostConfig reload INFO: Reloading context [/Beer-v1] ``` 还有 manager.YYYY-MM-DD.log 和 host-manager.YYYY-MM-DD.log 日志,暂时未用到,功能未知。
内容整理自《head first servlet & jsp》一书,以此为蓝本进行servlet相关知识体系的搭建 [Servlet知识地图](https://naotu.baidu.com/file/ef490ad04fd6677b2fe0bd6f74c4c245) client 请求 -> Web 服务器应用(如nginx) -> Web 容器应用(如tomcat) -> Servlets 代码 servlets 运行在 Web 容器中,容器的功能包括: - 通信支持:容器负责与Web服务器通信 - 生命周期管理:容器管理 servlet 的声明周期方法调用 - 多线程支持:每个 servlet 请求由容器负责分配线程 - 声明方式实现安全:使用部署描述文件配置安全性 - JSP支持:容器负责解释执JSP 代码 容器如何处理请求 - 接收请求 - 创建 HttpServletRequest 和 HttpServletResponse 对象 - 分配线程 - 调用 servlet 的 services() 方法,并传入上面两个对象,services() 方法内部再调用 doGet 或 doPost 方法 - doGet 或 doPost 方法内部填充 HttpServletResponse 对象 - 容器将 HttpServletResponse 对象内容转换成 HTTP 响应返回 ## 容器如何找到Servlet Servlet 有 3 个名字:客户端使用的 URL 路径、容器内部使用的名称、Servlet 实际类名(及包名) [](https://excalidraw.com/#json=5938088027095040,BrUgbz9HOaz-hUjjLkGjEA) ## Servelt 生命周期 [](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiJSUgU2VydmVsdCDnlJ_lkb3lkajmnJ9cbnN0YXRlRGlhZ3JhbS12MlxuICAgIEE6IOS4jeWtmOWcqFxuICAgIEI6IOWIneWni-WMllxuICAgIEEgLS0-IEIgOiBpbml0KClcbiAgICBCIC0tPiBBOiBkZXN0b3J5KClcbiAgICBCIC0tPkI6IHNlcnZpY2UoKVxuIiwibWVybWFpZCI6e30sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) [](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gIGF1dG9udW1iZXJcbiAgcGFydGljaXBhbnQgQSBhcyBXZWLlrrnlmahcbiAgcGFydGljaXBhbnQgQiBhcyBTZXJ2bGV057G7XG4gIHBhcnRpY2lwYW50IEMgYXMgU2VydmlsZXTlrp7kvotcblxuICBBLT4-Qjog5Yqg6L2957G7XG4gIEEtPj5DOiDliJvlu7pTZXJ2ZWx05a6e5L6L77yI5p6E6YCg5Ye95pWw77yJXG4gIEEtPj5DOiBpbml0KClcbiAgbG9vcCDmjqXmlLbliLDor7fmsYJcbiAgICBBLT4-Qzogc2VydmljZSgpXG4gICAgYWx0XG4gICAgICBDLT4-QzogZG9HZXQoKVxuICAgIGVsc2UgXG4gICAgICBDLT4-QzogZG9Qb3N0KClcbiAgICBlbmRcbiAgZW5kXG4gIEEtPj5DOiBkZXN0b3J5KCkiLCJtZXJtYWlkIjp7fSwidXBkYXRlRWRpdG9yIjpmYWxzZX0) ## Servlet 相关类 [](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiY2xhc3NEaWFncmFtXG5TZXJ2bGV0IDx8Li4gR2VuZXJpY1NlcnZsZXRcblNlcnZsZXRDb25maWcgPC4uIFNlcnZsZXRcblNlcnZsZXRDb250ZXh0IDwuLiBTZXJ2bGV0Q29uZmlnXG5TZXJ2bGV0Q29uZmlnIDx8Li4gR2VuZXJpY1NlcnZsZXRcbkdlbmVyaWNTZXJ2bGV0IDx8LS0gSHR0cFNlcnZsZXRcbmNsYXNzIFNlcnZsZXQge1xuICA8PGludGVyZmFjZT4-XG4gIGluaXQoKSB2b2lkXG4gIHNlcnZpY2UoU2VydmxldFJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSkgdm9pZFxuICBkZXN0cm95KCkgdm9pZFxuICBnZXRTZXJ2bGV0Q29uZmlnKCkgU2VydmxldENvbmZpZ1xuICBnZXRTZXJ2bGV0SW5mbygpIFN0cmluZ1xufVxuY2xhc3MgU2VydmxldENvbmZpZyB7XG4gIDw8aW50ZXJmYWNlPj5cbiAgZ2V0U2VydmxldE5hbWUoKSBTdHJpbmdcbiAgZ2V0U2VydmxldENvbnRleHQoKSBTZXJ2bGV0Q29udGV4dFxuICBnZXRJbml0UGFyYW1ldGVyKCkgU3RyaW5nXG4gIGdldEluaXRQYXJhbWV0ZXJOYW1lcygpIEVudW1lcmF0aW9uflN0cmluZ35cbn1cbmNsYXNzIFNlcnZsZXRDb250ZXh0IHtcbiAgPDxpbnRlcmZhY2U-PlxuICBnZXRJbml0UGFyYW1ldGVyKFN0cmluZylcbiAgZ2V0UmVzb3VyY2VBc1N0cmVhbShTdHJpbmcpIElucHV0U3RyZWFtXG4gIC4uLlxufVxuY2xhc3MgR2VuZXJpY1NlcnZsZXQge1xuICA8PGFic3RyYWN0Pj5cbiAgbG9nKFN0cmluZykgdm9pZFxufVxuY2xhc3MgSHR0cFNlcnZsZXQge1xuICBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSlcbiAgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlKVxuICBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlKVxufSIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) ## 问题:tomcat 返回页面中文变成问号 原因(猜测):从 HttpServletResponse 获取 PrintWriter 时其默认编码不是 UTF-8,导致写入到 HTML 中的中文出现乱码,设置 HTTP 头 `Content-Type` 后,获取到的 PrintWriter 会以此为字符编码,从而正确写入字符串内容 解决办法: ```java protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置 HTTP 响应报文的编码为 UTF-8(注意:在往响应中写入数据之前设置,否则对于已写入的内容不生效) resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); } ``` ## tomcat 日志 tomcat 日志位于 $CATALINA_HOME/logs 目录下,包含下面几类 localhost_access_log.YYYY-MM-DD.txt 是接口访问日志 ``` $ tail -f localhost_access_log.2021-01-05.txt 10.14.87.202 - - [05/Jan/2021:21:23:13 +0800] "GET /Beer-v1/index.html HTTP/1.1" 200 717 10.14.87.202 - - [05/Jan/2021:21:23:15 +0800] "GET /Beer-v1/form.html HTTP/1.1" 200 701 ``` localhost.YYYY-MM-DD.log 是 Sevlet 运行日志,包含通过 HttpServlet 的log 方法、System.out、JavaSE 提供的 logging 包输出的日志,以及异常堆栈信息等。 ``` $ tail -n 30 -f localhost.2021-01-05.log INFO: Marking servlet TestInitParameter as unavailable Jan 05, 2021 5:51:06 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Allocate exception for servlet TestInitParameter java.lang.ClassNotFoundException: com.example.web.TestInitParameter at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) ... Jan 05, 2021 9:25:14 PM org.apache.catalina.core.ApplicationContext log INFO: TestInitParameter: getServletPath(): /TestInitParameter ``` catalina.YYYY-MM-DD.log 包含 tomcat 容器运行日志,如 App (Context)重启等。 ``` $tail -f catalina.2021-01-05.log Jan 05, 2021 9:22:51 PM org.apache.catalina.core.StandardContext reload INFO: Reloading Context with name [/Beer-v1] is completed Jan 05, 2021 9:25:11 PM org.apache.catalina.startup.HostConfig reload INFO: Reloading context [/Beer-v1] ``` 还有 manager.YYYY-MM-DD.log 和 host-manager.YYYY-MM-DD.log 日志,暂时未用到,功能未知。
评论 (
0
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
未关联
master
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
C++
1
https://gitee.com/xiaohui_hubei/Algorithm-Practice.git
git@gitee.com:xiaohui_hubei/Algorithm-Practice.git
xiaohui_hubei
Algorithm-Practice
Algorithm Practice
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册