目录
The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone
报错java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
怎么样在方法里面得到 Request,或者 Session?
SpringMVC从一个controller跳转到另一个controller的方法
1.MyBatis Generator自动生成的mapper只有insert方法
2.MyBatis Generator自动生成的实体类有一大堆奇奇怪怪的表
java: 不兼容的类型: java.lang.String无法转换为com.sun.org.apache.xpath.internal.operations.String
[Mybatis] java.lang.UnsupportedOperationException异常
如果文本框中是空的,那么request.getParameter得到的什么值?
dispatcherServlet拦截所有请求时,requestMapping中的请求路径没有打错,却报404错
报错:HttpServletResponse cannot be resolved to a type
Using a password on the command line interface can be insecure.
IDEA 'Error:java: 无效的源发行版: 10' 解决方案
IDEA错误:Cannot start compilation: the output path is not specified for module "poi". Specify the out
Unsupported major.minor version 52.0
javax.persistence.Table.indexes()
java.lang.OutOfMemoryError: Java heap space异常
The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone
错误原因:
使用原mysql5.1.38不会出现该问题
因使用了Mysql最新版驱动所以报错
解决方案:
方案1:在项目代码-数据库连接URL后,加上 (注意大小写必须一致)
?serverTimezone=UTC
jdbc:mysql://localhost:3306/loldb?serverTimezone=UTC
方案2:直接把新版本的mysql驱动改用回旧版本
参考:https://www.cnblogs.com/shanelau/p/7041293.html
tomcat安装-startup文件一闪而过
错误原因:
tomcat在启动时,会读取环境变量的信息,需要一个CATALINA_HOME 与JAVA_HOME的信息,CATALINA_HOME即tomcat的主目录,JAVA_HOME即java安装的主目录,jdk的主目录,本次我是缺少了JAVA_HOME环境变量
解决方案:
在系统环境变量中添加JAVA_HOME变量,变量值如上所述
参考:https://blog.csdn.net/znn626/article/details/7893555
报错java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
错误原因:
Spring V4.1.0+的版本在不支持Servlet3.0的应用服务器上跑时会报以下错误:
NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
比如说:tomcat 7以下的版本、jboss 4.2.3以下的版本
解决方案:
方案1:退回到Spring V4.0.7
方案2:升级应用服务器到支持Servlet3的应用服务器。(比如tomcat7+(最好是tomcat8+)、jboss as 7+)
参考:https://www.cnblogs.com/guanghuiqq/p/6639164.html
怎么样在方法里面得到 Request,或者 Session?
在方法的形参中声明HttpServletRequest
(注:前提需要Servlet-api包,否则会报Cannot resolve symbol错)
Spring+mybatis错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.
错误原因:
忘了使用@Param。当只有一个参数时,Mapper中可以不使用:
public void insertAdmin(String username);
但是有多个参数时必须用:
public void insertAdmin(@Param("username")String username,@Param("password")String password);
解决办法:
在方法的参数前加上@Param注解
参考:https://www.cnblogs.com/jpfss/p/6957647.html
SpringMVC从一个controller跳转到另一个controller的方法
错误原因:
方法返回值直接返回了"toLogin.do"
解决办法:
使用forward跳转,即将方法返回值改为"forward:toLogin.do"
1.MyBatis Generator自动生成的mapper只有insert方法
2.MyBatis Generator自动生成的实体类有一大堆奇奇怪怪的表
错误原因:
用了较高版本的mysql-connector驱动包导致的(坑)
解决办法:
换成较低版本的,本次换成了5.1.21后就不再有这些问题
清空session中保存的内容
问题背景:
不知道如何清除session里保存的所有内容
解决办法:
- 用getAttributeNames来得到所有属性名,然后再removeAttribute
private void initSession(HttpServletRequest request){ Enumeration em = request.getSession().getAttributeNames(); while(em.hasMoreElements()){ request.getSession().removeAttribute(em.nextElement().toString()); } }
- 直接使用session.invalidate()是让SESSION失效
参考:https://www.cnblogs.com/ning-blogs/p/4670049.html
equals和==在用于String类型时的区别
问题背景:
做用户名匹配时逻辑表达式写的user.getName()=="test",而返回值却是false
解决办法:
在Java中,String类型在使用==进行判断时并非判断两个字符串的值,而是判断两个字符串存放的地址是否相同
而使用equals进行判断时则是判断两个字符串的值是否相同
故此处改为user.getName().equals("test")后返回true
其余数据类型的==和equals区别参考此博客:https://www.cnblogs.com/dolphin0520/p/3592500.html
SpringMVC的forward和redirect
参考:https://blog.csdn.net/lxn39830435731415926/article/details/46434241
在项目中修改了js/css文件,重部署调试项目时却不刷新
问题背景:
做了一个表单验证的js,但是判断语句打错了,反复在后台修改,页面上反馈始终无果,得知是js文件没有刷新
解决办法:
1)Ctrl+F5,清除浏览器缓存(等同于浏览器-->历史数据-->删除cookies)注意:如果是利用F12中的Disable cache,则需要F12打开控制台才能生效
2)在js或css后加版本号,这时候浏览器客户端会认为这是不同版本的js或者css文件,会自动重新刷新下载(浏览器会缓存下载页面js和css文件)(对应我选择的解决办法)
2.1)形如:.css?v=x 或者 css?version=x <link rel="stylesheet" href="xx/xx.css?version=x.x.x" type="text/css" />
2.2)形如:.js?v=x 或者 css?version=x <script type="text/javascript" src=../...js?v=x ></script>
3)使用gulp等进行前端构建(不太明白什么是gulp)
参考:https://www.cnblogs.com/hihao/p/6502745.html
JSP页面向Servlet传值方法
问题背景:
单纯知识点记录
解决办法:
①超链接,在href='servletAction?id=xxx'(多个参数时格式如下 servletAction?param1=xxx¶m2=xxx&...)
②form表单提交,当点击submit时,action="servletAction" method='get/post'
③就是利用ajax,url='servletActionz',当然了,这里也有get和post两种情况,get直接在url后面加问号传参,post会把参数放在实体内容里面。
以上方法,在servlet那边 用 request.getParameter("参数名");就可以拿到了
java: 不兼容的类型: java.lang.String无法转换为com.sun.org.apache.xpath.internal.operations.String
问题背景:
一次操作后整个Class的String类参数、方法等等全部“见红”,后来发现是导入String包时误导入了apache的String包而不是java自己的String包(怪尴尬的哈哈哈)
解决办法:
把apache的String包导入删掉就可以啦,记得把java自己的导进来
[Mybatis] java.lang.UnsupportedOperationException异常
问题背景:
做从数据库取所有用户信息时,在UserMapper.xml文件写了一条查询如下
(代码1)
<select id="getAllUser" resultType="java.lang.List">
select *
from user
</select>
在之后的代码中调用了它对应的实现方法后如题报错
解决办法:
看到resultType中的值了吗?因为select所有信息,所以取出来的肯定是一个List,List集合中存放的是实体User对象。
如果sql语句是
(代码2)
select userid from user
我们知道resultType要写 java.lang.Integer,因为查出来的肯定是一个整数数据集合。那么如代码1一般的查找,查出来的是个List,所以resultType不就自然就要写List了吗?
不是的!
resultType表示的是返回的内容的数据类型,查id,返回整型,所以是java.lang.Integer。查全部,返回的是存着许多个User对象的List,但并不是写java.lang.List!而应该写User实体类所在的位置,我的User类在domain包下,所以此处写 domain.User,告诉它接下来返回集合装的是User对象
总结:
resultType该写的是集合存放的元素的类型,而不是集合自己
记录一个好玩的题外小知识
前端页面中如何使用emoji?
参考:https://blog.csdn.net/z69183787/article/details/77573575
emoji代码大全:http://www.oicqzone.com/tool/emoji/
java中List集合为空与List集合为null的区别
问题背景:
从数据库取出数据时,SQL语句有where判断,因此会有取出0条数据的可能。于是在项目中写了如果取出0条数据(即集合为空)的话进行一些操作
//声明List时是这样声明的
//getUsersByClassId返回类型为List<User>
List<User> testList = userServiceImpl.getUsersByClassId(101);
if(testList==null){
//进行一些操作
}
然鹅,即使我进行了绝对取出0条数据的测试操作,运行时if语句里的内容始终不会运行
问题原因:
查阅网上资料后发现如下
List==null 和 List.size()==0 是两码事
引用
举个形象的例子,我有一个空着的水杯(list),而你没有,那你是null,我的size为0。你想装水就需要自己去买个水杯(new ArrayList();),但是我就可以直接装水(list.add(水))。你要是没有杯子直接倒水,水就流出去啦(空指针异常)。判断
那么,我们什么时候用null,什么时候用isEmpty()或list.size()呢?空集合
isEmpty() 或者(list.size() == 0)用于判断List内容是否为空,即表里一个元素也没有, 但是使用isEmpty()和size()的前提是,list是一个空集合,而不是null,所以为了避免异常,建议在使用或赋值list集合之前,做一次空集合创建处理,进行内存空间分配,即:List list2 = new ArrayList();
list.isEmpty()和list.size()==0 没有区别, isEmpty()判断有没有元素,而size()返回有几个元素,如果判断一个集合有无元素,建议用isEmpty()方法. 这清晰,简明null判断
list等于null,可理解为没有对list集合分配内存空间,实际上压根就不存在。
参考:https://blog.csdn.net/changqing5818/article/details/52373569
EL表达式获取Map/List集合中的值
问题背景:
纯知识点记录
知识点:
Map
1.当Map的键是String类型时
1.1使用${map1["a"]}或${map1.a}取值
//后台部分
Map<String, String> map1 = new HashMap<String, String>();
map1.put("a", "b");
map1.put("aa", "bb");
map1.put("aaa", "bbb");
//前台部分,两个都可以
${map1["a"]}
${map1.a}
//返回
b b
1.2使用jstl的<forEach>标签取值(原作者表示不清楚为什么输出顺序和设定键值对顺序不同)
<c:forEach items="${map1}" var="item">
key:<c:out value="${item.key}" />
value:<c:out value="${item.value}" /> <br/>
</c:forEach>
返回
key:aa value:bb
key:aaa value:bbb
key:a value:b
2.当Map的键是Integer类型的时候
HashMap<Integer, String> map2 = new HashMap<Integer, String>();
map2.put(1, "b");
map2.put(2, "bb");
map2.put(3, "bbb");
2.1使用EL表达式取值
使用${map1[1]}或${map1.1}(这种写法直接就是错误的)取值均无法取到!
原因如下:
EL表达式在解析Integer类型数字的时候,会自动把数字转换成Long类型,后台使用Integer类型作为key值,进行判断的时候Integer与Long对象不相等。导致无法取出key值
解决办法:
把Map的键改成Long型就好了
List(无论List中存放的是String或是Integer,以下两种方式都可以成功取到值)
后台代码:
List<String> list1 = new ArrayList<String>();
list1.add("a");
list1.add("b");
list1.add("c");
list1.add("d");
前台使用EL表达式取值:
${list1[下标]}
例如
${list1[1]}
输出
a
使用forEach取值
<c:forEach items="${list1 }" var="item">
<c:out value="${item}"></c:out> <br/>
</c:forEach>
输出
a
b
c
d
参考:https://www.cnblogs.com/huangwenjie/p/5724102.html
参考:https://blog.csdn.net/qq1012421396/article/details/62444429
java中string和int互相转化
参考: https://blog.csdn.net/memray/article/details/7312817/
讲得很清楚,还有一些区别和原理
java向上向下取整方法的问题
问题背景:
做分页时时使用 总条数 ÷ 每页数据量 并向上取整的方法求总页数,但发现每次都少了一页,后发现是ceil中参数给了两个int型去除
int totalRecords = 100;
int totalPages = Math.ceil( totalRecords / 6);
解决办法:
查了帮助手册
ceil方法中参数要求为double型参数,而我的参数中给出的是两个int型取商数,取出的是整型。而ceil返回的是离所给double类型参数最近的第一个整数,如果参数里直接给了一个int型的数据,并不会报错,且会正确返回,返回值为参数自己。因此我们只需要把 totalRecords 或者 6 这两个整型数据随便将之一转换为double型即可正确返回向上取整
int totalPages = Math.ceil( totalRecords / 6.0);
如果文本框中是空的,那么request.getParameter得到的什么值?
问题背景:
无,纯知识点记录。
记录内容:
得到的是""(空值),不是null
如果文本框被DISABLED了,则是NULL
参考:https://bbs.csdn.net/topics/70145022
dispatcherServlet拦截所有请求时,requestMapping中的请求路径没有打错,却报404错
问题背景:
web.xml中配置dispatcherServlet的url-pattern为
<url-pattern>/*</url-pattern>
controller中内容为
@Controller
public class RequestController {
@RequestMapping("testRequest")
@ResponseBody
public String test(){
return this.toString();
}
}
tomcat中应用上下文(application context)内容为
/class008
路径为
http://127.0.0.1:8080/class008/testRequest
结局:报错404
错误原因:
首先了解url-pattern的匹配规则:
servlet容器会先从路径中去掉应用上下文,然后把剩下的部分作为url映射
那么此处我们的应用上下文内容是“/class008”,我们的url是“127.0.0.1:8080/class008/testRequest”。
dispatcherServlet接收到此url后,去掉应用上下文部分(/class008),剩下了"/testRequest"。
因为dispatcherServlet拦截"/"后的所有内容,
所以剩下的"/testRequest"成功被dispatcherServlet拦截并在controller中寻找对应的mapping,
而我们的mapping中匹配的是"testRequest"而不是"/testRequest"(多了一个斜杠),
因此对应不上这个mapping,
但也没有别的mapping和它匹配,因此就报了404错
解决办法:
把应用上下文的内容由
/class008
改成
/class008/
这样在去掉上下文后剩下的就是"testRequest"了,就可以成功匹配上mapping并显示返回内容了
参考:https://www.cnblogs.com/51kata/p/5152400.html
IDEA编译器创建web项目时没有web.xml文件
参考:https://blog.csdn.net/wjc19871222/article/details/79667375
Eclipse编译器安装SVN的几种方式
参考:https://www.cnblogs.com/alamps/p/6155963.html
报错:HttpServletResponse cannot be resolved to a type
环境:
Eclipse编译器
问题原因:
没有配置Tomcat服务器
解决办法:
Window->Preferences->Server->Runtime Environment配置好Tomcat
详细配置流程参考:https://blog.csdn.net/qq_41665015/article/details/82921478
mysql导入数据时报:
Using a password on the command line interface can be insecure.
参考:https://blog.csdn.net/tksnail/article/details/79696066
乐观锁、悲观锁的解释和实现原理
篇幅较长,参考:https://www.cnblogs.com/cyhbyw/p/8869855.html
IDEA 'Error:java: 无效的源发行版: 10' 解决方案
问题原因:
主机JDK版本与项目语言级别不同造成的
例如:本机JDK是1.8版本,但项目语言级别是10或是7
解决办法:
将二者对应起来就好,1.8JDK就对应级别8,1.7对应级别7
IDEA错误:Cannot start compilation: the output path is not specified for module "poi". Specify the out
问题原因:
没有设置项目的output路径造成的
解决办法:
设置output路径,项目路径+/out即可
Unsupported major.minor version 52.0
问题原因:
你项目用JDK1.8运行过,现在又在本地的eclipse等开发工具或者本地环境变量为低版本的jdk1.7或者jdk1.6下运行
解决办法:
stanford parser和jdk版本对应关系如下:
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
改一下JDK版本至对应即可
参考:https://www.cnblogs.com/jpfss/p/9036645.html
java中int型和Long型的互相转换
一.将long型转化为int型,这里的long型是基础类型:
long a = 10; int b = (int)a;
二.将Long型转换为int 型的,这里的Long型是包装类型:
Long a = 10; int b=a.intValue();
三.将int型转化为long型,这里的int型是基础类型:
int a = 10;long b = (int)a;
四.将Integer型转化为long型,这里的Integer型是包装类型:
int a = 10;Long b = a.longValue();
参考:https://www.cnblogs.com/zhangzongle/p/5866594.html
javax.persistence.Table.indexes()
本问题步骤较为繁琐,请直接查阅此文章
https://my.oschina.net/JasonZhang/blog/539095
java.lang.OutOfMemoryError: Java heap space异常
这个问题是由于内存不足引起的,所以大部分情况下,将内存扩大基本就能解决。扩大步骤如下:
方法一:
找到eclipse/eclipse.ini,打开,在其上加上
-vmargs
-Xms128m
-Xmx512m
-XX:permSize=64M
-XX:MaxPermSize=128M
方法二:
打开eclipse,选择Window--Preferences--Java--Installed JREs,在右边选择前面有对勾的JRE,单击Edit,出现一个EditJRE的对话框,在其中的Default VM Arguments框中输入-Xms128m -Xmx512m。
这样设置java虚拟机内存使用最小是128M,最大是512M。
参考:https://bbs.csdn.net/topics/390411231
3楼的回答
如果以上情况无法解决问题,附上全面一些的解析:http://outofmemory.cn/java/OutOfMemoryError/PermGen-space-Java-heap-space-unable-create-new-native-thread
Spring 的@Column 注解 及其属性参数
http://www.360doc.com/content/14/0409/16/10630456_367528401.shtml
HTTP动词中,PATCH和PUT的区别
patch
方法用来更新局部资源,这句话我们该如何理解?
假设我们有一个UserInfo
,里面有userId
, userName
, userGender
等10个字段。可你的编辑功能因为需求,在某个特别的页面里只能修改userName
,这时候的更新怎么做?
人们通常(为徒省事)把一个包含了修改后userName
的完整userInfo
对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且真心浪费带宽(纯技术上讲,你不关心带宽那是你土豪)。
于是patch
诞生,只传一个userName
到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。
而put
虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象,理论上说,如果你用了put
,但却没有提供完整的UserInfo
,那么缺了的那些字段应该被清空
补充:
最后再补充一句,restful
只是标准,标准的意思是如果在大家都依此行事的话,沟通成本会很低,开发效率就高。但并非强制(也没人强制得了),所以你说在你的程序里把方法名从put
改成patch
没有任何影响,那是自然,因为你的后端程序并没有按照标准对两个方法做不同处理,她的表现自然是一样的
SpringBoot 部署项目正常但访问报404
在使用Spring官网提供的快速创建项目向导后,SpringBoot的启动类一般会放在src/main/java/<项目名>包下,此时要留意你的controller、service、dao等包是否也在此文件夹下,如不在,则将启动类拉出与dao等包同级,因为启动类会扫描该类所在包下的所有类
SpringBoot整合Mybatis,部署项目时报找不到Mapper文件错
在启动类中加上注解@MapperScan("包所在位置")
例如
@MapperScan("xxx.xxx.dao")