JavaWeb Servlet开发全解析
一、环境搭建(基于Tomcat 9+Eclipse)
推荐开发环境:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
二、Servlet核心生命周期
```java
public class LifecycleServlet extends HttpServlet {
// 初始化阶段
@Override
public void init() throws ServletException {
System.out.println("Servlet初始化完成");
}
// 服务阶段
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String method = req.getMethod();
if("GET".equals(method)) {
doGet(req, resp);
} else {
super.service(req, resp);
}
}
// 销毁阶段
@Override
public void destroy() {
System.out.println("Servlet实例被销毁");
}
}
三、请求处理模式
- 基础请求处理
@WebServlet("/user")
public class UserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
// 业务处理...
response.sendRedirect("result.jsp");
}
}
- 数据库CRUD操作(Oracle示例)
public class UserDAO {
private static final String URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
private static final String USER = "scott";
private static final String PASSWORD = "tiger";
public void insert(User user) throws SQLException {
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {
String sql = "INSERT INTO users(id, name) VALUES(seq_user.nextval, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getName());
pstmt.executeUpdate();
}
}
// 其他CRUD方法...
}
四、高级特性实现
- 过滤器应用
@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;charset=UTF-8");
chain.doFilter(request, response);
}
}
- Cookie处理
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
Cookie cookie = new Cookie("lastVisit", new Date().toString());
cookie.setMaxAge(60*60*24); // 1天有效期
resp.addCookie(cookie);
}
五、项目配置要点
web.xml配置示例
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.example.UserServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>
六、完整CRUD示例(用户管理系统)
JSP视图层
<!-- user_list.jsp -->
<table>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>
<a href="/deleteUser?id=${user.id}">删除</a>
<a href="/editUser?id=${user.id}">编辑</a>
</td>
</tr>
</c:forEach>
</table>
Servlet控制器
@WebServlet("/user/*")
public class UserController extends HttpServlet {
private UserDAO dao = new UserDAO();
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String action = req.getPathInfo();
switch(action) {
case "/add":
showAddForm(req, resp);
break;
case "/edit":
showEditForm(req, resp);
break;
default:
listUsers(req, resp);
}
}
private void listUsers(HttpServletRequest req, HttpServletResponse resp) {
List<User> users = dao.findAll();
req.setAttribute("users", users);
req.getRequestDispatcher("/user_list.jsp").forward(req, resp);
}
}
七、开发注意事项
- 线程安全:避免在Servlet中使用实例变量
- 编码统一:设置request/response的字符集
- 路径处理:使用
request.getContextPath()
获取应用上下文 - 异常处理:配置
<error-page>
处理500/404错误 - 性能优化:合理使用连接池、缓存机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库