动态 WEB 开发核心-Servlet详细分析

简介: 动态 WEB 开发核心-Servlet详细分析

动态 WEB 开发核心-Servlet

官方文档

1 地址: https://tomcat.apache.org/tomcat-8.0-doc/servletapi/index.html

2 离线文档: JAVA_EE_api_中英文对照版.chm

3 Servlet 和 Tomcat 的关系: 一句话, Tomcat 支持 Servlet

对Java Web 技术体系的流程图改造说明(细化).[整体的概念]

什么是 Servlet

Servlet 在开发动态 WEB 工程中,得到广泛的应用,掌握好 Servlet 非常重要了, Servlet(基石)是 SpringMVC 的基础

Servlet(java 服务器小程序),它的特点:

1. 他是由服务器端调用和执行的(一句话:是Tomcat解析和执行)

2. 他是用java语言编写的, 本质就是Java类

3. 他是按照Servlet规范开发的(除了tomcat->Servlet weblogic->Servlet)

4. 功能强大,可以完成几乎所有的网站功能(在以前,老程员,使用Servlet开发网站) 技术栈要求高

Servlet 在 JavaWeb 项目位置

Servlet 基本使用

Servlet 开发方式说明

1. servlet3.0 前使用 web.xml , servlet3.0 版本以后(包括 3.0)支持注解,同时支持 web.xml配置

2. 如何查看 servlet 版本[如

编写类HelloServlet去实现 Servlet 接口

1. import javax.servlet.*;
2. import javax.servlet.http.HttpServletRequest;
3. import java.io.IOException;
4. public class HelloServlet implements Servlet {
5. @Override
6. public void init(ServletConfig servletConfig) throws ServletException {
7. //System.out.println("init...~~~");
8.     }
9. 
10. @Override
11. public ServletConfig getServletConfig() {
12. return null;
13.     }
14. 
15. /**
16.      * service 方法是专门用来处理请求和响应的
17.      *
18.      * @param servletRequest
19.      * @param servletResponse
20.      * @throws ServletException
21.      * @throws IOException
22.      */
23. @Override
24. public void service(ServletRequest servletRequest, ServletResponse servletResponse)
25. throws ServletException, IOException {
26. //System.out.println("HelloServlet 被访问" + servletRequest.getClass());
27. // 类型转换(因为它有 getMethod()方法)
28. HttpServletRequest httpServletRequest = (HttpServletRequest)
29.                 servletRequest;
30. // 获取请求的方式
31. String method = httpServletRequest.getMethod();
32. if ("GET".equals(method)) {
33.             doGet();
34.         } else if ("POST".equals(method)) {
35.             doPost();
36.         }
37.     }
38. 
39. /**
40.      * 处理浏览器 get 请求
41.      */
42. public void doGet() {
43.         System.out.println("处理 get 请求");
44.     }
45. 
46. /**
47.      * 处理浏览器 post 请求
48.      */
49. public void doPost() {
50.         System.out.println("处理 post 请求");
51.     }
52. 
53. @Override
54. public String getServletInfo() {
55. return null;
56.     }
57. 
58. @Override
59. public void destroy() {
60.         System.out.println("destroy 被调用...");
61.     }
62. }

在web.xml配置HelloServlet,

即:给HelloServlet 提供对外访问地址

通过浏览器访问HelloServlet ,看是否正确(记住要redeploy[快] 或者 restar[慢])

浏览器调用 Servlet 流程分析

通过继承 HttpServlet 开发 Servlet

● HttpServlet 介绍

在实际项目中,都是使用继承 HttpServlet 类开发 Servlet 程序,更加方便

代码演示

1. import javax.servlet.ServletException;
2. import javax.servlet.http.HttpServlet;
3. import javax.servlet.http.HttpServletRequest;
4. import javax.servlet.http.HttpServletResponse;
5. import java.io.IOException;
6. 
7. public class HiServlet extends HttpServlet {
8. //重写 HttpServlet 的 doGet 和 doPost
9. //alt +insert
10. /**
11.      * 处理 doGet 请求
12.      * @param req
13.      * @param resp
14.      * @throws ServletException
15.      * @throws IOException
16.      */
17.     @Override
18.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
19.             throws ServletException, IOException {
20. System.out.println("HiServlet doGet()...");
21.     }
22. /**
23.      * 处理 doPost
24.      * @param req
25.      * @param resp
26.      * @throws ServletException
27.      * @throws IOException
28.      */
29.     @Override
30.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
31.             throws ServletException, IOException {
32. System.out.println("HiServlet doPost()...");
33.     }
34. }

配置 web.xml

1. <servlet>
2. <servlet-name>HiServlet</servlet-name>
3. <servlet-class>com.servlet.HiServlet</servlet-class>
4. </servlet>
5. <servlet-mapping>
6. <servlet-name>HiServlet</servlet-name>
7. <url-pattern>/hiServlet</url-pattern>
8. </servlet-mapping>

Servlet 注意事项和细节

1. Servlet 是一个供其他 Java 程序(Servlet 引擎)调用的 Java 类,不能独立运行

2. 针对浏览器的多次 Servlet 请求,通常情况下,服务器只会创建一个 Servlet 实例对象,也就是说 Servlet 实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web 容器退出/或者 redeploy 该 web 应用,servlet 实例对象才会销毁 【示意图】

3. 在 Servlet 的整个生命周期内,init方法只被调用一次。而对每次请求都导致 Servlet 引擎调用一次 servlet 的 service 方法

4. 对于每次访问请求,Servlet 引擎都会创建一个新的 HttpServletRequest 请求对象和一个新的 HttpServletResponse 响应对象,然后将这两个对象作为参数传递给它调用的 Servlet的 service()方法,service 方法再根据请求方式分别调用 doXXX 方法

5. 如果在<servlet>元素中配置了一个<load-on-startup>元素,那么 WEB 应用程序在启动时,就会装载并创建 Servlet 的实例对象、以及调用 Servlet 实例对象的 init()方法


目录
相关文章
|
5天前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
4月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
124 63
|
4月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
182 62
|
2月前
|
SQL 存储 XML
常见Web漏洞分析与防范研究
在以上内容中,结合OWASP、Toptal和Brightsec等权威来源的信息,确保回答的专业性和准确性。通过图表和思维导图的方式,可以更系统地了解和记忆Web安全知识,帮助企业在实际应用中更好地防范各种安全威胁。
76 13
|
3月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
4月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
312 45
|
4月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
78 2
|
4月前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
305 1
|
4月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
98 1
|
4月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。

热门文章

最新文章