JavaWeb SpringBoot 总结

JavaWeb  SpringBoot 总结 一、JavaWeb 核心技术体系1. MySQL 数据库基础SQL分类DDL数据定义CREATE、ALTER、DROPDML数据操作INSERT、UPDATE、DELETEDQL数据查询SELECTDCL数据控制GRANT、REVOKE表关系设计一对多外键放在多方多对多建立中间表一对一在任意一方添加唯一外键2. JDBC 核心编程标准流程java // 1. 注册驱动 Class.forName(com.mysql.cj.jdbc.Driver); // 2. 获取连接 Connection conn DriverManager.getConnection(url, username, password); // 3. 创建Statement Statement stmt conn.createStatement(); // 4. 执行SQL ResultSet rs stmt.executeQuery(SELECT * FROM users); // 5. 处理结果集 while(rs.next()) { String name rs.getString(name); // ... } // 6. 释放资源 rs.close(); stmt.close(); conn.close();Druid连接池使用java // 配置druid.properties Properties prop new Properties(); prop.load(new FileInputStream(druid.properties)); DataSource dataSource DruidDataSourceFactory.createDataSource(prop); Connection conn dataSource.getConnection();3. Servlet 核心组件生命周期加载和实例化初始化init请求处理service销毁destroy注册方式java WebServlet(/user) public class UserServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { // 处理GET请求 } }4. 请求与响应处理请求参数获取javaString username req.getParameter(“username”);String[] hobbies req.getParameterValues(“hobby”);响应设置java resp.setContentType(text/html;charsetutf-8); PrintWriter out resp.getWriter(); out.print(h1你好 username /h1);5. 会话管理技术Cookie操作java // 写入Cookie Cookie cookie new Cookie(username, admin); cookie.setMaxAge(3600); resp.addCookie(cookie); // 读取Cookie Cookie[] cookies req.getCookies(); for(Cookie c : cookies) { if(username.equals(c.getName())) { String value c.getValue(); // ... } }Session使用java HttpSession session req.getSession(); session.setAttribute(user, userObj); User u (User) session.getAttribute(user);6. 过滤器与监听器过滤器实现java WebFilter(/*) public class AuthFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) { // 前置处理 HttpServletRequest request (HttpServletRequest) req; if(!checkAuth(request)) { // 跳转登录 return; } chain.doFilter(req, res); // 放行 // 后置处理 } }监听器示例java WebListener public class AppListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { // 应用启动初始化 } public void contextDestroyed(ServletContextEvent sce) { // 应用销毁处理 } }二、SpringBoot 高级开发实战1. 核心特性自动配置基于条件注解的智能配置起步依赖简化依赖管理内嵌容器默认集成Tomcat2. 工程规范标准结构text src/main/java ├── com.xxx │ ├── config # 配置类 │ ├── controller # 控制器 │ ├── service # 业务层 │ ├── mapper # 数据层 │ └── entity # 实体类 src/main/resources ├── static # 静态资源 ├── templates # 模板文件 ├── application.yml # 主配置 └── mapper/*.xml # MyBatis映射文件3. MyBatis 深度集成基础配置yaml # application.yml mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true动态SQL示例xml select idsearch resultTypeUser SELECT * FROM user where if testname ! null AND name LIKE CONCAT(%, #{name}, %) /if if teststatus ! null AND status #{status} /if /where ORDER BY create_time DESC /select4. Web开发核心RESTful接口java RestController RequestMapping(/api/users) public class UserController { Autowired private UserService userService; GetMapping(/{id}) public ResultUser getById(PathVariable Long id) { return Result.success(userService.getById(id)); } PostMapping public Result create(RequestBody Valid UserDTO dto) { return Result.success(userService.create(dto)); } }统一响应封装java public class ResultT { private int code; private String msg; private T data; public static T ResultT success(T data) { return new Result(200, 成功, data); } // 其他构造方法和静态工厂方法 }5. 安全认证方案JWT实现java public class JwtUtil { private static final String SECRET your-secret-key; private static final long EXPIRATION 86400L; // 24小时 public static String generateToken(UserDetails user) { return Jwts.builder() .setSubject(user.getUsername()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() EXPIRATION * 1000)) .signWith(SignatureAlgorithm.HS512, SECRET) .compact(); } public static Claims parseToken(String token) { return Jwts.parser() .setSigningKey(SECRET) .parseClaimsJws(token) .getBody(); } }拦截器配置java public class JwtInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String token request.getHeader(Authorization); try { Claims claims JwtUtil.parseToken(token); String username claims.getSubject(); // 将用户信息存入上下文 UserContext.setCurrentUser(username); return true; } catch (Exception e) { response.setStatus(401); return false; } } Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { UserContext.clear(); // 防止内存泄漏 } }6. 异常处理机制全局异常处理java RestControllerAdvice public class GlobalExceptionHandler { ExceptionHandler(BusinessException.class) public Result handleBusinessException(BusinessException e) { return Result.fail(e.getCode(), e.getMessage()); } ExceptionHandler(MethodArgumentNotValidException.class) public Result handleValidationException(MethodArgumentNotValidException e) { String message e.getBindingResult() .getFieldErrors() .stream() .map(FieldError::getDefaultMessage) .collect(Collectors.joining(, )); return Result.fail(400, message); } }三、生产级优化策略1. 性能优化连接池配置spring:datasource:hikari:maximum-pool-size:20connection-timeout:30000-**缓存集成**java Cacheable(value users,key #id)public User getById(Long id){return userMapper.selectById(id);}2. 监控与部署Actuator配置yaml management: endpoints: web: exposure: include: health,info,metrics endpoint: health: show-details: always打包与运行bash打包mvn clean package -DskipTests生产环境运行nohup java -jar app.jar --spring.profiles.activeprod app.log 21 四、关键问题解决方案MyBatis映射问题确保Mapper接口有Mapper或MapperScanXML文件放在resources/mapper/目录字段名与属性名匹配开启驼峰命名事务失效场景检查方法是否为public避免自调用异常类型是否正确捕获