Java Servlet

Part 1:Servlet是什么?

1.1 大白话定义

Servlet是服务员
→ 顾客(浏览器)点单(发送请求)
→ 服务员接收订单(处理HTTP请求)
→ 制作咖啡(生成HTML响应)
→ 端给顾客(返回响应)

1.2 技术定义

  • 运行在Web服务器上的Java程序
  • 用于处理HTTP请求(GET/POST等)
  • 生成动态网页内容

Part 2:为什么需要Servlet?

2.1 静态网页 vs 动态网页

类型示例缺点
静态HTML纯文字介绍页内容固定无法个性化
Servlet登录验证/购物车动态生成不同用户的内容

2.2 工作流程

浏览器 → HTTP请求 → Web服务器 → Servlet → 数据库 → 生成HTML → 返回浏览器

Part 3:Servlet生命周期(咖啡师的一天)

3.1 三阶段流程

初始化--->服务--->销毁

3.2 详细说明

  1. init():出生培训(只执行一次)

    public void init(ServletConfig config) {
        System.out.println("Servlet出生啦~");
    }
    

  2. service():接单干活(每次请求都执行)

    protected void service(HttpServletRequest req, HttpServletResponse resp) {
        String method = req.getMethod(); // GET/POST
        if ("GET".equals(method)) {
            doGet(req, resp);
        } // 类似处理其他方法...
    }
    

  3. destroy():下班收工(服务器关闭时执行)

    public void destroy() {
        System.out.println("Servlet退休啦~");
    }
    


Part 4:手把手写一个Servlet

4.1 基础版Servlet(继承HttpServlet)

@WebServlet("/hello") // 告诉服务器路径映射
public class HelloServlet extends HttpServlet {
    
    // 处理GET请求
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws IOException {
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>你好呀~曼波!(✪▽✪)</h1>");
    }
}

 

4.2 部署方式

方式1:注解配置(推荐)
@WebServlet(urlPatterns = {"/hello", "/hi"}) // 多个访问路径
方式2:web.xml配置(传统方式)
<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.example.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

Part 5:Servlet常见用法

5.1 获取请求参数

String username = request.getParameter("username");
String password = request.getParameter("password");

5.2 设置响应内容

response.setContentType("text/html"); // HTML格式
response.setCharacterEncoding("UTF-8"); // 中文不乱码

// 写HTML内容
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<p>欢迎" + username + "</p>");
out.println("</body></html>");

5.3 重定向

response.sendRedirect("https://www.baidu.com");

5.4 转发请求

request.getRequestDispatcher("/welcome.jsp").forward(request, response);

Part 6:Servlet vs JSP

特性ServletJSP
本质Java类HTML+Java代码混合
擅长领域业务逻辑处理页面展示
执行效率稍高(已编译)首次需转译为Servlet
代码可读性Java代码中拼接HTML(麻烦)HTML中嵌入Java(直观)

Part 7:注意事项

7.1 线程安全问题

public class DangerServlet extends HttpServlet {
    private int count; // ❌ 实例变量有线程安全问题!
    
    protected void doGet(...) {
        count++; // 多个线程同时修改会出错
    }
}

 

解决方案
→ 使用局部变量
→ 加锁(synchronized
→ 避免修改共享数据

7.2 初始化参数配置

<!-- web.xml中 -->
<servlet>
    <init-param>
        <param-name>email</param-name>
        <param-value>manbo@example.com</param-value>
    </init-param>
</servlet>
// Servlet中获取
String email = getServletConfig().getInitParameter("email");

 


Part 8:现代开发中的Servlet

虽然现在流行Spring MVC等框架,但它们底层仍然使用Servlet!
比如:

  • DispatcherServlet是Spring MVC的核心
  • Filter(过滤器)本质也是Servlet规范的一部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值