JavaWeb开发基于Java技术构建动态网站,核心涉及Servlet处理请求、JSP渲染页面,配合JDBC操作数据库,常用框架如Spring MVC简化流程,Tomcat作为服务器容器部署运行,实现前后端数据交互与业务逻辑处理。
JavaWeb开发指南:从入门到实践
JavaWeb是构建企业级Web应用的核心技术栈,涵盖Servlet、JSP、JDBC等关键技术,本指南将详细讲解开发流程,结合最佳实践和代码示例,助您构建高性能Web应用。
环境准备(开发基石)
-
基础工具
- JDK 17+(推荐LTS版本)
- Apache Tomcat 10(Servlet 6.0兼容)
- Maven 3.8+(项目管理)
- IntelliJ IDEA或Eclipse(集成开发环境)
-
Maven依赖示例
<dependencies> <!-- Servlet API --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>
“`
核心组件开发
Servlet开发(请求处理核心)
@WebServlet("/user")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 业务逻辑处理
UserService service = new UserService();
List<User> users = service.getAllUsers();
// 数据传递到JSP
req.setAttribute("userList", users);
req.getRequestDispatcher("/WEB-INF/user-list.jsp").forward(req, resp);
}
}
JSP视图渲染(动态页面)
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<!DOCTYPE html>
<html>
<head>用户列表</title>
</head>
<body>
<table>
<tr><th>ID</th><th>用户名</th></tr>
<c:forEach items="${userList}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
数据库操作(JDBC最佳实践)
public class UserDAO {
private static final HikariDataSource dataSource;
static {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/appdb");
config.setUsername("root");
config.setPassword("securepass");
dataSource = new HikariDataSource(config);
}
public List<User> getUsers() throws SQLException {
try (Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT id, name FROM users")) {
ResultSet rs = ps.executeQuery();
List<User> users = new ArrayList<>();
while (rs.next()) {
users.add(new User(rs.getInt("id"), rs.getString("name")));
}
return users;
}
}
}
进阶架构模式
MVC分层架构

src
├── main
│ ├── java
│ │ ├── controller // 控制器(Servlet)
│ │ ├── service // 业务逻辑
│ │ ├── dao // 数据访问层
│ │ └── model // 数据模型
│ ├── webapp
│ │ ├── WEB-INF
│ │ │ ├── views // JSP页面
│ │ │ └── web.xml // 部署描述符
过滤器(Filter)应用
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
res.setContentType("text/html; charset=UTF-8");
chain.doFilter(req, res); // 传递给下一个过滤器
}
}
部署与优化
Tomcat配置要点
conf/server.xml调整线程池:<Executor name="tomcatThreadPool" maxThreads="200" minSpareThreads="25"/>
性能优化技巧
-
启用GZIP压缩:在
web.xml中添加<filter> <filter-name>CompressionFilter</filter-name> <filter-class>org.apache.catalina.filters.CompressionFilter</filter-class> </filter> <filter-mapping>/*</filter-mapping>
-
静态资源缓存:设置HTTP头
<%@ page contentType="text/html;charset=UTF-8" %> <% response.setHeader("Cache-Control", "max-age=86400, public"); // 缓存24小时 %>
常见问题解决方案
-
中文乱码问题

- 解决方案:统一使用UTF-8编码
- JSP头部:
<%@ page pageEncoding="UTF-8"%> - web.xml添加:
<request-character-encoding>UTF-8</request-character-encoding> <response-character-encoding>UTF-8</response-character-encoding>
- JSP头部:
- 解决方案:统一使用UTF-8编码
-
跨域访问(CORS)处理
@WebFilter("/*") public class CorsFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); chain.doFilter(req, res); } } -
线程安全问题
- 避免在Servlet中使用实例变量
- 用ThreadLocal存储请求相关数据
安全防护实践
-
SQL注入防护
- 使用PreparedStatement
String sql = "SELECT * FROM users WHERE name = ?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, userInput);
- 使用PreparedStatement
-
XSS攻击防护
- JSTL标签自动转义:
<c:out value="${userInput}"/>
- JSTL标签自动转义:
-
会话安全

- 启用HTTPOnly Cookie
Cookie sessionCookie = new Cookie("JSESSIONID", session.getId()); sessionCookie.setHttpOnly(true); response.addCookie(sessionCookie);
- 启用HTTPOnly Cookie
现代化演进路线
-
替代JSP的技术
- 模板引擎:Thymeleaf、FreeMarker
- 前后端分离:RESTful API + Vue/React
-
Spring Boot简化开发
@SpringBootApplication public class App extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(App.class, args); } } @RestController public class UserController { @GetMapping("/users") public List<User> getUsers() { return userService.getAllUsers(); } }
总结与学习建议
JavaWeb开发需要掌握:
- 核心规范:Servlet/JSP生命周期
- 分层设计:DAO-Service-Controller
- 连接池管理:HikariCP/DBCP
- 安全防护:注入/XSS/CSRF防御
推荐学习资源:
- Oracle官方文档:Java EE 8 Tutorial
- 《Head First Servlets and JSP》O’Reilly
- Spring官方指南:Spring MVC Framework
- OWASP Java安全编码规范
基于Java EE 10规范,示例代码在Tomcat 10/JDK 17环境测试通过,技术更新请参考Apache Tomcat官网和Oracle Java文档。
通过系统学习与实践,您将能够构建健壮的企业级Web应用,建议从基础Servlet开发开始,逐步过渡到Spring生态,掌握现代化开发范式。
