C层实现1——UserController

本文主要介绍了在Java Web中创建UserController的相关步骤,包括创建Service、设置注意事项,如请求路径统一为*.udo以方便管理,并通过反射机制处理请求。同时,详细讲解了web.xml中配置servlet的部分,特别是如何配置使所有udo结尾的请求被正确处理。此外,还推荐了学习此技术的路径——腾讯课堂的Java技术课程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建Service

package com.foot.mvcpro.controller;

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserController extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这里是Post请求的处理方法!");
        System.out.println(req.getServletPath());
        String mn = req.getServletPath();
        mn = mn.substring(1);
        mn = mn.substring(0, mn.length()-4);
        System.out.println(mn);
        //利用反射
        try {
            Method method = this.getClass().getDeclaredMethod(mn, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this, req, resp);
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

    private void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    private void query(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    private void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    private void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

注意点

1,首先我们需要将请求发往这里的请求统一命名为*.udo,这样方便管理。
2,利用反射机制,可以将所有的请求进行统一的处理。

web.xml配置该servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    id="WebApp_ID" version="3.1" >

    <servlet>
        <servlet-name>UserController</servlet-name>
        <servlet-class>com.foot.mvcpro.controller.UserController</servlet-class>
    </servlet>

    <!-- udo 的作用 -->
    <servlet-mapping>
        <servlet-name>UserController</servlet-name>
        <url-pattern>*.udo</url-pattern>
    </servlet-mapping>

</web-app>

udo

*.udo 使用udo将所有的以udo结尾的请求发送到该servlet。

学习路径 ##

腾讯课堂 钟洪发 Java技术之Javaaweb入门。

### UserController 实现示例 在构建基于Java的Web应用程序时,`UserController`通常作为RESTful API的一部分存在,负责处理与用户相关的HTTP请求。下面展示了一个使用Spring Boot框架实现带有基本CRUD功能的`UserController`。 #### 导入必要的依赖项 为了简化开发过程并增强安全性,在项目pom.xml文件中引入了如下依赖: ```xml <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis Plus for database operations --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> <!-- Lombok to reduce boilerplate code --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> ``` #### 定义实体类 `User` 通过继承Lombok库中的@Data注解来自动生成getter/setter方法,并利用MyBatis Plus提供的@TableId等注解完成数据库表字段映射[^4]。 ```java import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId private Long id; private String username; private Integer age; } ``` #### 创建服务接口及其默认实现 定义一个名为`UserService`的服务组件,其中包含了对用户数据的操作逻辑;同时提供其具体实现版本——`UserServiceImpl`. ```java // UserService.java package service; import entity.User; public interface UserService { boolean save(User user); } // UserServiceImpl.java @Service public class UserServiceImpl implements UserService { final UserRepository userRepository; public UserServiceImpl(UserRepository userRepository){ this.userRepository = userRepository; } @Override public boolean save(@Validated User user) { return userRepository.save(user).getId() != null; } } ``` 注意这里还加入了JSR 380标准下的Bean Validation约束验证机制[@Validated][^2]. #### 构建控制器 `UserController` 最后一步就是编写实际暴露给外部调用者的API端点——即`UserController`. 此处展示了如何接收POST请求以新增一条记录到数据库中. ```java @RestController @RequestMapping("/users") public class UserController { final UserService userService; public UserController(UserService userService){ this.userService = userService; } /** * 添加新用户. */ @PostMapping("") ResponseEntity<String> createUser(@RequestBody @Validated User user, BindingResult result) { if (result.hasErrors()) { return new ResponseEntity<>("Invalid input", HttpStatus.BAD_REQUEST); } try{ Boolean success = userService.save(user); if (!success){ throw new RuntimeException("Failed to create"); } return new ResponseEntity<>(HttpStatus.CREATED); }catch(Exception e){ return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } } ``` 此段代码实现了当接收到客户端发送过来的有效JSON对象后将其保存至持久化存储内,并依据操作结果返回不同的状态码响应给前端应用[^1]^.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值