首页
友链
关于
免责声明
Search
1
王者营地战绩数据王者荣耀查询网页源码
6,209 阅读
2
群晖Active Backup for Business套件备份Linux服务器教程
4,384 阅读
3
影视分享
4,313 阅读
4
(亲测)Jrebel激活破解方式2019-08-21
4,289 阅读
5
centos7 安装及卸载 jekenis
3,573 阅读
日常
文章
后端
前端
Linux
异常
Flutter
分享
群辉
登录
Search
标签搜索
docker
springboot
Spring Boot
java
linux
Shiro
Graphics2D
图片
游戏账号交易
Mybatis
Spring Cloud
centos
脚本
Web Station
群辉
王者营地
战绩查询
平台对接
Spring Cloud Alibaba
nacos
绿林寻猫
累计撰写
249
篇文章
累计收到
26
条评论
首页
栏目
日常
文章
后端
前端
Linux
异常
Flutter
分享
群辉
页面
友链
关于
免责声明
搜索到
195
篇与
后端
的结果
2021-12-08
JSP内置对象、JSP常用动作标签、指令
JSP有9个内置对象,分别是:request(请求)、response(响应)、session(会话)、application(应用程序)、out(输出)、page(页面)、config(配置)、pageContext(页面上下文)、exception(异常)。 对象 作用及方法 Request 表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie、header和session数据的有用的方法。 Response 表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies、header头信息等)。 pageContext 是一个Javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 Session 表示一个请求的Javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息。 Application 表示一个Javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息。 Out 是Javax.jsp.JspWriter的实例,并提供了几个方法能用于向浏览器回送输出结果。 Config 表示一个Javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 Page 表示从该页面产生的一个servlet实例。 Exception 针对错误网页,未捕捉的例外 Request对象 Request对象代表的是来自客户端的请求,例如在form表单中填写的信息等是最常用的对象。 方法: getParameter() //获取到客户端通过表单或url请求参数发送过来的参数值 getParameterValues() //将同名的参数一次性读入String类型的数组中 getParameterNames() //获取参数名称,返回枚举类型 getMethod() //获得用户提交方式,post或get getServletPath() //获得JSP文件所在项目的路径 getRemoteAddr() //获取客户的IP地址 getServerName() //获取服务器的名称 getServerPort() //获取服务器的端口号 getContextPath() //获取项目名,与getServletPath类似 getHeader(str) //获取HTTP头文件中的指定值 getHeaders(str) //获取表头信息 请求中文乱码处理 a. 设置request请求字符编码request.setCharacterEncoding("UTF-8"); b. 取得参值后,通过转码方式将值转成合适的字符集String uname=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");String upwd=new String(request.getParameter("pwd").getBytes("ISO-8859-1"),"UTF-8"); 获取主机和客户机的信息getRemoteAddr() //获得客户主机的IPgetRemoteHost() //获得客户主机的名字getLocalAddr() //获得本地主机的IPgetLocalHost() //获得本地主机的名字getServerName() //获得服务器主机的IPgetServerPort() //获得服务器端口例如:本地计算机名为:<%=request.getLocalHost()%> Response对象 Response对象代表的是对客户端的响应,也就是说可以通过response对象来组织发送到客户端的数据。 但是由于组织方式比较底层,所以不建议一般人使用。 需要向客户端发送文字时直接用out对象即可。 方法: addHeader(String arg0,String arg1) //向页面中添加头和对应的值 addCookie(Cookie arg0) //添加Cookie信息 sendRedirect(String arg0) //实现页面重定向,URL重写 setStatus(int arg0) //设定页面的响应状态代码 setContentType(String arg0) //设定页面的MIME类型和字符集 setCharacterEncoding(arg0) //设定页面响应的编码类型 Session对象 Session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。 HTTP是无状态协议; Web Server对每一个客户端请求都没有历史记忆; Session用来保存客户端状态信息。 打开一个浏览器就意味着打开了一个Session对象,浏览器不关闭,Session对象会一直存在(姑且这样认为),且Session对象只有一个。 如果浏览器关闭重启,会创建新的Session对象。 Session对象生命周期:创建--执行--失效 方法: setAttribute("key",value) //将参数名和参数值存放在session对象中 getAttribute("key") //获取参数值 getAttributeName() getId() //获取session对象的ID removeAttribute("key") //移除指定session中参数 getCreateTime() //获得session对象创建的时间,单位毫秒 getMaxInactiveInterval() //获得session对象的有效时间 setMaxInactiveInterval() //设置session对象的有效时间 isNew() //判断是否为一个新客户 invalidate() //使session对象失效 application对象 application对象负责提供应用程序在服务器中运行时的一些全局信息。类似于系统的“全局变量”,用于实现用户之间的数据共享。 application的生命周期是从application创建到服务器关闭。 application的存活范围比request和session都要大。 只要服务器没有关闭,application对象中的数据就会一直存在,在整个服务器的运行过程当中,application对象只有一个,它会被所有的用户共享。 方法: getRealPath(String arg0) //获得指定文件的路径 getMimeType(String arg0) //获取指定的文件格式 setAttribute(String arg0,Object obj) //将参数及参数值保存到application对象 getAttribute(String arg0) //获得application对象属性的值 getAttributeNames() //获得application中所有参数的名字 removeAttribute(String arg0) //移除application对象中指定的参数值 getServletInfo() //获取Servlet的当前版本信息 getContext(String arg0) //获得指定路径的context内容 getContextPath() 例如:<%=application.getRealPath("login.jsp")%> //获得login.jsp的实际路径<%=application.getResource("login.jsp")%><%=application.getContextPath()%> Out对象 作用:输出内容到HTML中。 out对象代表了向客户端发送数据的对象,与response对象不同,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过out对象直接向客户端写一个由程序动态生成的HTML文件。 常用的方法除了print和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为out对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。 方法: append(char c) //将字符添加到输出流中 clear() //清空页面缓存中的内容 close() //关闭网页流的输出 flush() //网页流的刷新 println() //将内容直接打印在HTML中 write() //与println()方法相似,区别在于println()可以输出各种类型的数据, 而write()只能输出与字符相关的数据。例如:<%out.println("这是out对象输出的信息");out.clear(); //清除缓冲区中的内容%> Page对象 Page对象是指当前的JSP页面本身,在实际开发中并不常用。 方法: getClass() //返回当时Object的类 hashCode() //返回此时Object的哈希代码 toString() //将此时的Object类转换成字符串 equals(Object obj) //比较此对象是否与指定的对象相等 clone() //对此对象进行克隆 copy(Object obj) //将此对象复制到指定的对象中 Config对象 Config对象一般用于页面初始化时传递参数。一般而言很少在页面中使用config对象。 方法: getServletContext() //获得servletContext值 getInitParameter(String arg0) //获得指定的初始化值 getInitParameterNames() //获得初始化的所有参数,返回枚举值 getServletName() //获得servlet名字 equals(Object obj) //比较此时的对象是否与指定的对象相等 toString() //获得此时对象的值 Exception对象 Exception对象用来处理页面出现的异常错误。 通常在某个页面(比如A.jsp)中加入page指令的errorPage属性来将其指向一个专门处理异常错误的页面(doError.jsp)。 <%@ page errorPage="doError.jsp" %> 方法: getMessage() //返回exception对象的异常消息字符串 getLocalizedMessage() //返回exception对象的本地化语言的异常错误。 printStackTrace() //显示异常的栈跟踪轨迹。 toString() //返回关于异常错误的简单消息描述。 fillInStackTrace() //重写异常错误的栈执行轨迹。 PageContext对象 PageContext内置对象是一个比较特殊的对象,它相当于页面中所有其他对象功能的最大集成者, 即使用它可以访问到本页面中所有其他的对象。 例如前面已经描述的request、response、out和page对象等。 由于在JSP中request和response等对象本来就可以通过直接调用方法使用,所以pageContext对象在实际JSP开发中很少使用到。 方法: getRequest():返回当前页面中的request对象。 getResponse():返回当前页面中的response对象。 getSession():返回当前页面中的session对象。 getServletContext():返回当前页面中的application对象。 getPage():返回当前页面中的page对象。 getOut():返回当前页面中的out对象。 getException():返回当前页面中的exception对象。 getServletConfig():返回当前页面中的config对象。 setAttribute(String name):给指定的属性名设置属性值。 getAttribute(String naem):根据属性名找到相应的属性值。 setAttribute(String name, Object obj, int scope):在给定的范围内设置相应的属性值。 getAttribute(String name, int scope):在给的范围内获取相应的属性值。 findAttribute(String name):寻找一个属性并返回,如果查找不到则返回null。 removeAttribute(String name):通过属性名删除掉某个属性。 removeAttribute(String name, int scope):在指定的某个范围里删除某个属性。 getAttributeScope(String name scope):返回某属性的作用域。 getAttributeNamesInScope(int scope):返回指定范围内的所有属性名的枚举。 release():释放pageContext占据的所有资料。 forward(String relativeURLpath):使用当前页面重导到另一个页面。 include(String relativeURLpath):使用当前位置包含的另一个页面。 JSP常用的动作标签: 语法 描述 jsp:include 在页面被请求的时候引入一个文件。 jsp:useBean 寻找或者实例化一个JavaBean。 jsp:setProperty 设置JavaBean的属性。 jsp:getProperty 输出某个JavaBean的属性。 jsp:forward 把请求转到一个新的页面。 jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。 jsp:element 定义动态XML元素 jsp:attribute 设置动态定义的XML元素属性。 jsp:body 设置动态定义的XML元素内容。 jsp:text 在JSP页面和文档中使用写入文本的模板 JSP三大指令: 指令 作用 <%@ page %> 设置JSP页面的属性和相关功能。 <%@ include %> 在JSP页面引入需要包含的页文件。 <%@ taglib %> 标签指令,自定义新的标签。 JSP中动态include与静态include的区别?动态include用<jsp:include>动作实现,<jsp:include page=”included.jsp” flush=”true” />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态include用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file=”included.html” %> 。
2021年12月08日
139 阅读
0 评论
0 点赞
2021-12-08
Servlet 过滤器Filter
过滤器概念过滤器就是用来拦截客户端(浏览器)与目标资源的请求,对客户端的请求进行一定过滤处理,再发给目标资源(Servlet、JSP、html等)。在Web应用程序中,过滤器是介于Servlet之前,既可以拦截、过滤浏览器的请求,也可以改变对浏览器的响应。它在服务端与客户端起到一个中间组件的作用,对二者之间的数据信息进行过滤。一个Web应用程序中可以有多个过滤器,组成过滤器链。过滤器链中的每个过滤器都各司其职地处理并转发数据。在Web开发中,经常利用过滤器来实现如下功能: 对用户请求进行身份认证; 对用户发送的数据进行过滤或者替换; 转换图像的数据格式; 数据压缩; 数据加密; XML数据的转换; 修改请求数据的字符集。 Servlet过滤器的用途:用户认证与授权管理:我们开发一个web应用,肯定有不同权限的用户,有管理员,有普通用户。而管理员又可能分为一级管理员,二级管理员,三级管理员。每一级管理员可能又有不同的管理权限操作,访问不同的资源。过去我们可能都是在jsp页面,servlet中加以权限的控制。通过session,看他是否有这个权限,如果有,则让他操作某个资源。这些都是些共性。那么现在我们就可以把他提取出来。让他通过过滤器来实现;用户来访问一个资源,我们通过过滤器来过滤这个请求,在程序中判断是否有权限来访问这个资源;有,则让他去访问,没有,就让他转到另外一个页面。这样通过过滤器就实现了授权管理; 实现过滤器1.创建Class类,并实现Filter接口(javax.servlet.Filter)。2.重写Filter接口中的方法: Public void init(FilterConfig filterConfig){ // 该方法用来初始化过滤器,FilterConfig对象可以得到过滤器中初始化的配置参数信息} Public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain){ // 该方法主要实现过滤的方法。当客户端请求目标资源时会调用此方法,在该方法中,实现对请求(request)和响应(response)的数据处理,chain是过滤器链对象。在该方法中的特定操作完成后,可调用FilterChain对象的doFilter(request, response)将请求传递给下一个过滤器或目标资源。} Public void destroy(){ // 该方法用于释放过滤器中使用的资源。} 3.在web.xml中配置Filter <filter> <filter-name>filter1</filter-name> <filter-class>com.filter.ServletFilter</filter-class></filter><filter-mapping><filter-name>filter1</filter-name><!--当请求/manage/目录下的资源时执行过滤器--> <url-pattern>/manage/*</url-pattern></filter-mapping> 实现过滤器链在访问目标资源时执行多个过滤器。 例:访问/manage/下所有目标资源时会执行过滤器filter1和filter2 <!--第一个过滤器--><filter> <filter-name>filter1</filter-name> <filter-class>com.filter.SerlvetFilterA</filter-class></filter><filter-mapping> <filter-name>filter1</filter-name> <url-pattern>/manage/*</url-pattern></filter-mapping><!--第二个过滤器--><filter> <filter-name>filter2</filter-name> <filter-class>com.filter.ServletFilterB</filter-class></filter><filter-mapping> <filter-name>filter2</filter-name> <url-pattern>/manage/*</url-pattern></filter-mapping> 注意事项:l 过滤链的执行顺序由 web.xml中定义的顺序决定。l 一旦形成过滤链的,请求的顺序以web.xml的顺序决定,响应的顺序则相返,先请求的后响应。l 在开发中,有可能只对某个或某几个目录过滤,此时可以明确的写出是哪个目录过滤,增加过滤的映射路径即可。执行Servlet时执行过滤器 <!-- Filter 配置--><filter> <filter-name>filter1</filter-name> <filter-class>com.filter.SerlvetFilterA</filter-class></filter><filter-mapping> <filter-name>filter1</filter-name> <url-pattern>/user/*</url-pattern></filter-mapping><filter-mapping><filter-name>filter1</filter-name><!--当访问Servlet中aabb时,执行过滤器filter1--> <servlet-name>aabb</servlet-name></filter-mapping> <!-- Servlet 配置--><servlet><servlet-name>aabb</servlet-name><servlet-class>com.servlet.Servlet1</servlet-class></servlet><servlet-mapping><servlet-name>aabb</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>
2021年12月08日
154 阅读
0 评论
0 点赞
2021-12-08
String类
String类的常用方法字符串长度 length()字符串某角标字符 charAt()字符串中某内容第一次出现的位置 indexOf()反向索引内容位置 lastIndexOf()字符串某角标字符的ASCII codePointAt()字符串中是否包含 contains()字符串是否为空 isEmpty()字符串是否以指定内容开头或结束 startsWith()\endsWith()字符串内容是否相同 equals()字符串内容是否相同(不区分大小写) equalsIgnoreCase()将基本类型转换成字符串 valueOf()将基本类型数组转换在字符串 new String()将字符串转换成字符数组 toCharArray()将字符串转换成字节数组 getBytes()字符串替换 replace()切割字符串 split()截取子串 substring()转换大小写 toUpperCase()\toLowerCase()去除字符串空格 trim()字符串比较 compareTo()字符串连接 concat()获取字符串长度 int length(); //注意:长度是指个数,不是字节数。获取字符串位置上某个字符 char charAt(int index); //当int index的值大于字符串最大的角标时,会发生StringIndexOutOfBoundsException错误。根据字符获得该字符在字符串中的位置 int indexOf(int ch); //返回ch在字符串中第一次出现的位置 int indexOf(int ch, int fromIndex); //从fromIndex指定位置开始,获取ch在字符串中出现的位置 int indexOf(String str); //返回str在字符串中第一次出现的位置 int indexOf(String str, int fromIndex); //从fromIndex指定位置开始,获取str在字符串中出现的位置 /**如果在字符串中没有找到该ch或str,则返回-1**/反向索引一个字符出现位置(字符串存入内存时,就存在角标) int lastIndexOf(String str); //从字符串的后面找起指定字符串位置中的字符的ASCII码 int codePointAt(int index); //返回指定字符串位置中的字符的ASCII码值字符串中是否包含某一个字串 boolean contains(str); /** 特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示str不在字符串中存在。所以,也可以用于指定判断是否包含。 if(str.indexOf("aa")!=-1) 该方法即可以判断是否包含,又可以获取出现在的位置。 如果只是要判断是否包含,就用contains() **/字符串中是否有内容 boolean isEmpty(); //原理:判断长度是否为0 字符串是否以指定的内容开头 boolean startsWith(str);字符串是否以指定的内容结尾 boolean endsWith(str); /** 实战案例:判断文件是否是Array开头,.java结尾,并且中文名中包含Demo的文件。**/判断字符串内容是否相同 boolean equals(str); 判断内容是否相同,并忽略大小写 boolean equalsIgnoreCase(str); 将字符数组转成字符串 构造方法:String(char[]); //将char数组转成字符串String(char[], offset, count); //将char数组中的一部分转成字符串,offset第几位开始,count往后几位 /** 案例1:char[] arr={'a','b','c','d','e','f','g'};String s =new String(arr);System.out.println("s="+s); //返回:s=abcdefg 案例2:char[] arr={'a','b','c','d','e','f','g'};String s =new String(arr,1,3);System.out.println("s="+s); //返回:s=bcd **/ 静态方法:static String copyValueOf(char[]);static String copyValueOf(char[] data, int offset, int count);static String valueOf(char[]); /** 案例:char[] arr={'a','b','c','d','e','f','g'};String a=String.copyValueOf(arr);//返回:abcdefg **/ 将字符串转成字符数组char[] toCharArray(); /** 案例:String str="abd dfsdof@43";char[] arrc=str.toCharArray();//遍历char[],在此省略。 **/将字节数组转成字符串 String(byte[]); String(byte[], offset, count); //将字节数组中的一部分转成字符串将字符串转成字节数组 byte[] getBytes();将基本数据类型转成字符串 static String valueOf(int); static String valueOf(double); /** 案例:转字符串3+"";String.valueOf(3);//2种相同,第一种常用,第二种专业 **/替换: String replace(oldchar, newchar); String replace(oldstr, newstr); /** 如果要替换的字符不存在,返回的还是原来的字符串 **/切割: String[] split(regex); 子串:(获取字符串中的一部分) String substring(begin); String substring(begin, end); /** 字符第一位是0; 包含头,不包含尾; 如果角标不存在,会出现字符串角标越界异常 **/ /** 案例1:获取整个字符串:String str="abcdefg";//方法一:String stra=str.substring(0, str.length()-1);//方法二:String strb=str.substring(0); **/将字符串转成大写或小写 String toUpperCase(); String toLowerCase(); 将字符串两端的空格去除 String trim(); //trim('倾慕)整齐,修剪对两个字符串进行自然顺序的比较 int compareTo(); /** 逐个比较ASCII码值:大于返回一个>=1的值;等于返回0;小于返回-1 **/对两个字符串进行连接 String concat(str);字符串格式占位符 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。 转换符 说明 示例 %s 字符串类型 "abc" %c 字符类型 'a' %b 布尔型 %d 十进制 %f 浮点型 %% 百分比 %n 换行符 %tx 日期与时间类型(x代表不同的日期与时间转换符) String str=String.format("Hi,%s:%s.%s", "王南","王力","王张"); System.out.println(str); 结果:Hi,王南:王力.王张 转换符说明示例 c 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007 F “年-月-日”格式 2007-10-27 D “月/日/年”格式 10/27/07 r “HH:MM:SS PM”格式(12时制)02:25:51 下午 T “HH:MM:SS”格式(24时制)14:28:16 R “HH:MM”格式(24时制) 14:28 Date date=new Date(); //c的使用 System.out.printf("全部日期和时间信息:%tc%n",date); //f的使用 System.out.printf("年-月-日格式:%tF%n",date); //d的使用 System.out.printf("月/日/年格式:%tD%n",date); //r的使用 System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date); //t的使用 System.out.printf("HH:MM:SS格式(24时制):%tT%n",date); //R的使用 System.out.printf("HH:MM格式(24时制):%tR",date); 全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012 年-月-日格式:2012-09-10 月/日/年格式:09/10/12 HH:MM:SS PM格式(12时制):10:43:36 上午 HH:MM:SS格式(24时制):10:43:36 HH:MM格式(24时制):10:43
2021年12月08日
151 阅读
0 评论
0 点赞
2021-12-08
通用Dao
package com.ly.dao.util;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Map.Entry;/** * @ClassName: Dao * @Description: TODO(通用Dao) * @author Uncle liu * @date 2018年5月24日 下午7:31:57 * */@SuppressWarnings({"unchecked","rawtypes"})public class Dao<T> {private Connection conn = null;private PreparedStatement ps = null;private ResultSet rs = null;/** * @param conn 要设置的 Connection */public void setConn(Connection conn) {this.conn = conn;}/** * @return conn */private Connection getConn() {return conn;} /** * * @Title: queryList * @Description: TODO(通用查询方法) * @param sql SQL语句 * @param params SQL语句中占位符的参数 * @param t 接受数据的对象 * @param m 设置对象属性接受位置,key为属性名,value为获得数据位置 * @return List<T> */public List<T> queryList(String sql, Object[] params,T t,Map<String, Integer> m) {//获得类对象Class c=t.getClass();//接收对象数据的集合List<T> li = new ArrayList<>();try {this.conn = getConn();this.ps = this.conn.prepareStatement(sql);//读参数if(params != null) {for (int i = 0; i < params.length; i++) {this.ps.setObject(i+1, params[i]);}}this.rs = this.ps.executeQuery(); while(this.rs.next()){ //实例化对象 T temp=(T)c.newInstance(); //通过Map.entrySet遍历key和value for (Entry<String, Integer> s : m.entrySet()) { String name = s.getKey(); Field field=c.getDeclaredField(name); name = name.substring(0,1).toUpperCase()+name.substring(1); Method method = c.getMethod("set"+name, field.getType()); try {method.invoke(temp, rs.getObject(s.getValue()));}catch (Exception e) {//如果不是对应基本数据类型和引用数据类型,就设置为String类型method.invoke(temp, rs.getString(s.getValue()));}} //添加对象进集合 li.add(temp); } return li;} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {close(this.conn, this.ps, this.rs);}return null;}/** * * @Title: queryList * @Description: TODO(通用查询方法) * @param sql SQL语句 * @param params SQL语句中占位符的参数 * @param path 接受数据的对象完整路径名 * @param m 设置对象属性接受位置,key为属性名,value为获得数据位置 * @return * @throws ClassNotFoundException List<T> */public List<T> queryList(String sql, Object[] params,String path,Map<String, Integer> m) throws ClassNotFoundException {//获得类对象Class c=Class.forName(path); List<T> li = new ArrayList<>();try {this.conn = getConn();this.ps = this.conn.prepareStatement(sql);//读参数if(params != null) {for (int i = 0; i < params.length; i++) {this.ps.setObject(i+1, params[i]);}}this.rs = ps.executeQuery(); while(this.rs.next()){ //实例化对象 T temp=(T)c.newInstance(); //通过Map.entrySet遍历key和value for (Entry<String, Integer> s : m.entrySet()) { String name = s.getKey(); Field field=c.getDeclaredField(name); name = name.substring(0,1).toUpperCase()+name.substring(1); Method method = c.getMethod("set"+name, field.getType()); try {method.invoke(temp, rs.getObject(s.getValue()));}catch (Exception e) {//如果不是对应基本数据类型和引用数据类型,就设置为String类型method.invoke(temp, rs.getString(s.getValue()));}} //添加对象进集合 li.add(temp); } return li;} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {close(this.conn, this.ps, this.rs);}return null;}/** * * @Title: executeUpdate * @Description: TODO(增、删、改的通用方法) * @param SQL语句 * @param params SQL语句中占位符的参数 * @return int */public int executeUpdate(String sql, Object[] params) {int result = -1;try {this.conn = getConn();this.conn.setAutoCommit(false);this.ps = this.conn.prepareStatement(sql);//读参数if(params != null) {for (int i = 0; i < params.length; i++) {this.ps.setObject(i+1, params[i]);} }result = this.ps.executeUpdate();this.conn.commit();} catch (Exception e) {// TODO: handle exceptiontry {this.conn.rollback();System.out.println("失败");} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}//throw new RuntimeException(e);} finally {close(this.conn, this.ps);}return result;}/** * * @Title: close * @Description: TODO(查询关闭连接) * @param con * @param ps * @param rs void */private static void close(Connection con,PreparedStatement ps,ResultSet rs) {try {if(!con.isClosed()&&con!=null) {con.close();}if(ps!=null) {ps.close();}if(rs!=null) {rs.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * * @Title: close * @Description: TODO(增删改关闭连接) * @param con * @param ps void */private static void close(Connection con,PreparedStatement ps) {close(con,ps,null);}}//-----------------------------测试package com.ly.Book.util;import java.util.HashMap;import java.util.List;import java.util.Map;import com.ly.Book.entity.Book;import com.ly.dao.util.Dao;/** * @ClassName: TestBook * @Description: TODO(Book测试) * @author Uncle * @date 2018年5月23日 下午3:21:20 * */public class TestBook { public static void main(String[] args) throws Exception { Map<String, Integer> m = new HashMap<>();m.put("bid", 1);m.put("bname", 2);m.put("bauthor", 3);m.put("byear", 4);m.put("bprice", 5);Dao<Book> b = new Dao<>();b.setConn(DBHelper.getCon());//数据库连接List<Book> allBook = b.queryList("select * from tb_book ORDER BY byear DESC", null, new Book(), m);for (Book book : allBook) { System.out.println(book);}}}
2021年12月08日
108 阅读
0 评论
0 点赞
2021-12-08
List集合的三种遍历方式及优缺点
List<String> li = new ArrayList<String>();li.add("1");li.add("2");li.add("3");li.add("4");//1.for//优点:效率最高,遍历快,可以根据自定计数器操作元素//缺点:不适用所有集合,每次都需要在应用程序中手动强转和额外的获得list.size,还有一个缺点就是遍历过程中不允许删除元素for (int i = 0; i < li.size(); i++) {System.out.println(li.get(i));}//2.迭代器// 优点:迭代器提供了操作元素的方法 可以在遍历中相应地操作元素//缺点:运行复杂,性能稍差,效率相对其他两种遍历方式较低Iterator<String> it = li.iterator();while(it.hasNext()){System.out.println(it.next());}//3.Foreach//优点:代码简洁,不易出错。//缺点:只能做简单的遍历,不能在遍历过程中操作(删除、替换)数据集合。for (String s : li) {System.out.println(s);}
2021年12月08日
112 阅读
0 评论
0 点赞
2021-12-08
亲测,解决文件上传C:\fakepath问题(图片上传格式限制)
function ii(obj){//解决C:\fakepath问题 var oFReader = new FileReader(); var file =obj.files[0]; oFReader.readAsDataURL(file); oFReader.onloadend = function(oFRevent){ var src = oFRevent.target.result; $('#turn_img').attr('src',src); }//判断图片格式 var fileName=obj.value; var suffixIndex=fileName.lastIndexOf("."); var suffix=fileName.substring(suffixIndex+1).toUpperCase(); if(suffix!="BMP"&&suffix!="JPG"&&suffix!="JPEG"&&suffix!="PNG"&&suffix!="GIF"){ alert( "请上传图片(格式BMP、JPG、JPEG、PNG、GIF等)!"); } }HTML<img id="turn_img" src="" /><input type="file" id="file" name="file_name" class="input w300" οnchange="ii(this);"/>
2021年12月08日
404 阅读
0 评论
0 点赞
2021-12-08
Map集合四种遍历方式
Map<Integer, String> map = new HashMap<Integer, String>();map.put(1, "a"); map.put(2, "b");map.put(3, "c");map.put(4, "d");map.put(4, "e");//第一种:通过Map.keySet遍历key和valuefor (Integer key : map.keySet()) {//根据键获得值String value = map.get(key);System.out.println(" key="+key+" value="+value);}//推荐 尤其容量大时//第二种:通过Map.entrySet遍历key和valuefor (Entry<Integer, String> s : map.entrySet()) {System.out.println("key="+s.getKey()+" value="+s.getValue());}//第三种:通过Map.values遍历所有valuefor (String s : map.values()) {System.out.println(s);}//第四种:通过Map.entrySet使用iterator遍历key和value//迭代器Iterator<Entry<Integer, String>> it = map.entrySet().iterator();while(it.hasNext()) {Entry<Integer, String> next = it.next();System.out.println("key="+next.getKey()+" value="+next.getValue());}
2021年12月08日
164 阅读
0 评论
0 点赞
2021-12-08
Collection集合框架
什么是集合框架集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。数组、对象数组、集合框架的特点与区别数组:用于存放同一基本数据类型(值类型)元素的组合对象数组:用于存放同一对象类型元素的组合集合框架:动态的数组对象集合只能存储对象,经常犯的错误:集合可以存储整型之类的基本数据类型,其实那是通过自动装箱,拆箱机制,转为了Integer对象。区别:数组不能动态扩张,定义时必须指定长度,长度不可变;集合则无需指定长度,可动态扩张,长度可变。为什么需要集合框架?如果不知道程序运行时需要多少对象,或者需要更复杂方式存储对象,可以使用集合框架。Collection集合框架用来存储和操作不同类型的对象组。集合框架的体系 Collection接口 Collection主要有三个子接口:Set——表示不允许有重复元素的集合List——表示允许有重复元素的集合Queue——队列,JDK1.5新增,与上面两个集合类主要是的区分在于Queue主要用于存储数据,而不是处理数据。队列是一种特殊的线性表,先进后出。Stack——继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。 List接口特点:(1)和数组类似,可以动态增长;(2)有序,对象可以重复;(3)查找元素效率高,插入删除元素效率低(会引起其他元素位置改变)。遍历方式:(1)下标(2)foreach(>=JDK 1.5)(3)迭代器Iterator优化:(1)默认长度为0,初始容量10,50%延长,相对节约空间。对应类有:ArrayList、LinkedList、Vector(1)ArrayList:动态数组,是线程不同步的,查询速度快,但是增删慢。优化:创建ArrayList的时候指定初始容量new ArrayList<>(50); //初始指定50长度增长方式:n*3/2+1(2)LinkedList:链表、队列、堆栈,查询慢,增删快。(3)Vector:是一种老的动态数组,是线程同步的,安全且效率很低,一般不赞成使用。长度为10,当超过10时,100%延长,变为20个(有点浪费空间)。Set接口特点:(1)无序,对象不可以重复(eqauls——eqauls从Object继承,默认比较的地址);(2)查找元素效率低,插入删除元素效率高(不会引起元素位置改变)。遍历方式:(1)foreach(2)迭代器对应类有:HashSet、TreeSet。(1)HashSet:以哈希表的形式存放元素,插入删除速度很快。(2)TreeSet:根据某种(规则)对里面的元素进行排序。规则1: java.lang.Comparable规则2: java.util.Comparator Map接口 特点:(1)无序、以键值对的形式添加元素,键不能重复,值可以重复遍历方式:(1)先取出保存所有键的Set,再遍历Set即可(2种)。(2)先取出保存所有Entry的Set,再遍历此Set即可。 快速遍历Map:遍历保存Entry,省略根据key取值 Map<String,String> map = new HashMap<String,String>(); Map.put.....; For(Map.Entry<String,String> entry : map.entrySet()){ System.out.println(entry.getKey()+” = ”+entry.getValue()); }对应类有:HashMap、TreeMap、Hashtable、LinkedHashMap(1)HashMap:根据键的HashCode值存储数据,查询快,最多允许一个键为NULL,多个值为NULL。线程不同步(2)Hashtable:与HashMap类似,但它不允许键或值为NULL。支持线程的同步(即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢)。(3)TreeMap:根据键排序(默认升序),也可指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。(4)LinkedHashMap:保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历 的时候会比HashMap慢。 Map并不是一个真正意义上的集合,但是这个接口提供了三种“集合视角”,使得可以像操作集合一样操作。 定义、增加、删除、修改、查找 Collections类排序//sort方法进行简单排序,默认升序Collections.sort(集合名称);//复杂对象排序List<Student> li = new ArrayList<>();li.add(new Student("5张三", 1, "男"));li.add(new Student("1张三", 1, "男"));li.add(new Student("2张三", 1, "男"));li.add(new Student("3张三", 1, "男"));li.add(new Student("4张三", 1, "男")); Collections.sort(li);//得在实体类继承Comparable,重写@Overridepublic int compareTo(Student o) { // TODO Auto-generated method stubreturn this.getName().compareTo(o.getName()); //根据姓名排序}反转//Collections.reverse(li);交换//Collections.swap(li, 0, li.size()-1);取最大最小//Collections.max(lc);//Collections.min(lc);复制Collections.copy(新集合, li);//注意复制时新的集合长度必须大于等于要复制的集合长度,如果长度为0时报错其它 5.1 Iterator(迭代器):遍历集合List/Set hasNext next remove:在遍历集合,并同时需要删除集合中的元素时,建议使用 Iterator.remove 5.2 java.lang.Comparable:自然排序接口 5.3 java.util.Comparator:比较器接口 5.4 Collections:工具类,提供一组静态方法操作Collection集合 Arrays:工具类,提供了一组静态方法操作数组泛型以类型作为参数的类就叫泛型。作用:提高程序健壮性,简化代码泛型的默认值是Object装箱、拆箱值类型->引用类型 装箱引用类型->值类型 拆箱JDK1.5之后引入了自动装箱及自动拆箱功能
2021年12月08日
154 阅读
0 评论
0 点赞
2021-12-08
Maven导入本地jar
Maven导入本地jar注:我第一次使用时必须联网,会下载一些东西,后面就不需要了 <--mvn install:install-file-Dfile=D:\smartupload.jar 文件全路径-DgroupId=sm 对应 groupId-DartifactId=smartupload 对应artifactId-Dversion=1.0 对应version-Dpackaging=jar 后缀--> mvn install:install-file -Dfile=D:\smartupload.jar -DgroupId=ss -DartifactId=smartupload -Dversion=1.0 -Dpackaging=jar如下图然后在pom.xml 添加 ↓ 并保存<dependency> <groupId>sm</groupId> <artifactId>smartupload</artifactId> <version>1.0</version></dependency>至此就可以在项目里看到导入的jar包
2021年12月08日
109 阅读
0 评论
0 点赞
2021-12-08
Maven中无法使用el表达式
如果在maven中访问项目页面使用EL表达式${999},显示出来的是${999}而不是999那么你该看看你的web.xml配置如果头部是 ↓ ↓ ↓ ↓<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >请把头部改成↓ ↓ ↓ ↓<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">在重启下项目,再次访问页面EL表达式${999}就可以显示为999
2021年12月08日
149 阅读
0 评论
0 点赞
1
2
3
4
...
20