这里记录一些自己入行初期遇到的小问题
1.java的String类常用切割方法:
split()和subString(),split返回的是字符串数组,subString返回的是String。
关键点:对字符串进行切割或其他操作对象的,要先判断这个对象是否存在,否则报空指针。
StringUtil.isNotBlank();和 StringUtil.isNotBlank();
二者区别在于字符串是空格时,isNotBlank判断为空,而isNotEmpty判断不为空。
isNotEmpty(str)等价于 str != null && str.length > 0
isNotBlank(str) 等价于 str != null && str.length >0 && str.trim().length > 0
String str = "Hello World,i am your friend,nice to meet you!";
//切割成三个元素
str.split(",");// 1.Hello World 2.i am your friend 3.nice to meet you!
//2表示根据切割符切割成几份,结果切割成两个元素
str.split(",",2);//1.Hello World 2.i am your friend,nice to meet you!
//截取序号6之后的
str.substring(6);//World,i am your friend,nice to meet you!
//截取序号[6,11)中的,java包前不包后,所以序号11的逗号不包括。
str.substring(6,11);//World
关于JS中对字符串切割可自行百度:https://www.cnblogs.com/qj0813/p/5110211.html
关于长度。数组是length属性,String是length()方法,集合是size()方法
2.数据库语句命名
DQL :Data Query Language 数据查询语言,查
DCL:controller
DML:Data Manipulation Language 数据操纵语言,增、删、 改
DDL:Data Difination Language 数据定义语言,对数据库对象的操作,表结构、视图、索引等
https://www.cnblogs.com/fan-yuan/p/7879353.html
3.struts 实体类要有get方法,值栈才能获取到值
https://blog.csdn.net/qq_27376871/article/details/51240321
https://blog.csdn.net/Nickthink/article/details/52106229 Struts2中值栈的理解
4.spring中用了注解@Resources、@Autowired,就不要再写get、set方法了
@Autowired是spring包的,根据类型查找
@Resources是J2EE的,默认根据name查找再根据type查找
建议使用resources J2EE的,减少代码与spring的耦合
https://www.cnblogs.com/xiaoxi/p/5935009.html
https://www.cnblogs.com/xdp-gacl/p/3495887.html 孤傲苍狼
5.jquery、js相关方法
$().each(function(i,var){}) 遍历
eval(); 将对象转化成json对象,一般用于异步请求返回的json类型字符串
6.EL表达式不能用。
在<page>指令中加 isELIgnored="false",原因暂未了解。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
7.获取上下文路径
这样请求地址中就不需要再写上下文了
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
8.int相除得到的是int,小数要double或者X.0
System.out.println(3/5);//0
System.out.println(3.0/5.0);//0.6
System.out.println(5/3);//1
System.out.println(5.0/3.0);//1.6666666
9.Ajax后,要在ajax请求后加 return false,防止表单二次提交,也是ajax跳入error回调函数的原因
之前搞不懂登录成功后怎么一直会去数据库查询两次,一次进入sucess函数一次就进入error函数
layui.use(['form','jquery','layer'], function () {
var form = layui.form;
var $ = layui.jquery;
var layer = layui.layer;
$(".login-btn").click(function(){
var username = $("#username").val();
var password = $("#password").val();
var remember = $("#remember").prop("checked");
$.ajax({
type:"POST",
url:"userAjaxLogin",
data:{'username':username,'password':password,'remember':(remember?1:0)},
dataType:"text",
success:function(mess){
if(mess){
layer.msg(mess, {
time: 5000, //5s后自动关闭
btn: [ '知道了'],
offset: '200px',
area: ['250px', '130px'],
icon: 5
});
return false;
}else{
window.location="admin/index.html";
}
},error:function(){
layer.msg('网络异常,请尝试重新刷新!', {
time: 5000, //5s后自动关闭
btn: [ '知道了'],
offset: '200px',
area: ['260px', '130px'],
icon: 5
});
}
})
return false;//这个很关键,要在ajax外面加
});
});
参考:https://blog.csdn.net/yangliu4683/article/details/78424299
https://www.cnblogs.com/zgrft/p/4383776.html 设置同步没试过
10.作为专业码农,集合等要给泛型
泛型,查询的什么数据就给什么泛型,让人一看就懂是什么数据
实际web项目中,里面泛型就是我们的实体类
List<Article> articles = new ArrayList();//泛型,查询的什么数据就给什么泛型,让人一看就懂是什么数据
List<User> articles = new ArrayList();
List articles = new ArrayList();//这个就是很不专业的码农,因为这个给老大diao了
11.表单与ajax冲突,post请求变成get请求
form表单如果method没有设置get、set,默认是get请求提交的,我们ajax设置的type:“post”,并不能改变表单的method。
所以即使form表单中ajax设置post,表单提交也是get请求,但是此时的ajax确实是post请求的,只是因为此时ajax提交后,表单又提交了一次,所以我们只看到get请求。这个要多看浏览器工具F12中的请求头。(学会使用浏览器的工具还有debug打点很使用)
解决方法和9.Ajax后,要在ajax请求后加 return false,防止表单二次提交,也是ajax跳入error回调函数的原因 一样,在ajax请求后加return false,阻止表单二次提交。
方法二百度的没试过:
---------------------------------------------------------------------
(三)这个也是我遇到的问题,我在写了一个form标签,然后用submit的onclick事件去处理ajax响应,其中form的action=”。这个时候每点击一次submit,系统提示一次我的ajax object找不到,或者其它不相干的错误。调试JavaScript也是出现status=0的问题。我用普通的button代替submit button问题就解决了。
原文: https://blog.csdn.net/wabiaozia/article/details/60761433
-----------------------------------------------------------------------
http://blog.sina.com.cn/s/blog_7ffb8dd501013kdm.html form表单中method的get和post区别
12.js、jquery常用方法
remove() 是清除这个元素 empty()是清除这个元素的子元素
<div id="div1"><div id="div2"><div> <div>
$("#div1").remove();//清除所有都没了
$("#div1").empty();//清除div2 <div id="div1"><div>
隐藏元素
show() hide() toggle():显示被隐藏的,隐藏已显示的
$("#div11").css( 'visibility','hidden');//隐藏的元素在网页上所占的空间不变,还在占据着位置
$("#div11").css( 'display','none');//彻底隐藏,没有占位,看不见摸不着
$("#div11").hide();//彻底隐藏,没有占位,看不见摸不着
<div id="div11">测试区域<div/>
$("#div11").css( 'visibility','hidden');
$("#div11").css( 'display','none');
$("#div11").hide();
jquery和dom的转换
jquery对象的第一个元素是DOM元素 →→ $("#id")[0]
dom →→ jquery对象 $(dom元素)
13.EL表达式错误
c:if test="${? == ?}"这个就是正确的
c:if test=" ${? == ?}"这个就是错误的,在EL表达式前面多了个空格
14.JS forin遍历
for(var x in y)
for(x in y)
<!DOCTYPE html>
<meta charset="UTF-8">
<script>
var x;
var zoon = new Array();
zoon[0] = "猫猫";
zoon[1] = "狗狗";
zoon[2] = "猪猪";
for (x in zoon){
console.log(zoon[x]);
}
var student={};
student.name="张三";
student["age"]=20;
for(var i in student)//前面变量i就是对象的属性名
{
console.log(i);//name age
console.log(student[i]);//张三 20
}
</script>
https://blog.csdn.net/iteye_17658/article/details/82671449
15.JS全局变量
var a = 10;//全局变量
var test = function(){
num = 50;//不加var 就会把变量提升为全局变量
var num2 = 30;//局部变量
alert(num);
alert(num2);
}
16.js所谓的重载是后面的方法覆盖前面的方法
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
function test(num){
alert("1111");
}
function test(num,num2,num3){
alert("222");
}
function test(num,num2){
alert("333");
}
test(10,20,30);//调用哪个方法?调用test(3)
//js所谓的重载是后面的方法覆盖前面的方法
</script>
</head>
<body>
</body>
</html>
要如java般实现重载,可判断参数的个数执行函数
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
//实现函数的重载 arguments是参数个数
var test = function(){
//判断参数个数
if(test.arguments.length == 1){
alert("111");
}else if(test.arguments.length == 2){
alert("2222");
}
}
test(10,20);
</script>
</head>
<body>
</body>
</html>