# picture
**Repository Path**: forevernow/picture
## Basic Information
- **Project Name**: picture
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MulanPSL-1.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-04-15
- **Last Updated**: 2022-02-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
>我的所谓的天才,只不过是刻苦罢了
##访问地址
localhost:8080/picture/tologin/login
###一、logback配置
1.参考地址: https://www.cnblogs.com/zsty/p/10608953.html
###二、logback配置步骤
###三、SSM中静态资源无法加载的问题[https://www.jianshu.com/p/4cf0933a5bc7]
场景一:和WEB-INF目录不可访问有关
WEB-INF/web.xml中前端控制器拦截路径为*.do、*.action这样的后缀名匹配时,静态资源并不会被拦截。
如果此时请求不到静态资源,可能是静态资源位于不可直接访问的目录下(比如:WEB-INF下)。这时应该将静态资源放在可以直接访问到的目录下(例如:webapp下)。
场景二:和前端控制器有关
如果WEB-INF/web.xml中前端控制器拦截路径为 / 这样的路径时,这时所有的请求都会被拦截(除了jsp和html页面),包括静态资源也会被拦截。此时静态资源放在WEB-INF下或者WEB-INF外面都没有什么影响。
如果此时请求不到静态资源,解决办法是在spring的配置文件中使用
其中mapping的路径是指客户端在请求静态资源时除了项目根路径后面的路径。
location的路径是指在项目目录中从webapp下开始的路径。/**代表匹配多级目录下的所有文件
如果WEB-INF/web.xml中前端控制器拦截路径为 /* 这样的路径时,这时所有的请求都会被拦截(包括jsp和html页面),包括静态资源也会被拦截。应该和上面场景二的解决办法一样。
###四、配置shrio时出现的问题
错误:No WebApplicationContext found: no ContextLoaderListener registered?
解决:SSM框架整合时Spring的包全部用的4.1.7的版本,将SSM框架的Spring包改成4.2.4
###五、用户表,角色表,权限表设计
```
select * from t_perm_role;
insert into t_perm_role(perm_id,role_code,perm_code,perm_name,status) values('1','customer_user','select','chaxun','1');
insert into t_perm_role(perm_id,role_code,perm_code,perm_name,status) values('2','customer_user','delete','delete','1');
insert into t_perm_role(perm_id,role_code,perm_code,perm_name,status) values('3','customer_user','add','add','1');
insert into t_perm_role(perm_id,role_code,perm_code,perm_name,status) values('4','customer_user','edit','edit','1');
select * from t_user_role_perm;
insert into t_user_role_perm() values('1','3','customer_user','select','1');
insert into t_user_role_perm() values('2','3','customer_user','edit','1');
insert into t_user_role_perm() values('3','3','customer_user','delete','1');
insert into t_user_role_perm() values('4','3','customer_user','add','1');
```
###六、用户登陆验证 20200715
```
controller:LoginController
包含进入登录页,登录校验等逻辑处理
```
###七、JSP页面EL表达式依赖
--- dependency
```
javax.servlet
jstl
1.2
taglibs
standard
1.1.2
```
###八、web.xml文件的头如下:
```
```
### 九、layui使用遇到的问题 20200616
1. js 引入的问题
- 路径
- 模块化加载和非模块化加载使用的[jslayui.all.js ] [layui.js]
- layui可模块化加载其他资源,如jquary.js等
### 十、controller资源重定向问题
1. 路径写法 / 一定要写在最前,否则重定向路径是从WEB-INF下开始,这样的路径是错误的
### 十一、nepadmin 后台单页面模板(作为参考)
基于 layui。
遵循原生 HTML/CSS/JS 的书写与组织形式,上手容易,拿来即用。
最低兼容到IE8浏览器。
### 十二、[在线预览](https://june000.gitee.io/nep-admin/)
### 十三、layui乱码的问题
经过查找和询问:解决方式如下:
1. 将项目中的资源文件拷到本地,直接在浏览器中打开,发现展示图标就是乱码
2. 确定乱码问题:项目中的图标库不知道做了什么处理,可能是改变了过滤器的编码导致二进制的图标乱码
3. 解决: 从layui官网重新下载一份插件,将新的图标库替换原来的图标库,重新运行项目,图标乱码问题已解决。
### 十四、jetty启动maven项目,调试debug时,修改js文件必须关闭jetty才能保存
1. 在Jetty中,web.xml文件用于定义Servlet 的映射。任何网页应用程序在使用web.xml之前都会先应用webdefault.xml文件,因为webdefault.xml是一个默认的配置文件,
Jetty根据webdefault.xml文件中的内容配置web应用的诸如JSP,默认的Servlet和Invoker.
webdefault.xml没有固定的位置,名称也可以换成另外一个,因为web应用程序能够通过org.mortbay.jetty.webapp.WebAppContext.setDefaultsDescriptor(String filename)显式加载配置。
不过要注意的是,这个方法中传入的参数是文件名,不是文件路径。Jetty会首先在 classloader classpath路径下查找,如果失败,
则会在文件系统中进行查找。如果不使用显示加载的方式,则webdefault.xml会被Jetty应用。
2. 找到webdefault.xml,在jetty-webapp目录下,将jar包解压开,修改webdefault.xml中的 ‘useFileMappedBuffer’ 的属性为 false
将次xml文件放到和pom.xml同级的目录下,在pom.xml中添加
```
webdefault.xml
```
```
useFileMappedBuffer
false
```
### 十五、JS出现的错误: unexpected token
1.最近遇到的问题:有可能是解析数据时报的错,而且引用了jquary,实际报错信息在 unexpected token 后面。
2.其实这个错误提示是告诉我们:
- 数据有特殊字符;数据有特殊字符;数据有特殊字符;
### 十六、IntelliJ IDEA使用JUnit单元测试
1.安装JUnit插件步骤
File-->settings-->Plguins-->Browse repositories-->输入JUnit-->选择JUnit Generator V2.0安装。
2.使用JUnit插件
在需要进行单元测试的类中,使用快捷键alt+insert,选择JUnit test,选择JUnit4。
---
### 十七、数据库错误
```
1. Cause: java.sql.SQLException: Incorrect string value: '\xE7\xAE\xA1\xE7\x90\x86...' for column 'role_name' at row 1
```
### 十八、列表展示
```aidl
```
---
```aidl
layui.use(['element', 'layer', 'jquery'], function () {
var element = layui.element;
// var layer = layui.layer;
var $ = layui.$;
// 配置tab实践在下面无法获取到菜单元素
$('.site-demo-active').on('click', function () {
var dataid = $(this);
//这时会判断右侧.layui-tab-title属性下的有lay-id属性的li的数目,即已经打开的tab项数目
if ($(".layui-tab-title li[lay-id]").length <= 0) {
//如果比零小,则直接打开新的tab项
active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"), dataid.attr("data-title"));
} else {
//否则判断该tab项是否以及存在
var isData = false; //初始化一个标志,为false说明未打开该tab项 为true则说明已有
$.each($(".layui-tab-title li[lay-id]"), function () {
//如果点击左侧菜单栏所传入的id 在右侧tab项中的lay-id属性可以找到,则说明该tab项已经打开
if ($(this).attr("lay-id") == dataid.attr("data-id")) {
isData = true;
}
})
if (isData == false) {
//标志为false 新增一个tab项
active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"), dataid.attr("data-title"));
}
}
//最后不管是否新增tab,最后都转到要打开的选项页面上
active.tabChange(dataid.attr("data-id"));
});
var active = {
//在这里给active绑定几项事件,后面可通过active调用这些事件
tabAdd: function (url, id, name) {
//新增一个Tab项 传入三个参数,分别对应其标题,tab页面的地址,还有一个规定的id,是标签中data-id的属性值
//关于tabAdd的方法所传入的参数可看layui的开发文档中基础方法部分
element.tabAdd('demo', {
title: name,
content: '',
id: id //规定好的id
})
FrameWH(); //计算ifram层的大小
},
tabChange: function (id) {
//切换到指定Tab项
element.tabChange('demo', id); //根据传入的id传入到指定的tab项
},
tabDelete: function (id) {
element.tabDelete("demo", id);//删除
}
};
function FrameWH() {
var h = $(window).height();
$("iframe").css("height",h+"px");
}
});
```