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实例被销毁");
    }
}

三、请求处理模式

  1. 基础请求处理
@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");
    }
}
  1. 数据库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方法...
}

四、高级特性实现

  1. 过滤器应用
@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);
    }
}
  1. 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);
    }
}

七、开发注意事项

  1. 线程安全:避免在Servlet中使用实例变量
  2. 编码统一:设置request/response的字符集
  3. 路径处理:使用request.getContextPath()获取应用上下文
  4. 异常处理:配置<error-page>处理500/404错误
  5. 性能优化:合理使用连接池、缓存机制
posted @   f-52Hertz  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示