首页
关于
留言
统计
友链
壁纸
影视
留言找电影
Search
1
java jdk17版本使用cglib报错问题解决
321 阅读
2
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
117 阅读
3
Java实现双链表插入排序~渡星河全网首发
106 阅读
4
Java打印某年某月的日历~不调用函数
76 阅读
5
Java中判断是否是闰年
70 阅读
代码笔记
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
页面
关于
留言
统计
友链
壁纸
影视
留言找电影
搜索到
44
篇与
的结果
2023-03-09
java jdk17版本使用cglib报错问题解决
我们先看报错Exception in thread "main" java.lang.ExceptionInInitializerError at com.spring6.cglib.Client.main(Client.java:7) Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @66cd51c3 at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464) Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @66cd51c3 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) 解决方法也就是说我们jdk17要想使用这个cglib就必须解决这个问题,这个问题也就是兼容问题和jdk17的安全问题,像1.8版本的就没啥事配置如下--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.net.util=ALL-UNNAMED
2023年03月09日
321 阅读
0 评论
1 点赞
2023-03-07
Spring框架生命周期十步demo
spring.xml文件配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- <bean id="test" class="com.spring6.web.UserAction"/>--> <!-- <bean id="beanlife" class="com.spring6.service.BeanLife" init-method="init" destroy-method="destroy"> <property name="name" value="你好"/> </bean>--> <bean class="com.spring6.service.BeanBeforePost"/> <bean id="beanTenLife" class="com.spring6.service.BeanTenLife" init-method="init" destroy-method="destroySingleton"> <property name="name" value="你好"/> </bean> </beans>BeanTenLife类代码package com.spring6.service; import org.springframework.beans.BeansException; import org.springframework.beans.factory.*; public class BeanTenLife implements BeanNameAware, BeanFactoryAware, BeanClassLoaderAware, InitializingBean,DisposableBean { private String name; public BeanTenLife() { System.out.println("构造函数启动"); } public void setName(String name) { System.out.println("set注入启动"); this.name = name; } public void getName() { System.out.println("使用Bean"); } public void init() { System.out.println("bean初始化"); } public void destroySingleton() { System.out.println("bean销毁"); } @Override public void setBeanClassLoader(ClassLoader classLoader) { System.out.println("bean的加载器"+classLoader.getClass()); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { System.out.println("BeanFactory工程"+beanFactory.getClass()); } @Override public void setBeanName(String s) { System.out.println("setBeanName方法"+s); } @Override public void afterPropertiesSet() throws Exception { System.out.println("afterPropertiesSet方法"); } @Override public void destroy() throws Exception { System.out.println("销毁前面执行此"); } } 测试类package com.spring6.test; import com.spring6.service.BeanLife; import com.spring6.service.BeanTenLife; import com.spring6.web.UserAction; import org.junit.jupiter.api.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class FirstSpringTest { @Test public void Test(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); UserAction test = (UserAction)context.getBean("test"); test.deleteRecord(); } /** * 七步生命周期 */ @Test public void BeanLife(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); BeanLife beanlife = context.getBean("beanlife", BeanLife.class); beanlife.getName(); context.close(); } /** * 十步生命周期 */ @Test public void BeanTenLife(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); BeanTenLife beanlife = context.getBean("beanTenLife", BeanTenLife.class); beanlife.getName(); context.close(); } } 测试截图
2023年03月07日
13 阅读
0 评论
2 点赞
2023-02-12
java servlet实现将hashmap转换数组
要在 Java Servlet 中实现这样的 JSON 格式,需要使用一些第三方的 JSON 库,例如 Gson、Jackson 等。其中,Gson 是一个非常流行的 JSON 库。下面是一个使用 Gson 实现的示例:{lamp/}import com.google.gson.Gson; 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.HashMap; import java.util.Map; @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置返回类型为 JSON response.setContentType("application/json;charset=UTF-8"); // 创建一个存储数据的 Map Map<String, Object> map = new HashMap<>(); map.put("status", 1); map.put("msg", "登录成功"); Map<String, Object> data = new HashMap<>(); data.put("userAccount", 10001); data.put("nickname", "admin"); data.put("motto", "心中无女人代码自然神"); data.put("userqq", "10001"); data.put("power", 1); map.put("data", data); // 使用 Gson 将数据转换为 JSON 格式 Gson gson = new Gson(); String json = gson.toJson(map); // 将 JSON 格式的数据写回到客户端 response.getWriter().write(json); } } 您可以通过以下方式封装这种 JSON 格式:import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; public class Result { private int status; private String msg; private Map<String, Object> data = new HashMap<String, Object>(); public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Map<String, Object> getData() { return data; } public void setData(Map<String, Object> data) { this.data = data; } public Result addData(String key, Object value) { this.data.put(key, value); return this; } public String toJson() throws Exception { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(this); } } 实现Result result = new Result(); result.setStatus(1); result.setMsg("登录成功"); result.addData("userAccount", 10001); result.addData("nickname", "admin"); result.addData("motto", "心中无女人代码自然神"); result.addData("userqq", "10001"); result.addData("power", 1); response.setContentType("application/json;charset=UTF-8"); response.getWriter().write(result.toJson()); 注意:需要引入 jackson-databind 库才能使用 ObjectMapper 类。
2023年02月12日
14 阅读
0 评论
1 点赞
2023-02-11
基于JavaServlet实现发送邮件
邮件发送需要下载下面的两个jar包导入到项目activation-1.1.1.jar mail-1.4.7.jarjar包下载网站jar下载网站{lamp/}代码实现import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; 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.io.PrintWriter; import java.util.Properties; @WebServlet(name = "SendEmailServlet", urlPatterns = {"/sendEmail"}) public class SendEmailServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 获取表单传递过来的数据 String from = request.getParameter("from"); String password = request.getParameter("password"); String to = request.getParameter("to"); String subject = request.getParameter("subject"); String content = request.getParameter("content"); // 配置发送邮件的环境信息 final Properties props = new Properties(); // 表示SMTP发送邮件,必须进行身份验证 props.put("mail.smtp.auth", "true"); // 此处填写SMTP服务器,QQ的是smtp.qq.com props.put("mail.smtp.host", "smtp.163.com"); // 端口号,QQ邮箱给出了两个端口,我这里使用的网易邮箱所以是25,QQ好像是465 props.put("mail.smtp.port", "25"); // 此处填写你的账号 props.put("mail.user", from); // 此处的密码就是前面说的16位STMP口令 props.put("mail.password", password); // 构建授权信息,用于进行SMTP进行身份验证 Authenticator authenticator = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { // 用户名、密码 String userName = props.getProperty("mail.user"); String password = props.getProperty("mail.password"); return new PasswordAuthentication(userName, password); } }; // 使用环境属性和授权信息,创建邮件会话 Session mailSession = Session.getInstance(props, authenticator); // 创建邮件消息 MimeMessage message = new MimeMessage(mailSession); // 设置发件人 InternetAddress form; try { form = new InternetAddress(from); message.setFrom(form); // 设置收件人 InternetAddress toAddress = new InternetAddress(to); message.setRecipient(Message.RecipientType.TO, toAddress); // 设置邮件标题 message.setSubject(subject); // 设置邮件的内容体 message.setContent(content, "text/html;charset=UTF-8"); // 发送邮件 Transport.send(message); out.println("邮件发送成功"); } catch (MessagingException e) { e.printStackTrace(); } } }
2023年02月11日
13 阅读
0 评论
1 点赞
2023-02-02
基于Java原生SercerSocket和I/O流进行登录注册接口实现,可部署服务端前端直接调用接口
SeversSockrt基于Java原生SercerSocket和I/O流进行登录注册接口实现,可部署服务端前端直接调用接口可以通过使用线程池和循环来对服务端进行简单优化采用get方式进行访问-------------------必看-------------------必须修改RequestData中 //用户目录位置 private final String userPath = "E:\\Users\\"; 请修改为你自己的,否则会报错,这里以Windows系统路径测试,其它系统请使用其它系统路径格式用户保存位置方式例子一个用户 账号为123456 那么在本地的文件保存为E:\Users\123456 密码保存为E:\Users\123456\password.txt 注册的时候会通过数据分析自动创建账户和密码文件夹和文件(采用IO流)接口格式## 登录接口 http://localhost/api/login?user=用户名&password=密码 ## 注册接口 http://localhost/api/register?user=用户名&password=密码 可以添加其它数据,按照格式添加 &[数据名]=[数据] 例如 http://localhost/api/register?user=用户名&password=密码&name=张山接口格式解析http://localhost/api/login?user=用户名&password=密码 localhost 为服务器IP api 文件夹 login 文件夹下的login类 问号后面为提交的数据目录结构建议对前后端数据进行加密,例如aes加密。对数据作过期验证。{mtitle title="代码如下"/}NbServerpackage MuDaoServer; import java.net.ServerSocket; import java.net.Socket; public class NbServer extends ServerMethod{ public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(80); Socket socket = serverSocket.accept(); //处理前端数据 getClientData(socket); //反射获得需要输出的数据 String val = reflex(RequestData.FullName); //输出数据 ServerMethod.outBrowse(socket,val); socket.close(); } } ServerMethodpackage MuDaoServer; import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.Socket; import java.net.URL; import java.util.Objects; //导入api文件夹下面的所有类,用于获取路径 import MuDaoServer.Controller.Annotations; import MuDaoServer.api.*; public class ServerMethod extends RequestData{ //获取用户客户端信息 public static void getClientData(Socket socket) throws IOException { //获取客户端内容 InputStream getBrowserData = socket.getInputStream(); //将字节流转换为字符流 InputStreamReader change = new InputStreamReader(getBrowserData); BufferedReader reader = new BufferedReader(change); String val; //获取第一行,用于解析用户使用了哪个文件,提交了哪些数据 String line1 = reader.readLine(); RequestData.firstLineData=line1; //将第一行以空格进行分割分别得到提交方法,提交路径数据,http协议版本 GET / HTTP/1.1,这里我们只需要路径 RequestData.data = line1.split(" ")[1]; //判断获取的路径是否包含/api/数据,不包含则返回错误json,目前只提供api文件夹下的文件 if (RequestData.data.contains("/api/")){ //将问号前面的数据放到RequestData中的path中 RequestData.path=RequestData.data.split("\\?")[0]; //判断请求的类是否存在 GET /api/login?user=202228902&password=QWERTY HTTP/1.1 String className = RequestData.data.split("\\?")[0].split("/")[2];//获取类名 String path = ServerMethod.class.getResource("./") +"api/"+className+".class"; path = path.substring(6); path = path.replaceAll("/","\\\\\\\\"); //判断文件是否存在 if (fileExists(path)){ //把全限定名放到数据中 String[] split = ServerMethod.class.getResource("./").toString().split("/"); String fullName = split[split.length - 1]+".api."+className; RequestData.FullName=fullName; System.out.println("全限定"+fullName); }else { val = "{\"code\":\"-1\",\"msg\":\"该接口不存在\"}"; outBrowse(socket,val); } }else { val = "{\"code\":\"-1\",\"msg\":\"该接口不存在\"}"; outBrowse(socket,val); } } //反射 public static String reflex(String fullName) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { Class<?> clazz = Class.forName(fullName); String invoke = "{\"code\":\"-1\",\"msg\":\"反射出错\"}";; //判断是否使用了注解 if (clazz.isAnnotationPresent(Annotations.class)) { Annotations annotation = clazz.getAnnotation(Annotations.class); //获取注解的value String value = annotation.value(); //判断注解中路径是否正确, if (value.equals(RequestData.path)) { //通过反射创建该servlet对象,然后调用该对象的service方法 Object instance = clazz.getDeclaredConstructor().newInstance(); Method method = clazz.getDeclaredMethod("service"); //把类型强转为字符串 invoke = (String) method.invoke(instance); } } return invoke; } //通用输出到网页 public static void outBrowse(Socket socket,String value) throws IOException { String stringBuilder = "HTTP/1.1" + " " + 200 + " " + "ok" + "\n" + "Content-Type" + ":" + "text/html;charset=UTF-8" + "\n" + "\n" + value; OutputStream outputStream = socket.getOutputStream(); PrintWriter output = new PrintWriter(outputStream); output.println(stringBuilder); output.flush(); outputStream.close(); } //判读文件或者文件夹是否存在 public static boolean fileExists(String path) { File file = new File(path); return file.exists(); } //创建一个文件 public static boolean createFile(String path) throws IOException { File file = new File(path); return file.createNewFile(); } //获取api文件夹下的类路径 public static String classPath(String className) { URL url = login.class.getResource("./"); return ""; } } 注解Annotationspackage MuDaoServer.Controller; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Annotations { String value() default ""; } RequestData 数据存放package MuDaoServer; import java.util.Map; public class RequestData { //用户目录位置 private final String userPath = "E:\\Users\\"; public String getUserPath() { return userPath; } //存放类名 private String clazz; //请求方法get/post private String method; public String getPath() { return path; } public void setPath(String path) { this.path = path; } //请求数据 public static String data; //全限定名 public static String FullName; //用户访问的接口路径 public static String path; //存放第一行数据 public static String firstLineData; public String getFirstLineData() { return firstLineData; } public void setFirstLineData(String firstLineData) { RequestData.firstLineData = firstLineData; } //存放其他头文件数据 private Map<String, String> headers; public String getClazz() { return clazz; } public void setClazz(String clazz) { this.clazz = clazz; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public String getData() { return data; } public void setData(String data) { this.data = data; } public void setHeaders(Map<String, String> headers) { this.headers = headers; } @Override public String toString() { return "RequestData{" + "clazz='" + clazz + '\'' + ", method='" + method + '\'' + ", path='" + path + '\'' + ", firstLineData='" + firstLineData + '\'' + ", headers=" + headers + '}'; } } login 登录代码逻辑package MuDaoServer.api; import MuDaoServer.Controller.Annotations; import MuDaoServer.RequestData; import java.io.*; @Annotations("/api/login") public class login { public String service() throws IOException { String[] split = RequestData.data.split("&"); String user = split[0].split("=")[1]; String pass = split[1].split("=")[1]; File file = new File("E:\\Users"); String json = ""; if (!file.exists()) { file.mkdirs(); json="{\"code\":\"-1\",\"msg\":\"提交参数不完整\"}"; }else { File file1 = new File("E:\\Users\\"+user); if (!file1.exists()) { json="{\"code\":\"-1\",\"msg\":\"用户不存在\"}"; }else { BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\Users\\"+user+"\\password.txt")); if (pass.equals(bufferedReader.readLine())){ json="{\"code\":\"200\",\"msg\":\"登录成功\"}"; }else { json="{\"code\":\"-1\",\"msg\":\"密码错误\"}"; } } } return json; } } register注册代码逻辑package MuDaoServer.api; import MuDaoServer.Controller.Annotations; import MuDaoServer.RequestData; import java.io.*; import java.util.HashMap; import static MuDaoServer.ServerMethod.fileExists; @Annotations("/api/register") public class register { public String service() throws IOException { String json = ""; //获取data的数据 String data = RequestData.data.split("\\?")[1]; System.out.println("data:"+data); //对data数据进行分析 HashMap<String, String> dataMap = new HashMap<>();//存放get请求的数据 String[] split = data.split("&"); for (String s : split){ String[] split1 = s.split("="); dataMap.put(split1[0],split1[1]); } //判断必填数据是否存在 if (dataMap.containsKey("user") && dataMap.containsKey("password")){ //判断用户是否存在 RequestData requestData = new RequestData(); if (!fileExists(requestData.getUserPath()+dataMap.get("user"))){ String path1 = requestData.getUserPath()+dataMap.get("user"); File file = new File(path1); //创建用户文件夹 boolean mkdirs = file.mkdirs(); if (mkdirs){ //创建文件 FileOutputStream out = new FileOutputStream(path1 + "\\\\\\\\password.txt"); //写入文件 out.write(dataMap.get("password").getBytes()); out.close(); json = "{\"code\":\"200\",\"msg\":\"账号注册成功\"}"; } }else { json = "{\"code\":\"-1\",\"msg\":\"该账号已存在\"}"; } }else { json = "{\"code\":\"-1\",\"msg\":\"提交参数不完整\"}"; } return json; } } 获取用户列表package MuDaoServer.api; import MuDaoServer.Controller.Annotations; import java.io.*; import java.util.Arrays; @Annotations("/api/listUser") public class listUser { public String service() throws IOException { File file = new File("E:\\Users"); File[] files = file.listFiles(); String value =Arrays.toString(files); System.out.println(value); return value; } } 有什么错误请评论交流
2023年02月02日
6 阅读
0 评论
0 点赞
1
...
4
5
6
...
9