JSP历险记:Hello Servlet!
NianSir's BLOG

JSP历险记:Hello Servlet!

NianSir
2025-03-20 / 0 评论 / 30 阅读

JSP学习笔记分享-Hello Servlet

上一篇JSP学习笔记我们已经学习了通过JDBC如何与数据库交互这一次我们就来初步了解一下JSP“大脑”:Servlet!

📚 00:Hello Servlet

0.1 Servlet是什么?

  • Servlet是Java编写的服务器端程序,运行在Web服务器(如Tomcat)中
  • 它遵循"请求-响应"模型:接收客户端(浏览器)的请求,处理业务逻辑,返回响应
  • 相比CGI,Servlet更高效,因为Java虚拟机常驻内存

0.2 Servlet生命周期

  • 加载:服务器启动时,或通过<load-on-startup>配置
  • 初始化:调用init()方法(只执行一次)
  • 处理请求:每次请求调用service()方法(根据HTTP方法分派到doGet()/doPost()
  • 销毁:服务器关闭时调用destroy()方法

🎮 开篇:为什么我们要学Servlet?

在JSP中,Servlet的作用是处理客户端的请求并生成动态的内容。需要使用Servlet是因为它能够帮助我们与客户端进行交互,处理表单数据、数据库操作等,使网页变得更加动态和交互性。简单来说,就好比Servlet是网页的大厨,负责把客人点的菜做好并上桌,让整个用餐体验更加丰富和美味。
想象一下,你正在开发一个酷炫的网站,用户可以在上面注册账号、登录、发表动态……而这一切的背后,都离不开一个核心角色——Servlet!它就像网站的大脑,处理用户的请求,返回动态的内容。今天,就让我们踏上Servlet的探险之旅,用一个简单的登陆注册页面例子带你入门!

🛠️ 第一步:搭建开发环境

1.1 安装JDK

  • 打开浏览器,搜索"JDK 8 下载"(注意:Servlet对JDK版本有一定要求,Tomcat 10以下建议用JDK 8,当然你也可选择高版本Java但是必须同时选择高版本Tomcat)
  • 在Oracle官网下载JDK( https://www.oracle.com/cn/java/technologies/downloads/ )Windows x64 Installer
  • 安装路径建议保持默认(比如C:\Program Files\Java\jdk1.8.0_291
  • 配置环境变量(参考之前的Minecraft开服教程里有提及,这里不再赘述)

1.2 安装Tomcat

  • 浏览器搜索"Tomcat 9 下载"(注意:Tomcat 10+需要JDK 11+,且包名从javax.servlet改为jakarta.servlet,容易出错)
  • 官网下载Windows Service Installer(32-bit/64-bit)
  • 安装时选择默认端口8080,管理员账号自己设置
  • 关键步骤:安装完成后,找到conf/server.xml,检查<Connector>标签的端口是否被占用

1.3 配置IDE(以IntelliJ IDEA为例)

  • 新建Java项目 → 选择"Java Enterprise" → 勾选"Web Application"
  • 在"Project Structure" → "Libraries" → 添加Tomcat依赖
  • 在"Deployment" → 添加"Artifact" → 选择你的项目

🛡️ 第二步:创建第一个Servlet

2.1 编写Servlet类

  • 继承HttpServlet
  • 重写doGet()doPost()方法
  • 使用@WebServlet注解配置URL映射(或配置web.xml
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Hello Servlet!</h1>");
    }
}

2.2 部署并运行

  • 将项目部署到Tomcat
  • 浏览器访问http://localhost:8080/你的项目名/hello
  • 如果看到"Hello Servlet!",恭喜你,第一个Servlet运行成功!

🔑 第三步:实战案例——登录注册系统

3.1 创建数据库(MySQL示例)

  • 新建数据库userdb
  • 创建表users

    CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      username VARCHAR(50) UNIQUE NOT NULL,
      password VARCHAR(50) NOT NULL
    );

3.2 编写注册Servlet

  • 处理表单提交的POST请求
  • 连接数据库,插入新用户
  • 注意密码加密(这里简单示例用明文,实际项目请用MD5/SHA等)
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        // 数据库连接(需添加JDBC驱动)
        try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/userdb", "root", "123456")) {
            
            String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1, username);
            stmt.setString(2, password);
            stmt.executeUpdate();
            
            response.sendRedirect("login.html");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3.3 编写登录Servlet

  • 验证用户名和密码
  • 使用RequestDispatcher跳转页面
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/userdb", "root", "123456")) {
            
            String sql = "SELECT * FROM users WHERE username=? AND password=?";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1, username);
            stmt.setString(2, password);
            ResultSet rs = stmt.executeQuery();
            
            if (rs.next()) {
                request.setAttribute("username", username);
                RequestDispatcher dispatcher = request.getRequestDispatcher("welcome.jsp");
                dispatcher.forward(request, response);
            } else {
                response.sendRedirect("login.html?error=1");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3.4 创建JSP页面

  • login.html:登录表单
  • register.html:注册表单
  • welcome.jsp:登录成功页面
<%-- welcome.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>欢迎</title>
</head>
<body>
    <h1>欢迎,${username}!</h1>
</body>
</html>

💡 第四步:解决版本兼容问题

4.1 Tomcat 10+的坑

  • 如果你用了Tomcat 10+,可能会遇到java.lang.ClassNotFoundException: javax.servlet.Servlet错误
  • 原因:Tomcat 10+遵循Jakarta EE 9+,包名从javax.servlet改为jakarta.servlet
  • 解决方案

    • 方法一:改用Tomcat 9(推荐新手)
    • 方法二:在pom.xml中添加依赖(Maven项目):

      <dependency>
          <groupId>jakarta.servlet</groupId>
          <artifactId>jakarta.servlet-api</artifactId>
          <version>5.0.0</version>
          <scope>provided</scope>
      </dependency>
    • 方法三:修改代码中的包名为jakarta.servlet(需要改所有相关类)

4.2 JDBC驱动问题

  • 下载对应版本的MySQL Connector/J(比如8.0.x)
  • mysql-connector-java-8.0.x.jar放到Tomcat的lib目录下
  • 或在IDE中配置库依赖

🔧 第五步:运行与调试

  • 启动Tomcat服务器
  • 访问http://localhost:8080/你的项目名/register.html注册账号
  • 访问http://localhost:8080/你的项目名/login.html登录测试
  • 检查数据库是否插入数据
  • 查看控制台输出,调试错误

🎉 结语:Servlet的奇妙世界

通过这个小案例,你已经掌握了Servlet的基本用法!当然,这只是一个简单的示例,实际项目中还需要考虑:

  • 密码加密存储
  • 防止SQL注入(使用PreparedStatement)
  • 会话管理(Cookie/Session)
  • 验证码功能
  • 记住我功能

接下来,你可以尝试学习JSP标签库、EL表达式、JSTL等,让页面更动态!也可以研究Spring MVC等框架,简化Servlet的开发流程。记住,实践是检验真理的唯一标准,多动手写代码,你会越来越熟练!

3

评论 (0)

取消