文章目录
关于IDEA控制台中文乱码,问题
首先是设置一下idea自己文件编码对解决此问题没啥帮但最好设置上
设置idea的服务器tomcat参数
修改idea的默认编解码HELP->Edit Custom VM OPtions中加 -Dfile.encoding=utf-8
406 异常
发生这样的异常就有一种可能,就是我们在使用ajax异步请求时,发送json数据我们的后端对应的接口地址却是****.html就会引发这样的异常。
解决办法很简单,只要把接口地址改一下,让其不带.html即可
@RequestMapping("/send/compose/javabenandresult/fuza.html")
修改后
@RequestMapping("/send/compose/javabenandresult/fuza")
在ssm中使用分页PageHelper的方式
<!--配置sqlSessionFactoryBean整合mybatis-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--指定mybatis全局配置文件的位置-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--指定mapper.xml配置文件的位置-->
<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>
<!--装配数据源-->
<property name="dataSource" ref="dataSource"/>
<!--配置插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<!--告诉pagehelper当前使用的数据库-->
<prop key="dialect">mysql</prop>
<!--配置页面的合理化修正-->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
logback 日志问题
这样配置日志可是方便调试,问题出现在第几行我们都可以定位到但是不建议会影响速度
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] (%file:%line\) [%msg]%n</pattern>
标准配置
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
zTree使用
这个地址有例子
http://www.treejs.cn/v3/donate.php
我们可以看到这个例子是给我们嵌入到一个iframe里面所我们右键查看框架源代码,嘿嘿就可以看到人家是怎么写的了。
下面我们开始,注意这个我们一定要使用jquery而且jquery的js导入的位置一定要zTree前面导入。
<%--这个ul标签是ztree动态生成的节点所依附的静态节点--%>
<ul id="treeDemo" class="ztree"></ul>
<script type="text/javascript">
$(function (){
// 创建json对象用于存储对ztree所有的设置
var setting ={};
var zNodes =[
{ name:"父节点1 - 展开", open:true,
children: [
{ name:"父节点11 - 折叠",
children: [
{ name:"叶子节点111"},
{ name:"叶子节点112"},
{ name:"叶子节点113"},
{ name:"叶子节点114"}
]},
{ name:"父节点12 - 折叠",
children: [
{ name:"叶子节点121"},
{ name:"叶子节点122"},
{ name:"叶子节点123"},
{ name:"叶子节点124"}
]},
{ name:"父节点13 - 没有子节点", isParent:true}
]},
{ name:"父节点2 - 折叠",
children: [
{ name:"父节点21 - 展开", open:true,
children: [
{ name:"叶子节点211"},
{ name:"叶子节点212"},
{ name:"叶子节点213"},
{ name:"叶子节点214"}
]},
{ name:"父节点22 - 折叠",
children: [
{ name:"叶子节点221"},
{ name:"叶子节点222"},
{ name:"叶子节点223"},
{ name:"叶子节点224"}
]},
{ name:"父节点23 - 折叠",
children: [
{ name:"叶子节点231"},
{ name:"叶子节点232"},
{ name:"叶子节点233"},
{ name:"叶子节点234"}
]}
]},
{ name:"父节点3 - 没有子节点", isParent:true}
];
// 初始化树形结构 setting:设置 zNodes:树形结构数据
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
});
</script>
看一下效果!
这就和人家的案例就一摸一样了。
关于JQuery
对于我这个渣渣来讲$("#"+spanId)
?
这是啥,看不懂呀$("#spanId")
这样是id选择器但是上面那个是啥?其实上面那个也是id选择器,只不过这个选择选择的标签id被拼装成了字符串所有要这样写!下面我们看一下例子:
<div id="my_div_01">adc</div>
<div id="my_div_02">adc</div>
<script type="text/javascript">
$("#my_div_01");
var id = "my_div"+"_02";
$("#"+id);
</script>
这例子里面使用的都是id选择器,只是第一个我们直接是去的标签的元素属性值,而第二个使我们拼装出来的id值,当然这个id值也是真是存在的!
Vue记录
mounted()
mounted在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。
计算属性
计算属性的重点突出在属性两个字上(属性是名词),首先它是个属性其次这个属性有计算的能力(计算是动词),这里的计算就是个函数:简单点说,它就是一个能够将计算结果缓存起来的属性(将行为转化成了静态的属性),仅此而已;可以想象为缓存!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--view层,模板-->
<div id="app">
<p>currentTime1:{{currentTime1()}}</p>
<p>currentTime2:{{currentTime2}}</p>
</div>
<!--1.导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
message:"pan"
},
methods:{
currentTime1:function(){
return Date.now();//返回一个时间戳
}
},
computed:{
currentTime2:function(){//计算属性:methods,computed方法名不能重名,重名之后,只会调用methods的方法
this.message = "neon";
return Date.now();//返回一个时间戳
}
}
});
</script>
</body>
</html>
注意:methods和compute里的东西不能冲名
- methods 定义方法,调用currentTime1()需要带括号
- computed 定义计算属性,调用属性使用currentTime2,不需要带括号this.message是为了能够让currentTime2观察到数据变化而变化
结论:
调用方法时,每次都需要讲行计算,既然有计算过程则必定产生系统开销,那如果这个结果是不经常变化的呢?此时就可以考虑将这个结果缓存起来,采用计算属性可以很方便的做到这点,计算属性的主要特性就是为了将不经常变化的计算结果进行缓存,以节约我们的系统开销;
uni-app picker日期选择器和时间选择器的用法
点击后:
<view class="item">
<view class="tit">选择时间</view>
<picker class="picker date" mode="date" :value="date" :start="startDate" :end="endDate" @change="bindDateChange">
<view>{{ date }}</view>
</picker>
<picker class="picker" mode="time" :value="timeStart" start="09:01" end="21:01" @change="bindTimeStart">
<view class="uni-input">{{ timeStart }}</view>
</picker>
-
<picker class="picker" mode="time" :value="timeEnd" start="09:01" end="21:01" @change="bindTimeEnd">
<view class="uni-input">{{ timeEnd }}</view>
</picker>
</view>
data() {
const currentDate = this.getDate({
format: true
});
return {
date: currentDate,
timeStart: '14:00',
timeEnd: '16:00'
};
},
computed: {
startDate() {
return this.getDate('start');
},
endDate() {
return this.getDate('end');
}
},
methods: {
// 选择时间 日期
bindDateChange: function(e) {
this.date = e.target.value;
},
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
},
// 开始时间
bindTimeStart:function(e){
this.timeStart = e.target.value;
},
// 结束时间
bindTimeEnd:function(e){
this.timeEnd = e.target.value;
},
}
在windows本地安装redis并进行链接
遇到的问题
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
Redis服务器没有设置密码,但客户端向其发送了AUTH(authentication,身份验证)请求。
redis.windows.conf 文件,用文本编辑工具打开文件,找到“requirepass”,去掉注释设置密码。
绑定主机:bind 127.0.0.1
绑定密码:requirepass redis123
绑定端口号:port 6380
启动命令使用
redis-server.exe redis.windows.conf
浏览器的localStorage
在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。
下面看一下我们程序中使用到的
export function levelFilter(status) {
if(!status){
return ''
}
let arrayList = JSON.parse(localStorage.getItem('levelKey'));
let array = arrayList.filter(item => status === item.id)
if(array.length){
return array[0].name
}else{
return ''
}
}
// 等级列表
levelLists () {
levelListApi({ page: 1, limit: 9999}).then(async res => {
this.levelList = res.list
localStorage.setItem('levelKey', JSON.stringify(res.list))
})
},
我们还需要注意一下,这个只是我们使用的一种方式,其实还有很多种使用方式,我们就不都写完了,最后我们下次想使用的时候,直接去查网上就会找到很多
记一次vue前端发送post请求问题
我们先看一下标准的
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import SettingMer from '@/utils/settingMer'
import { isPhone } from "@/libs/wechat";
// create an axios instance
const service = axios.create({
baseURL: SettingMer.apiBaseURL, // url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 20000 // request timeout
})
// request interceptor
service.interceptors.request.use(
config => {
// do something before request is sent
const token = !store.getters.token?sessionStorage.getItem('token'):store.getters.token;
if (token) {
// let each request carry token
// ['X-Token'] is a custom headers key
// please modify it according to the actual situationf
config.headers['Authori-zation'] = token
}
if(/get/i.test(config.method)){
config.params = config.params || {}
config.params.temp= Date.parse(new Date()) / 1000
}
return config
},
error => {
// do something with request error
return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response => {
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (res.code === 401) {
// to re-login
MessageBox.confirm('您已经登出,您可以取消停留在这个页面,或重新登录', '退出', {
confirmButtonText: '或重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
if (res.code !== 200 && res.code !== 401) {
if (isPhone()) { //移动端
return Promise.reject(res || 'Error')
}
Message({
message: res.message || 'Error',
type: 'error',
duration: 5 * 1000
})
return Promise.reject()
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
// return Promise.reject(new Error(res.message || 'Error'))
} else {
return res.data
}
},
error => {
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
export default service
get
export function statisticsDataApi(params) {
return request({
url: `/admin/store/order/statisticsData`,
method: 'get',
params
})
}
export function writeConfirmOrderInfoByVerifyCodeApi(vCode) {
return request({
url: `/admin/store/order/writeConfirmOrderInfoByVerifyCode/${vCode}`,
method: 'get'
})
}
post
export function writeUpdateOrderInfoByOrderInfoIdApi(data) {
return request({
url: `/admin/store/order/writeUpdateOrderInfoByOrderInfoId`,
method: 'post',
data
})
}
犯了错的
export function writeUpdateOrderInfoByOrderInfoIdApi(params) {
return request({
url: `/admin/store/order/writeUpdateOrderInfoByOrderInfoId`,
method: 'post',
params
})
}
注意:
我们使用post请求时一定是data,不然发出去的就不对!,后面的接口根本解析不了数据,虽然接口是可以通的!
常看linux剩余空间
df /data -kh
使用逆向工程
- 创建数据库表
CREATE DATABASE project_crowd CHARACTER SET utf8;
USE `project_crowd`;
DROP TABLE IF EXISTS t_admin;
CREATE TABLE t_admin
(
id INT NOT NULL AUTO_INCREMENT, # 主键
login_acct VARCHAR(255) NOT NULL, # 登录账号
user_pswd VARCHAR(32) NOT NULL, # 登录密码
user_name VARCHAR(255) NOT NULL, # 昵称
email VARCHAR(255) NOT NULL, # 邮件地址
create_time VARCHAR(19), # 创建时间
PRIMARY KEY (id)
);
- 在工程中添加依赖修改build
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
- 在项目的resources下创建generatorConfig.xml文件
generatorConfig.xml
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- mybatis-generator:generate -->
<context id="atguiguTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是;false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.1.240:3306/project_crowd"
userId="root" password="123456">
</jdbcConnection>
<!-- 默认 false,把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true 时把
JDBC DECIMAL
和 NUMERIC 类型解析为 java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成 Entity 类的路径 -->
<javaModelGenerator targetProject=".\src\main\java" targetPackage="com.atguigu.crowd.entity">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:XxxMapper.xml 映射文件生成的路径 -->
<sqlMapGenerator targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:Mapper 接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
<table tableName="t_admin" domainObjectName="Admin" />
</context>
</generatorConfiguration>
- 最后执行指令即可
mybatis-generator:generate
或者
遇到的问题
IDEA编写jsp是没有提示
按照如上步骤,我们在idea中写jsp时就会有只能提示了,爽!
vscode 上好用的插件
Live Server
这个插件就相当以一个web服务器