当前位置: 首页 > article >正文

培训机构Day25

今天上午花时间实现了写Servlet,实现了数据库查询显示到浏览器界面上。下午讲了如何处理多线程的访问保证线程安全。

知识点:

设计模式:面向对象的语言。对某个特定领域特定场景问题的最佳解决方案。
1.单例模式。singleton。单个实例,单个对象。
1.1 懒汉式:将实例化延迟到第一次获取实例。可以通过双检锁(Double-check)实现线程安全。
1.2 饿汉式:提前创建类的唯一实现,线程安全的。
1.3 登记式:spring框架。可以对任意类进行单例。通用的。

volatile:表示禁止指令重排,禁止优化。一旦有写操作,其它线程第一时间可以看到。

int a = 10;
int b = 20;
int c = 30;

sout(a+b+c)

xxx.properties
xxx.xml
xxx.yml

============================================
监听器:监听特定的事件,当事件发生时,进行特定的业务处理。
1.ServletContextListener:比较常用。


域对象四种:存储数据的容器。
1.页面域。
2.请求域。HttpServletRequest
3.会话域。
4.全局域。ServletContext。一个应用有唯一的一个全局域。


过滤器:

不过初版的servelt代码还是先扔出来吧:

package com.example.demo;

import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.*;
import java.sql.*;

@WebServlet(name = "Search",value = "/search")
public class Search extends HelloServlet{
    // 数据库连接信息
    private static final String DB_URL = "jdbc:mysql://localhost:3306/test";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "*******";
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        // 获取数据库连接
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            // 获取数据库连接
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);

            // 查询数据库获取学生列表
            String sql = "SELECT * FROM t_student LIMIT 10";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();

            // 生成HTML页面
            out.println("<html>");
            out.println("<head><title>学生列表</title></head>");
            out.println("<body>");
            out.println("<h1>学生列表</h1>");
            out.println("<table border='1'>");
            out.println("<tr><th>ID</th><th>姓名</th></tr>");

            // 循环显示查询结果
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");

                out.println("<tr>");
                out.println("<td>" + id + "</td>");
                out.println("<td>" + name + "</td>");
                out.println("</tr>");
            }

            out.println("</table>");
            out.println("</body>");
            out.println("</html>");
        } catch (Exception e) {
            e.printStackTrace();
            out.println("<h2>错误:" + e.getMessage() + "</h2>");
        } finally {
            // 关闭资源
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}


http://www.kler.cn/a/500414.html

相关文章:

  • 《自动驾驶与机器人中的SLAM技术》ch1:自动驾驶
  • 选择器css
  • LLaMA-Factory web微调大模型并导出大模型
  • ECharts饼图下钻
  • linux下实现U盘和sd卡的自动挂载
  • 【黑马程序员三国疫情折线图——json+pyechart=数据可视化】
  • 【人工智能】用Python进行对象检测:从OpenCV到YOLO的全面指南
  • excel VBA 基础教程
  • 工业视觉2-相机选型
  • Group3r:一款针对活动目录组策略安全的漏洞检测工具
  • 202507读书笔记|《飞花令·河》——微微风簇浪,散做满河星,飞流直下三千尺,疑是银河落九天
  • Linux系统镜像构建(1):uboot编译烧录与移植
  • 常用的排序算法(Java版)
  • 有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗
  • uniapp 的uni.getRecorderManager() 录音功能小记
  • 【论文投稿】探索JavaScript前端开发:开启交互之门的神奇钥匙(一)
  • Git的学习和常见问题
  • 【每日学点鸿蒙知识】包体积优化、WebView下载PDF等
  • Jaeger UI使用、采集应用API排除特定路径
  • [人工智能自学] Python包学习-Matplotlib
  • 如何快速适应新入职的公司
  • 【Ubuntu与Linux操作系统:四、文件与目录管理】
  • [Git] git log / git reflog
  • 【云计算】OpenStack云计算平台