辅助框架
json
jsonObject
jsonArray
- jackson
**jackson**
ObjectMapper ObjectMapper = new ObjectMapper();
Object o = ObjectMapper.readValue(str, Class); //json转object
String s = ObjectMapper.writeValueAsString(Object); //object转json
**jsonnode 可表示object,array**
JsonNode rootNode = ObjectMapper.readTree(str); //json转节点
JsonNode Node = rootNode.get("datas"); //按名称取节点
Node = Node.get(1); //数组取节点
System.out.println(Node.asText()); //取值
ObjectMapper.writeValueAsString(Node); //将jsonnode转json
-
gson:gson 2.8jar;
public static void main(String[] args) { String str = "{\"id\":22,\"name\":\"ocean\"}"; Type o = new Gson().fromJson(str, Type.class); System.out.println(o.getName()); System.out.println(new Gson().toJson(o)); }
调试 Junit
-
引入
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency>
-
使用:不能有返回值及参数
public class test1 { @Test public void exe() { 不能有返回值及参数 System.out.println(1222); } }
-
断言
批量方法测试,验证结果是否成功TestCase.assertEquals(1>0, 100<0);
-
类单元测试
创建Junit/Junit test cast
under test 选择要测试的类
next 选择测试的方法 -
注解
- @Before @After 每个测试方法执行时,都运行
- @BeforeClass @AfterClass 只能注解Static方法,执行一次
- @RunWith 运行期,框架环境测试
- @Ignore 方法排除
- @Test
日志 log4j(sel4j)
-
相当于system.out.priintln(),可以分类输出到文件
-
7级信息输出
- DEBUG:输出调试信息;指出细粒度信息事件对调试应用程序是非常有帮助的。
- INFO: 输出提示信息;消息在粗粒度级别上突出强调应用程序的运行过程。
- WARN: 输出警告信息;表明会出现潜在错误的情形。
- ERROR:输出错误信息;指出虽然发生错误事件,但仍然不影响系统的继续运行。
- FATAL: 输出致命错误;指出每个严重的错误事件将会导致应用程序的退出。
- ALL level:打开所有日志记录开关;是最低等级的,用于打开所有日志记录。
- OFF level:关闭所有日志记录开关;是最高等级的,用于关闭所有日志记录
-
Appender
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
-
layout
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
-
定义
Logger log = Logger.getLogger("wjx"); 指定名称 Logger log = Logger.getLogger(aaa.class); 获取当前类名称
-
使用
log.debug(""); 方法名是信息登记名称
-
System.setOut(new PrintStream(new File("c:a.log")));
xml dom4j
Document doc =DocumentHelper.createDocument();
Element root=doc.addElement("aaaa");
//add() 节点,属性,备注,文本(接口 ctrl+t 实现类)
Element el1=new DefaultElement("bbbb");
el1.add(new DefaultAttribute("asd", "egg记得给人家"));
root.add(new DefaultText("dddddddddddddd"));
root.add(el1);
XMLWriter writer =new XMLWriter( new FileOutputStream("c:/a.xml"),
OutputFormat.createPrettyPrint());
writer.write(doc);
writer.close();
读取:
File file = new File("E:\\testData.xml");
SAXReader reader=new SAXReader();
Document doc=reader.read(file); //读取xml文件到Document中
Element rootElement=doc.getRootElement();//获取xml文件的根节点
MAVEN项目构建框架:自动导入依赖jar包
-
pom 项目对象模板 pom加入加入编译路径
-
仓库
- 公共仓库 官方
- 私人库 user/…/.m2/respository 文件夹
- 私服 公司库
-
查找 百度 maven resposiitoty https://mvnrepository.com/
-
目录结构
main 主目录 java 源码 resource 配置文件,最终到编译路径 webapp 站点 test 单元测试目录 java 测试源码 target 目标文件/自动生成
-
打包方式
-
war 网站发布文件
-
jar 包
-
pom 父项目打包
-
test 测试和编译时候可用
-
provided 所有阶段 无传递
-
runtime 运行和测试
-
system 一般不用
-
compile 所有阶段可用
-
-
命令(maven +空格+12345)
- builder 编译 重置target文件夹
- clean 清理缓存,最好经常使用
- install 加入到本地仓库,打包为jar
- package 生成war文件
- deploy 发布到远程仓库
layui前端框架
-
功能:css样式,js组件管理(ajax数据更新)
-
table数据表格
-
换页查询 url,cols
<table id="demo" lay-filter="test"></table> layui.use('table', function(){ var table = layui.table; table.render({ elem: '#demo' ,height: 312 ,url: 'Book/index' //数据接口 ,page: true //开启分页 ,cols: [[ //表头 {field: 'id', title: 'ID', width:80, sort: true, fixed: 'right'} ,{field: 'name', title: '用户名', width:280}
-
java数据接收
StringBuilder s = new StringBuilder("{\"code\": 0,\r\n" + " \"msg\": \"\",\r\n" + " \"count\": 1000,\"rows\":"); s.append(objectMapper.writeValueAsString(o)); s.append("}"); resp.getWriter().write(s.toString()); 加入属性 ,parseData:function (res){ return { "code":res.code, "msg":res.msg, "count":res.count, data:res.rows } }
-
行按钮
<script type="text/html" id="barDemo"> <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a> <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a> </script> 列属性加入 ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150,align:'center'} 事件 //obj 行 obj.data 行数据 data.id 列 //test 是table的lay-filter="test" 属性 table.on('tool(test)', function(obj){ var data = obj.data; if(obj.event === 'del'){ ///lay-event 属性 layer.alert("已删除id为"+data.name); } });
-
-
提示框
layer.confirm('真的删除行么', function(index){ layer.close(index); }); layer.alert("已删除id为"+data.name);
-
form表单
-
提交
layui.use('form', function(){ var form = layui.form; //监听提交 form.on('submit(formDemo)', function(data){ layer.msg(JSON.stringify(data.field)); return false; }); });
-
赋值
form.val('lay-filter的值', object);
-
表单验证
<input type="text" lay-verify="required|phone|number"> 自定义校验器 form.verify({ username: function(value, item){ //value:表单的值、item:表单的DOM对象 if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){ return '用户名不能有特殊字符'; } if(/(^\_)|(\__)|(\_+$)/.test(value)){ return '用户名首尾不能出现下划线\'_\''; } if(/^\d+\d+\d$/.test(value)){ return '用户名不能全为数字'; } } //我们既支持上述函数式的方式,也支持下述数组的形式 //数组的两个值分别代表:[正则匹配、匹配不符时的提示文字] ,pass: [ /^[\S]{6,12}$/ ,'密码必须6到12位,且不能出现空格' ] });
-
select ajax获取
<div class="layui-form" lay-filter="boardFilter"> layui.form.render('select','boardFilter');
爬虫
请求发送
- get
- post
获取内容
- text() html() attr() children()
反爬虫
- ajax 重定向
- token 签名验证
- http header数据
- 动态页面,class,标签
api
- 交警,保险
- bat公司,头条,淘宝,360
- 定制产品 短信,地图,人工智能
- api数据中心–app key