Servlet简单介绍

Servlet 是 Java EE(Java Enterprise Edition)平台上的一项技术,用于创建动态 Web 应用程序。Servlet 是运行在服务器端的小程序,它们可以响应客户端的请求并生成动态的 Web 内容。Servlet 通常用于处理 HTTP 请求并生成 HTTP 响应,常见的使用场景包括处理表单提交、生成动态网页内容、管理会话等。

Servlet 的基本工作流程

  1. 客户端请求:客户端(通常是浏览器)向服务器发送一个 HTTP 请求。

  2. 服务器接收请求:Web 服务器(如 Tomcat、Jetty 等)接收客户端的请求,并将请求转发给适当的 Servlet。

  3. Servlet 处理请求:Servlet 接收请求后,处理请求参数,执行相应的业务逻辑,生成动态内容。

  4. 生成响应:Servlet 将生成的动态内容(通常是 HTML)封装在 HTTP 响应中,并发送回客户端。

  5. 客户端接收响应:客户端接收并处理服务器发送的响应,展示动态内容。

编写 Servlet 的基本步骤

  1. 创建一个 Servlet 类:该类需要继承 HttpServlet 类,并重写 doGetdoPost 方法来处理 GET 或 POST 请求。

  2. 配置 Servlet:在 web.xml 文件中配置 Servlet 或使用注解来配置 Servlet。

  3. 部署并运行:将编写好的 Servlet 部署到 Web 服务器上,并启动服务器进行测试。

示例代码

以下是一个简单的 Servlet 示例,它处理 GET 请求并生成一个简单的 HTML 响应:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html");

        // 获取响应的输出流
        PrintWriter out = response.getWriter();

        // 生成 HTML 响应
        out.println("<html><body>");
        out.println("<h1>Hello, World!</h1>");
        out.println("</body></html>");
    }
}

详细解释

  1. 类声明public class HelloServlet extends HttpServlet 表明这是一个继承自 HttpServlet 的 Servlet 类。

  2. 注解配置@WebServlet("/hello") 注解用来配置这个 Servlet 映射到的 URL 路径为 /hello

  3. 重写 doGet 方法doGet 方法用来处理 GET 请求。HttpServletRequest 对象封装了请求的所有信息,HttpServletResponse 对象用于生成响应。

  4. 设置响应类型response.setContentType("text/html"); 设置响应内容的类型为 HTML。

  5. 获取输出流PrintWriter out = response.getWriter(); 获取用于发送响应的输出流。

  6. 生成 HTML 响应:使用 out.println 方法输出 HTML 内容。

总结

Servlet 是 Java EE 技术栈中的核心组件,用于创建动态 Web 应用程序。通过 Servlet,开发者可以处理客户端请求、执行服务器端逻辑、生成动态内容并返回给客户端。在实际开发中,Servlet 通常与 JSP、JSTL 以及其他 Java EE 组件配合使用,以构建功能强大且灵活的 Web 应用程序。

==========================================================================================

Spring MVC 的工作流程

Spring MVC 是基于 Servlet 构建的,但它提供了更高层次的抽象,使得开发 Web 应用程序更加方便。下面是 Spring MVC 的基本工作流程:

  1. 客户端请求:客户端发送一个 HTTP 请求到服务器。
  2. DispatcherServlet:这个请求被 Spring 的 DispatcherServlet 接收。DispatcherServlet 是一个前端控制器(Front Controller),它本质上是一个 Servlet。
  3. 处理请求DispatcherServlet 根据请求 URL 和配置,选择合适的 @Controller 类和方法来处理这个请求。
  4. 执行控制器方法@Controller 类的方法被调用,处理请求参数并执行相应的业务逻辑。
  5. 返回视图:控制器方法返回一个视图名(或直接返回数据),DispatcherServlet 会根据这个视图名选择合适的视图(如 JSP)来渲染响应。
  6. 生成响应:视图生成最终的 HTML 内容,DispatcherServlet 将这个内容返回给客户端。

3. @Controller 示例

以下是一个简单的 @Controller 示例:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "hello";
    }
}

详细解释

  1. 类声明@Controller 注解标识 HelloController 类是一个控制器。
  2. 处理请求@GetMapping("/hello") 注解表示该方法处理 GET 请求,URL 为 /hello
  3. 请求参数@RequestParam 注解用于绑定请求参数到方法参数 name,并提供默认值。
  4. 返回视图:方法返回一个字符串 "hello",表示视图名为 hello。视图解析器会找到名为 hello.jsp 或其他配置的视图。

4. Servlet 和 @Controller 的关系

  • DispatcherServlet 是 Spring MVC 的核心组件,它本身是一个 Servlet,用来接收和分发 HTTP 请求。
  • @Controller 是处理请求的组件,DispatcherServlet 会将请求转发给相应的 @Controller
  • 通过这种方式,Spring MVC 框架将 Servlet 的复杂性隐藏在 DispatcherServlet 后面,开发者只需要关注业务逻辑,而不需要处理低层的 HTTP 细节。

总结来说,Spring MVC 框架通过 DispatcherServlet 将请求转发给标有 @Controller 注解的控制器类,使得开发 Web 应用程序更加简洁和高效。@Controller 与传统的 Servlet 紧密相关,但提供了更高层次的抽象和更丰富的功能。

在 Spring MVC 应用中,通常只会配置一个 DispatcherServlet。DispatcherServlet 是 Spring MVC 框架的核心前端控制器(Front Controller),它负责接收所有的 HTTP 请求,并将它们分派给适当的处理程序(如控制器方法)。

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值