JavaWeb入门:从零搭建Web项目与Servlet实战

发布时间:2026/10/28 5:07:58

JavaWeb入门:从零搭建Web项目与Servlet实战 1. JavaWeb入门从零搭建你的第一个Web项目刚接触JavaWeb开发时很多人会被各种概念和配置搞得晕头转向。作为一个从Servlet时代一路走过来的老码农我想用最接地气的方式带大家快速上手JavaWeb开发。今天我们就用IDEA 2021和Tomcat 9来搭建一个完整的JavaWeb项目过程中我会分享那些官方文档里不会写的实战技巧。2. 环境准备与项目创建2.1 开发工具选择我强烈推荐使用IntelliJ IDEA 2021版本作为开发工具。相比EclipseIDEA对JavaWeb项目的支持更友好特别是它的智能提示和自动补全功能能帮我们避免很多低级错误。安装时注意勾选Web Application相关插件Java EE: Servlet, JSP支持Tomcat and TomEE Integration: 内嵌Tomcat支持Database Tools and SQL: 数据库相关功能注意社区版IDEA缺少部分JavaEE功能建议使用Ultimate版。学生可以申请免费授权。2.2 创建JavaWeb项目新建项目选择Java Enterprise勾选Web Application模板项目SDK选择Java 8或11目前企业最常用版本Application Server选择你的Tomcat安装路径项目结构自动生成后重点关注这几个目录src main java // 存放Java源代码 resources // 配置文件 webapp // 前端资源 WEB-INF // 配置和类文件 web.xml // 部署描述符3. Servlet核心开发3.1 第一个Servlet程序右键java目录新建一个HelloServlet类WebServlet(/hello) public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(text/html;charsetUTF-8); PrintWriter out resp.getWriter(); out.println(h1你好JavaWeb!/h1); } }几个关键点说明WebServlet注解替代了传统的web.xml配置HttpServlet是所有Servlet的父类doGet方法处理GET请求必须设置response的contentType和charset3.2 Servlet生命周期深度解析Servlet的生命周期由容器管理主要经历三个阶段初始化容器调用init()方法服务每次请求调用service()方法销毁容器关闭时调用destroy()实战经验避免在Servlet中使用实例变量因为Servlet是单例的可能引发线程安全问题。4. JSP基础与整合开发4.1 第一个JSP页面在webapp目录下新建hello.jsp% page contentTypetext/html;charsetUTF-8 languagejava % html head title我的第一个JSP/title /head body h1当前时间: % new java.util.Date() %/h1 /body /htmlJSP最终会被编译成Servlet其本质还是Java代码。现代开发中更推荐使用模板引擎如Thymeleaf。4.2 JSP九大内置对象这些对象可以直接在JSP中使用requestHttpServletRequestresponseHttpServletResponsesessionHttpSessionapplicationServletContextoutJspWriterpageContextPageContextpageObjectconfigServletConfigexceptionThrowable5. 数据库连接与操作5.1 JDBC基础配置在pom.xml中添加MySQL驱动依赖dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.25/version /dependency创建数据库工具类DBUtil.javapublic class DBUtil { private static final String URL jdbc:mysql://localhost:3306/test?useSSLfalse; private static final String USER root; private static final String PASSWORD 123456; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } }5.2 使用PreparedStatement防止SQL注入String sql SELECT * FROM users WHERE username ? AND password ?; try (Connection conn DBUtil.getConnection(); PreparedStatement pstmt conn.prepareStatement(sql)) { pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs pstmt.executeQuery(); // 处理结果集 }6. Tomcat配置与项目部署6.1 配置Tomcat服务器点击IDEA右上角Add Configuration选择Tomcat Server - Local配置Tomcat安装路径Deployment选项卡添加项目war包6.2 热部署技巧在Tomcat配置中勾选On Update action: Update classes and resourcesOn frame deactivation: Update classes and resources这样修改代码后不用重启Tomcat只需按CtrlF10即可热更新。7. 常见问题排查指南7.1 404错误排查检查URL路径是否正确确认Servlet是否添加了WebServlet注解查看Tomcat控制台是否有部署错误7.2 500错误排查查看控制台完整堆栈信息检查JSP页面中的Java代码确认数据库连接正常7.3 中文乱码解决方案统一编码配置在Servlet中设置request和response的编码request.setCharacterEncoding(UTF-8); response.setContentType(text/html;charsetUTF-8);在JSP页面头部添加page指令在Tomcat的server.xml中配置URIEncodingUTF-88. 项目实战用户登录功能8.1 完整代码示例LoginServlet.java: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); if(admin.equals(username) 123456.equals(password)) { request.getSession().setAttribute(user, username); response.sendRedirect(welcome.jsp); } else { request.setAttribute(error, 用户名或密码错误); request.getRequestDispatcher(login.jsp).forward(request, response); } } }8.2 会话管理技巧使用HttpSession保存用户登录状态设置合理的session超时时间敏感操作需要验证session9. 项目优化与扩展9.1 使用过滤器实现统一编码创建EncodingFilter.java:WebFilter(/*) public class EncodingFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(UTF-8); response.setContentType(text/html;charsetUTF-8); chain.doFilter(request, response); } }9.2 三层架构设计推荐的项目结构com.example controller // 控制器层 service // 业务逻辑层 dao // 数据访问层 model // 实体类 util // 工具类10. 学习资源推荐官方文档Servlet规范https://javaee.github.io/servlet-spec/JSP规范https://javaee.github.io/jsp-spec/推荐书籍《Head First Servlets and JSP》《Java Web整合开发王者归来》在线教程Oracle官方JavaEE教程Spring官方文档在实际开发中我发现很多初学者容易陷入过度关注框架的误区。建议先把Servlet/JSP这些基础打牢再去学习Spring等框架。遇到问题时多查看Tomcat控制台日志90%的错误信息都能在那里找到线索。
延伸阅读

更多相关文章

2026/10/28 5:07:58

马尾辫扎法全解析:从物理原理到实操技巧,告别碎发翻车

“ponytail”,就这么一个词,很多人第一反应是“这不就是个马尾辫吗”。但如果你真的上手扎过几年头发,或者被客户、被自己那头不听使唤的碎发折磨过,就会明白:一个好看的马尾辫,背后涉及的高度力学、松紧控…

2026/10/28 5:02:58

单细胞泛癌分析全流程:从数据整合到跨癌种比较的实战指南

单细胞泛癌分析这几年在生信圈的热度一直没降过,从早期只做单一癌种的细胞图谱,到现在动辄整合几十个数据集、覆盖二三十种肿瘤类型的跨癌种比较,整个流程的复杂度和数据量都上了一个台阶。我前后参与过几个类似规模的整合项目,踩…

2026/10/28 5:02:58

SQL语句规范与数据库操作最佳实践

1. SQL语句规范基础解析在数据库操作中,SQL语句的书写规范直接影响着代码的可读性、执行效率和跨平台兼容性。我见过太多因为大小写混乱导致的部署问题,也处理过无数因语句分隔符缺失引发的执行错误。这些看似简单的规范细节,在实际生产环境中…

2026/10/28 5:58:01

JavaScript沙箱替代容器:轻量级AI Agent部署新范式

1. 项目概述:当“全球算力”成为一句反讽,我们到底在讨论什么? “Cloudflare:全世界的算力,不够给每个 Agent 发一个容器”——这句话乍看像一句技术圈的黑色幽默,实则精准戳中了当前边缘计算、轻量级服务…

2026/10/28 5:58:01

Python生成可定制ASCII码速查表:控制字符与多格式输出

做嵌入式调试、协议解析的朋友经常会遇到这种场面:串口日志里蹦出一串\x02、\x11,得靠一张 ASCII 码速查表才能对上号。我以前也是从网上找表,图片放大就糊、网页里广告比表格还多,控制字符那一栏还经常缺失,更别说按自…

2026/10/28 5:58:01

马丁EA源码拆解:从回测到风控,避开爆仓陷阱

简介:这份Amazing5马丁EA源码包,面向外汇量化交易者和MT4/5平台开发者,提供一套基于马丁格尔策略的自动交易系统。与常见EA不同,包内核心实现采用MATLAB工程,共21个文件,包括19个.m脚本和2个.mat数据文件&a…

2026/10/28 5:58:01

WRF数据处理从安装到绘图:wrf-python与cartopy实战指南

简介:数值天气预报输出的NetCDF文件包含海量物理量,科研与工程项目中常需提取变量、插值到等压面并完成可视化。此类后处理依赖wrf-python等Python库,而其Fortran扩展在安装时对编译器和NetCDF依赖要求严格,常成入门障碍。掌握依赖…

2026/10/28 5:58:01

UReport2 接入 Spring Boot:依赖、数据源、存储与排查实战

简介:面向Java开发者与报表开发初学者的UReport实践资料,围绕UReport2在Maven项目及Spring Boot环境中的接入方式展开,可帮助读者理解报表模板设计、数据源配置与PDF、Excel、Word等多格式报表生成流程。压缩包内共1个doc文件,约1…

2026/10/28 5:53:00

鸿蒙AI Native规模化交付:DevEco CLI作为交付契约中枢

1. 这不是一次简单的工具链升级:从“能跑”到“量产”的鸿蒙 AI Native 转折点高德地图团队在内部技术复盘会上,曾用一张对比图说明过去两年的鸿蒙适配路径:左边是2022年首批ArkTS模块上线时的截图——一个带定位图标、能加载基础瓦片、但交互…

2026/10/27 14:24:03

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/28 0:02:13

Python股票自动交易系统源码解析:从行情获取到风控的完整链路

简介:这份资源是面向高校计算机、金融相关专业毕业设计场景的完整项目源码包,主题为基于Python的股票自动交易系统,适合需要完成毕设选题、课程设计或自学金融量化交易开发的学生与开发者参考。压缩包共收录687个文件,整体约14.93…

2026/10/28 0:02:13

视酷酷信IM源码部署指南:Java 17+MySQL 8.0.33实战配置

简介:这是一套2024年亲测可部署的视酷酷信IM即时通讯系统源码,面向具备Java、OC、C#及Vue开发能力的技术人员,解决私有化即时通讯平台快速搭建与二次定制需求,尤其适用于需集成商城、保障数据主权的中小型企业或独立开发者。资源共…

2026/10/28 0:02:13

Python爬取百度迁徙数据:接口解析、批量采集与避坑指南

简介:这份资源是一个用Python爬取百度迁徙数据的脚本压缩包,面向具备Python基础、希望入门网络爬虫与数据解析的开发者,解决按日期获取全国热门城市人口迁徙数据的问题。包内共1个文件,为单个py脚本,压缩包约1KB&#…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑