是不是学了 JSP 基础后总卡在 “怎么让网页动起来”?写了 JSP 页面却不知道怎么处理用户输入,Servlet 代码写了一堆却和 JSP 接不上,好不容易做完项目,部署到服务器又报错?其实啊,JSP 实战的核心是 “JSP+Servlet” 配合,加上正确的部署步骤,自学 30 天完全能掌握。今天兔子哥就带大家从 Servlet 基础到项目部署,每天一个小目标,结合实战案例讲透关键技能,新手常问的 “Servlet 怎么用”“项目怎么上线” 这些问题,咱们一个个说清楚,一起往下看吧!
先搞懂:Servlet 到底是什么?为啥和 JSP 是 “黄金搭档”?
基础问题:Servlet 和 JSP 的关系是什么?
简单说,JSP 更像 “前台”,负责显示网页内容;Servlet 像 “后台”,负责处理数据、接收请求。比如用户登录时,JSP 显示登录表单,用户提交后,Servlet 验证账号密码,再把结果告诉 JSP 显示。两者分工明确,比单独用 JSP 写逻辑清爽多了。
场景问题:哪些功能必须用 Servlet?不用会怎样?
- 用户登录、注册(需要验证数据,不能直接在 JSP 里写逻辑);
- 处理表单提交(接收用户输入,比如查询条件、订单信息);
- 数据库交互(查数据、存数据,放 Servlet 里更安全)。
不用 Servlet 的话,JSP 里会塞满 Java 代码,又乱又难维护,改个逻辑得翻半天页面代码。有个粉丝之前在 JSP 里写登录验证,后来想加验证码功能,改得头都大了,换成 Servlet 后,逻辑清晰多了。
解决方案:零基础怎么学 Servlet?从哪开始练?
从简单的 “接收请求 - 处理 - 转发” 流程开始,先不用连数据库,练会数据传递再说。推荐用 Eclipse 或 IDEA,这些工具能自动生成 Servlet 模板,减少手写代码的错误。
30 天自学计划:从基础到部署,每天进步一点点
按 “基础→结合→实战→部署” 分四阶段,每天 1-2 小时,节奏刚好不费力。
| 阶段 | 天数 | 核心目标 | 每天任务 |
|---|---|---|---|
| 基础阶段 | 1-7 天 | 搞定 Servlet 基础语法 | 写 2 个 Servlet 小案例,练请求处理 |
| 结合阶段 | 8-15 天 | 练 JSP+Servlet 数据传递 | 做登录、查询功能,练转发 / 重定向 |
| 实战阶段 | 16-23 天 | 做完整小项目(带数据库) | 每天加 1 个功能,比如增删改查 |
| 部署阶段 | 24-30 天 | 学本地和服务器部署 | 练打包、上传、调试步骤 |
第一阶段(1-7 天):Servlet 基础,先会 “处理请求”
Servlet 的核心是处理用户请求,这阶段重点练怎么接收参数、返回数据。
第 3 天案例:写个简单的 Servlet,接收表单数据
需求:JSP 页面有个表单,输入姓名后提交,Servlet 接收并显示欢迎语。
步骤 1:写表单 JSP(form.jsp):
jsp
步骤 2:写 Servlet 处理请求(WelcomeServlet.java):
java
import java.io.*;import javax.servlet.*;import javax.servlet.annotation.WebServlet;import javax.servlet.http.*;// 注解配置访问路径,不用改web.xml@WebServlet("/WelcomeServlet")public class WelcomeServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置编码,避免中文乱码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");// 接收表单参数String username = request.getParameter("username");// 处理数据(这里简单拼接欢迎语)String msg = "欢迎你," + username + "!这是Servlet处理的结果";// 把结果返回给页面PrintWriter out = response.getWriter();out.println(""
+ msg + "");out.println("返回");}}运行步骤:
- Eclipse 里右键项目→Run As→Run on Server,选 Tomcat;
- 浏览器访问
http://localhost:8080/项目名/form.jsp,输入姓名提交,就能看到 Servlet 返回的欢迎语。
避坑点:Servlet 类名别写错,
@WebServlet里的路径要和表单action一致,不然提交后会报 404 错误。有个粉丝把路径写成/welcomeServlet(小写 w),表单里是大写 W,结果找不到 Servlet,改一致就好了。第二阶段(8-15 天):JSP+Servlet 结合,练数据传递
这阶段学 Servlet 处理数据后,怎么把结果传给 JSP 显示,重点练 “请求转发”。
第 10 天案例:登录功能(Servlet 处理 + JSP 显示结果)
需求:用户输账号密码,Servlet 验证,JSP 显示登录成功或失败。
步骤 1:登录表单(login.jsp):
jsp
步骤 2:Servlet 验证(LoginServlet.java):
java
@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");// 接收参数String user = request.getParameter("user");String pwd = request.getParameter("pwd");// 简单验证(实际项目查数据库)String result;if ("admin".equals(user) && "123456".equals(pwd)) {result = "登录成功!欢迎管理员";} else {result = "账号或密码错误,请重新输入";}// 把结果存到请求域,传给JSPrequest.setAttribute("loginResult", result);// 请求转发到result.jsp显示结果request.getRequestDispatcher("result.jsp").forward(request, response);}}步骤 3:结果显示 JSP(result.jsp):
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%= request.getAttribute("loginResult") %>
返回登录关键技巧:用
request.setAttribute存数据,JSP 里用request.getAttribute取,这是 JSP 和 Servlet 传递数据的常用方式。转发后地址栏不变,用户体验更好。第三阶段(16-23 天):实战小项目,带数据库增删改查
做个 “学生信息管理” 小项目,把 Servlet、JSP、数据库结合起来,每天加一个功能。
第 20 天功能:查询学生列表(Servlet 查库 + JSP 显示)
步骤 1:Servlet 查数据库(StudentListServlet.java):
java
@WebServlet("/StudentListServlet")public class StudentListServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<Student> students = new ArrayList<>();// 连接数据库查数据(简化版,实际用JDBC工具类)Connection conn = null;Statement stmt = null;ResultSet rs = null;try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school?serverTimezone=UTC","root", "123456");stmt = conn.createStatement();rs = stmt.executeQuery("SELECT id, name, age FROM student");// 封装数据到Listwhile (rs.next()) {Student s = new Student();s.setId(rs.getInt("id"));s.setName(rs.getString("name"));s.setAge(rs.getInt("age"));students.add(s);}} catch (Exception e) {e.printStackTrace();} finally {// 关闭连接(省略)}// 数据传给JSPrequest.setAttribute("students", students);request.getRequestDispatcher("student_list.jsp").forward(request, response);}}步骤 2:JSP 显示列表(student_list.jsp):
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.util.List" %><%@ page import="com.example.Student" %>学生列表
学号 姓名 年龄 <%List students = (List) request.getAttribute("students");if (students != null) {for (Student s : students) {%><%= s.getId() %> <%= s.getName() %> <%= s.getAge() %> <%}}%>
粉丝心得:“刚开始不会传对象列表,后来发现 Servlet 里存
List,JSP 里强转后循环就行,原来没那么难!”第四阶段(24-30 天):项目部署,从本地到服务器
做好的项目得部署才能让别人访问,这阶段学打包和部署步骤。
本地部署:打 WAR 包,放到 Tomcat 运行
步骤:
- Eclipse 里右键项目→Export→WAR file,选保存路径;
- 把生成的
项目名.war复制到 Tomcat 的webapps文件夹; - 启动 Tomcat,它会自动解压 WAR 包;
- 浏览器访问
http://localhost:8080/项目名,和在 IDE 里运行效果一样。
服务器部署:上传到云服务器(以阿里云为例)
步骤:
- 买个云服务器(新手选 CentOS 系统,配 Tomcat 和 MySQL);
- 用 Xshell 连接服务器,把 WAR 包传到
/usr/local/tomcat/webapps; - 启动 Tomcat:
/usr/local/tomcat/bin/startup.sh; - 浏览器访问
http://服务器公网IP:8080/项目名,搞定!
避坑点:服务器要开放 8080 端口(阿里云安全组里配置),不然访问不了;数据库连接 URL 里的
localhost要改成服务器 IP,用户名密码和服务器 MySQL 一致。有个粉丝部署后查不到数据,发现是数据库没在服务器上启动,启动 MySQL 后就好了。新手常问的 3 个实战问题,兔子哥来解答
1. Servlet 里中文乱码怎么办?
两种编码都要设!
request.setCharacterEncoding("UTF-8")(接收数据)和response.setContentType("text/html;charset=UTF-8")(返回数据),少一个都会乱码。表单method用post,get方式乱码要改 Tomcat 配置,新手先优先用post。2. 怎么区分请求转发和重定向?
- 转发:
request.getRequestDispatcher().forward(),地址栏不变,能传request数据,适合显示结果页; - 重定向:
response.sendRedirect(),地址栏变,不能传request数据,适合登录后跳首页(避免刷新重复提交)。
简单记:显示结果用转发,跳转页面用重定向。
3. 项目部署后找不到 Servlet?
检查
@WebServlet路径是否带/(比如/LoginServlet),WAR 包是否解压成功(看 webapps 里有没有项目文件夹),服务器 Tomcat 版本是否和本地一致(尽量都用 8.5 版)。粉丝实战反馈:从 “不会结合” 到 “能部署项目”
小张是个上班族,利用晚上时间自学,他说:“前 10 天总搞不懂 Servlet 怎么传数据,后来练了登录案例,突然就明白了
setAttribute和getAttribute的用法。第 25 天第一次把项目部署到服务器,用手机访问自己做的页面,激动得睡不着!现在这个学生管理项目还能帮班级统计数据,特有成就感。”最后说点个人心得吧。JSP 实战的关键不是背语法,是练 “JSP 负责显示,Servlet 负责逻辑” 的分工思维。30 天计划里,前两周打基础别着急,中间两周结合案例多动手改代码,最后一周部署多试几次,哪怕失败也别怕,服务器报错信息里藏着答案。兔子哥刚开始部署时,因为端口没开放折腾了一下午,现在部署新项目半小时就能搞定。按这个计划坚持下去,你会发现自己不仅能写功能,还能把项目上线给别人用,这种从 0 到 1 的成就感,就是学习的最大动力,加油!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~