├── .gitattributes ├── README.md ├── advertising.md └── docs ├── .nojekyll ├── HomePage.md ├── JavaEE框架 ├── Mybatis │ └── MyBatis常见问题.md ├── Spring │ ├── Spring入门与常用配置.md │ └── 注解IOC&AOP.md ├── Struts2 │ ├── Servlet的API&封装.md │ ├── Struts2中的OGNL和值栈ValueStack.md │ ├── Struts2中的拦截器和标签库.md │ └── struts2入门&常见配置.md ├── hibernate │ ├── Hibernate之入门.md │ ├── Hibernate之进阶1——主键生成策略和事务管理.md │ ├── Hibernate之进阶2——表操作和多对多配置.md │ ├── Hibernate之进阶3——查询方式.md │ ├── Hibernate之进阶4——抓取策略.md │ └── eclipse中配置XML提示.md └── springboot │ ├── Spring Boot.md │ ├── Spring Boot核心技术-笔记.pdf │ ├── images │ ├── 2018-02-04_123955.png │ ├── concrete-bindings.png │ ├── legacy.png │ ├── template-engine.png │ ├── 搜狗截图20180129151045.png │ ├── 搜狗截图20180129151112.png │ ├── 搜狗截图20180129224104.png │ ├── 搜狗截图20180130161620.png │ ├── 搜狗截图20180131220946.png │ ├── 搜狗截图20180131221411.png │ ├── 搜狗截图20180203164743.png │ ├── 搜狗截图20180203181108.png │ ├── 搜狗截图20180203181751.png │ ├── 搜狗截图20180211130621.png │ ├── 搜狗截图20180211130721.png │ ├── 搜狗截图20180211134506.png │ ├── 搜狗截图20180226173408.png │ ├── 搜狗截图20180226173527.png │ ├── 搜狗截图20180226180347.png │ ├── 搜狗截图20180226180504.png │ ├── 搜狗截图20180228135513.png │ ├── 搜狗截图20180301142915.png │ ├── 搜狗截图20180302114401.png │ ├── 搜狗截图20180302144835.png │ ├── 搜狗截图20180302144910.png │ ├── 搜狗截图20180302221835.png │ ├── 搜狗截图20180303145450.png │ ├── 搜狗截图20180303145531.png │ ├── 搜狗截图20180303165113.png │ ├── 搜狗截图20180305194443.png │ ├── 搜狗截图20180306105412.png │ ├── 搜狗截图20180306145727.png │ └── 搜狗截图20180306145855.png │ └── springboot系列知识.md ├── JavaWeb前后端交互技术基础 ├── Ajax │ └── Ajax常用用法.md ├── HTML&CSS │ ├── HTML&CSS基础.md │ ├── webstorm上导入文件中文乱码问题解决.md │ ├── webstorm设置黑色主题及相关的编码和显示设置.md │ ├── 表单.jpg │ └── 表单.xmind ├── JavaScript │ ├── JS中的数据类型转换.md │ ├── JavaScript基础知识.md │ ├── xmind │ │ ├── JavaScript对象及初识面向对象.xmind │ │ └── JavaScript操作DOM对象.xmind │ └── 思维导图图片 │ │ ├── JavaScript对象及初识面向对象.jpg │ │ └── JavaScript操作DOM对象.jpg ├── Java_web │ ├── eclipse中将JSP文件的默认字符编码设置成UTF-8.md │ ├── 在javaEE中外部的js文件如何和页面之间传递参数.md │ ├── 知识点 │ │ ├── Cookie&Session │ │ │ ├── Cookie&Session.doc │ │ │ ├── cookie的购物.png │ │ │ ├── session.png │ │ │ ├── session域.png │ │ │ ├── 显示上次访问时间.png │ │ │ └── 购物过程.png │ │ ├── Http协议和Tomcate服务器 │ │ │ ├── HTTP协议详解.txt │ │ │ ├── Http协议和Tomcate服务器.doc │ │ │ ├── http响应.png │ │ │ ├── http请求.png │ │ │ ├── last-modified.png │ │ │ └── 抓包工具 │ │ │ │ └── httpwatch9.3.35.zip │ │ ├── JSP │ │ │ ├── javaEE三层架构.png │ │ │ ├── jsp&el&jstl.doc │ │ │ ├── jsp的出现.png │ │ │ ├── out缓冲区.png │ │ │ ├── 显示商品列表.png │ │ │ ├── 案例-显示商品列表.png │ │ │ ├── 静态与动态包含区别.png │ │ │ └── 页面包含.png │ │ ├── javaweb核心之Servlet │ │ │ ├── javaweb核心之Servlet.doc │ │ │ ├── servlet模板.txt │ │ │ ├── servlet访问过程.png │ │ │ ├── servlet访问过程2.png │ │ │ ├── 在javaEE中外部的js文件如何和页面之间传递参数.md │ │ │ ├── 域对象.png │ │ │ └── 用户登录.png │ │ ├── request │ │ │ ├── HttpServletRequest.doc │ │ │ ├── request的乱码.png │ │ │ ├── 注册功能.png │ │ │ ├── 转发.png │ │ │ └── 转发和重定向.png │ │ ├── response │ │ │ ├── HttpServletResponse.doc │ │ │ ├── response乱码.png │ │ │ ├── response运行过程.png │ │ │ ├── 一次性验证码 │ │ │ │ ├── CheckImgServlet.java │ │ │ │ └── new_words.txt │ │ │ └── 重定向.png │ │ └── 滤器&监听器 │ │ │ ├── 监听器.txt │ │ │ └── 过滤器.txt │ └── 解决在Eclipse新建web项目没有自动生成web.xml和在新建servlet的时候自动生成web.xml配置.md ├── easyUI │ └── jQuery+EasyUI开发指南.pdf └── jQuery │ ├── Xmind │ ├── jQuery中的事件.xmind │ └── jQuery选择器.xmind │ ├── jQuery知识.md │ └── 思维导图JPG │ ├── jQuery中的事件.jpg │ └── jQuery选择器.jpg ├── Java_basic ├── java_basic_API │ ├── Java中的IO流和反射.md │ ├── XML技术.md │ ├── 多线程.md │ └── 网络编程技术.md └── 算法 │ └── N个人站圈报数算法问题.md ├── Java与数据库交互技术 ├── MySQL数据库 │ ├── JDBC操作数据库 │ │ ├── DBCP连接池 │ │ │ └── DBCP连接池和登录注册按例.md │ │ ├── DBUtils │ │ │ └── DBUtils工具类操作数据库.md │ │ ├── JDBC操作数据库基础 │ │ │ └── JDBC操作数据库.md │ │ ├── c3p0连接池 │ │ │ └── c3p0连接池的用法.md │ │ └── 三层架构 │ │ │ ├── 基本概念 │ │ │ ├── dao │ │ │ │ ├── BaseDao.java │ │ │ │ ├── PetDao.java │ │ │ │ └── impl │ │ │ │ │ └── PetDaoImpl.java │ │ │ ├── entity │ │ │ │ └── Pet.java │ │ │ ├── service │ │ │ │ ├── PetService.java │ │ │ │ └── impl │ │ │ │ │ └── PetServiceImpl.java │ │ │ └── test │ │ │ │ └── Test.java │ │ │ └── 宠物管理系统模拟功能 │ │ │ └── PetDeo │ │ │ ├── resouces │ │ │ └── database.properties │ │ │ └── src │ │ │ ├── dao │ │ │ ├── BaseDao.java │ │ │ ├── MasterDao.java │ │ │ ├── PetDao.java │ │ │ └── impl │ │ │ │ ├── MasterDaoImpl.java │ │ │ │ └── PetDaoImpl.java │ │ │ ├── entity │ │ │ ├── Master.java │ │ │ └── Pet.java │ │ │ ├── mgr │ │ │ └── PetMgr.java │ │ │ ├── service │ │ │ ├── MasterService.java │ │ │ ├── PetService.java │ │ │ └── impl │ │ │ │ ├── MasterServiceImpl.java │ │ │ │ └── PetServiceImpl.java │ │ │ └── test │ │ │ ├── Test.java │ │ │ └── Test2.java │ └── MySQL基础 │ │ ├── MySQL数据库基础知识.md │ │ ├── win10环境下MySql(8.0.16最新版本)安装过程以及遇到的问题.md │ │ ├── 数据库.jpg │ │ ├── 数据库.xmind │ │ └── 数据库详细思维导图.jpg └── Oracle数据库 │ ├── Oracle的安装 │ ├── 云服务器安装oracle修改IP地址监听器报错问题.md │ └── 将oracle11安装到虚拟机并在本机进行远程操控oracle数据库(超详细步骤).md │ ├── Oracle重点知识点 │ └── oracle知识点总结.md │ └── xmind │ ├── 01.安装_函数查询and条件查询.xmind │ ├── 02.多表查询_子查询_集合运算.xmind │ ├── 03.DDL,DML,视图,PLSQL编程.xmind │ └── 04.游标,存储过程,存储函数,触发器.xmind ├── _coverpage.md ├── images └── test.jpg ├── index.html ├── java面试相关 ├── JavaSE基础面试题(精简版).md └── java基础面试题.md ├── 兴趣爱好 ├── 2019-07-10-hexo在GitHub上搭建个人博客.md ├── 2019-07-14-hexo博客结合百度语音合成为你的博客添加欢迎语音.md ├── 使用序列化保存对象信息的时候出现中文乱码问题.md └── 微信聊天机器人.md ├── 学习资料(全).md ├── 常用功能模块代码 ├── JSP实现文件下载功能.md ├── ajax │ └── ajax表单验证 │ │ └── ajax-demo │ │ ├── WebContent │ │ ├── META-INF │ │ │ └── MANIFEST.MF │ │ ├── WEB-INF │ │ │ └── web.xml │ │ ├── css │ │ │ └── style.css │ │ ├── index.jsp │ │ ├── js │ │ │ ├── jquery-1.8.3.js │ │ │ ├── page.js │ │ │ ├── project.js │ │ │ └── registe.js │ │ └── registe.jsp │ │ ├── build │ │ └── classes │ │ │ └── ajax.txt │ │ └── src │ │ ├── ajax.txt │ │ └── com │ │ ├── bean │ │ └── User.java │ │ ├── dao │ │ ├── BaseData.java │ │ └── UserData.java │ │ └── servlet │ │ └── user │ │ └── CheckUserName.java ├── java生成图片验证码.md ├── 为数据库批量添加测试数据 │ └── AddData.java ├── 分页查询 │ └── web-demo-1 │ │ ├── WebContent │ │ ├── META-INF │ │ │ └── MANIFEST.MF │ │ ├── WEB-INF │ │ │ └── web.xml │ │ ├── css │ │ │ └── style.css │ │ ├── index.jsp │ │ ├── js │ │ │ ├── jquery-1.8.3.js │ │ │ ├── page.js │ │ │ ├── project.js │ │ │ └── registe.js │ │ ├── login.jsp │ │ └── page │ │ │ ├── bottom.jsp │ │ │ ├── index.jsp │ │ │ ├── left.jsp │ │ │ ├── main.jsp │ │ │ ├── top.jsp │ │ │ └── user │ │ │ ├── changePassword.jsp │ │ │ ├── info.jsp │ │ │ ├── list.jsp │ │ │ └── registe.jsp │ │ ├── build │ │ └── classes │ │ │ ├── c3p0-config.xml │ │ │ └── sql │ │ │ └── data.sql │ │ └── src │ │ ├── c3p0-config.xml │ │ ├── com │ │ └── canghe │ │ │ ├── dao │ │ │ └── UserDaoImpl.java │ │ │ ├── domain │ │ │ └── User.java │ │ │ ├── test │ │ │ └── AddDate.java │ │ │ ├── util │ │ │ ├── AddData.java │ │ │ ├── DataSourceUtils.java │ │ │ └── PageAssitant.java │ │ │ └── web │ │ │ └── servlet │ │ │ └── user │ │ │ ├── ChangePasswordServlet.java │ │ │ ├── LoginServlet.java │ │ │ ├── LogoffServlet.java │ │ │ ├── QueryServlet.java │ │ │ └── RegisterServlet.java │ │ └── sql │ │ └── data.sql ├── 利用cookie获取最近一次访问页面时间 │ └── LastCookieTimeServlet.java └── 防盗链 │ └── RefererServlet.java ├── 常用工具和环境 ├── Git&GitHub │ ├── Git&GitHub.pdf │ ├── 关于GitHub的一些经验总结(包括README文件的编写目录的自动生成).md │ └── 分布式版本控制工具——Git.md ├── InteliJ_IDEA │ ├── idea下新建的spring boot项目,无法导入依赖以及idea基础回顾.md │ ├── settings.jar │ ├── 尚硅谷_宋红康_IntelliJIDEA的安装、配置与使用.pdf │ └── 激活码.txt ├── Linux │ ├── Linux命令大全(修改版).chm │ ├── day21--linux入门.pdf │ └── 操作系统的作用.png ├── SVN │ └── 版本控制工具之SVN.md └── eclipse │ ├── Eclipse调用方法放回值快捷键.md │ ├── Eclipse配置Servlet模板.md │ ├── eclipse中tomcat-advanced以及插件的使用.md │ ├── eclipse中配置XML提示.md │ ├── eclipse详解及eclipse快捷键.md │ └── 解决在Eclipse新建web项目没有自动生成web.xml和在新建servlet的时候自动生成web.xml配置.md ├── 文档 └── usingthymeleaf.pdf └── 经验总结 └── java在过滤器中为http请求加请求头header.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | *.js linguist-language=java 4 | *.css linguist-language=java 5 | *.html linguist-language=java -------------------------------------------------------------------------------- /advertising.md: -------------------------------------------------------------------------------- 1 | ------ 2 | # 本文章已同步至我的GitHub仓库:Javastudy,期待您的加入:blush: 3 | 4 | 5 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 6 | 7 | 8 | # 来我的微信公众号玩耍呗:blush: 9 | 10 | 11 | # 扫码无套路关注我的CSDN博客:blush: 12 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/.nojekyll -------------------------------------------------------------------------------- /docs/JavaEE框架/Mybatis/MyBatis常见问题.md: -------------------------------------------------------------------------------- 1 | # 一、什么是Mybatis 2 | 3 | ## 1、Mybatis是一个类似于Hibernate的ORM持久层开源框架, 4 | 5 | ## 2、Mybatis通过XML或者注解配置和映射,实现对数据库的访问 6 | 7 | ## 3、Mybatis的核心设计理念是基于原生sql进行的,正是由于这个设计理念使得Mybatis相对于Hibernate框架执行效率更高,但是代码的可移植性差,由于Mybatis是一个轻量级的框架,框架本身提供的功能较少,但是使用的灵活性更高。 8 | 9 | # 二、结果集映射 10 | 11 | ## 1、结果集映射是在Mybatis的xml映射文件中进行配置的一个映射,表示查询语句结果集中每一条记录如何转换成对应的java对象,将我们的java对象和数据表中的字段一一对应。 12 | 13 | ## 2、他是通过resultMap这个标签进行配置,里面属性有type和id,id是这个结果集映射的唯一一个标识,用于查询标签的一个引用,type属性用于设置查询结果需要转换的java对象,就是相对应的实体类,可以写全类名,当我们在Mybatis配置文件中配置默认扫描包或者配置类的别名的时候可以使用类名或者别名 14 | 15 | ## 3、一共有2个字标签,分别是id和result,id于配置数据表主键对应关系,result用于设置其他字段和类属性的一个对应,这两个标签都有2个属性,propery和column,分别设置java对象的属性和数据表字段名 16 | 17 | # 三、动态SQL 18 | 19 | ## 1、Mybatis的动态SQL是Mybatis灵活性的一种体现,可以通过外部传入的参数,使用一系列标签,灵活的拼接sql语句 20 | 21 | ## 2、里面主要有这几个标签,if、where、set、foreach、choose、when、otherwise, 22 | 23 | ## 3、if标签用来进行条件判断,有一个test属性,添加判断条件,多个if标签时,记得用。where标签取代sql中的where命令,若标签中无任意结果,则where不会出现在sql中,记得在前面加一个and用来连接;set标签用来取代sql中update set命令;foreach标签进行循环遍历,有collection、item、open、close、separator属性,分别指传入的参数类型,临时变量、语句开始和结束需要拼接的内容,分隔符;choose、when、otherwise相当于java中的多重if结构 24 | 25 | # 四、#和$区别 26 | 27 | ## 1、两者都是用来进行参数传递 28 | 29 | ## 2、#的方式更常用,内部封装了prepareStatement接口,进行预编译处理,相当于JDBC中为?占位符赋值,这种相对安全,$的方式是字符串拼接,用$号取到的数据会那需要使用正确的格式,拼接到sql中 30 | 31 | ## 3、当比较而言#更加的安全,能有效的方式sql注入 32 | 33 | # 五、多表间关联查询 34 | 35 | ## 1、开发中经常查询数据会用到多张表进行查询,比如查询一个用户可以有多个订单,但是用户表和商品表是两张不同的表,如果要查询用户以及其对应的商品信息就需要用到多表联查 36 | 37 | ## 2、主要有两种方式,第一种编写带有连接查询的sql,将需要的字段从多张表中取出,放入结果集,首先在实体类中添加属性对应数据表中字段,其次,在映射文件的结果集映射中添加result标签,为新增的属性设置对应字段,最后修改查询sql,添加连接查询, 38 | 39 | ## 3、这种方式很少用,方式二是,使用标签通过指定的格式进行配置,在查询时自动获取相关数据表的数据,主要用到两个标签,association处理多对一的关系,一般设置在多的一方的配置文件中,用于子表查询主表,collection标签处理一对多,设置在一的一方的配置文件中,用于主表查询子表, 40 | 41 | ## 4、如何使用呢?首先在实体类中添加属性,一的一方添加多的一方的集合对象,泛型是多的一方的对象,多的一方添加一的一方的对象,其次在配置文件的结果集中添加标签,多的一方用association,一的一方用collection,对标签进行配置,分别有property、column、select属性,property自动查询的结果保存到那个实体类,column设置携带到查询语句中的字段,select设置自动执行的sql语句的id,最后需要添加对应数据表的结果集映射进来。 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /docs/JavaEE框架/Spring/Spring入门与常用配置.md: -------------------------------------------------------------------------------- 1 | # 一、Spring概述 2 | 3 | ## 1、什么是Spring 4 | 5 | Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 6 | 在其著作 Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是 7 | 为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使 8 | 用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring 使用基本的 JavaBean 9 | 来完成以前只可能由 EJB 完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、 10 | 可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 的核心是控制反转 11 | (IoC)和面向切面(AOP)。简单来说,Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级 12 | 开源框架。 13 | 14 | Spring涉及到EE开发的三层 15 | 16 | * WEB 层:Spring MVC. 17 | * 业务层:Bean 管理:(IOC) 18 | * 持久层:Spring 的 JDBC 模板.ORM 模板用于整合其他的持久层框架 19 | 20 | ## 2、Spring特点 21 | 22 | - Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理 23 | AOP 编程的支持 24 | - Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能 25 | 声明式事务的支持 26 | - 只需要通过配置就可以完成对事务的管理,而无需手动编程 27 | 方便程序的测试 28 | - Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序 29 | 方便集成各种优秀框架 30 | - Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、 31 | MyBatis、Quartz 等)的直接支持 32 | 降低 JavaEE API 的使用难度 33 | - Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装, 34 | 使这些 API 应用难度大大降低 35 | 36 | # 二、Spring的IOC 37 | 38 | ## 1、IOC的底层实现原理 39 | 40 | IOC:Inversion of Control 控制反转. 指的是 对象的创建权反转(交给)给 Spring. 41 | 作用是实现了程序的解耦合. 42 | 43 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190219114221760.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 44 | 45 | ## 2、IOC和DI 46 | 47 | IOC :控制反转,将对象的创建权交给了 Spring. 48 | DI :Dependency Injection 依赖注入.需要有 IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依 49 | 赖的属性设置进去. 50 | 51 | 面向对象中类与类之间的关系: 52 | 53 | - 依赖:如B类方法中需要将A类传入 54 | - 继承:is a的关系 55 | - 聚合:has a的关系 56 | 57 | 58 | 59 | # 三、Spring的工厂 60 | 61 | ## 1、BeanFactory 62 | 63 | 旧版本,调用getBean方法时,才会实例化类 64 | 65 | ## 2、ApplicationContext 66 | 67 | 实现了BeanFactory,加载配置文件的时候就会实例化 68 | 69 | 实现类: 70 | 71 | ClassPathXmlApplicationContext :加载类路径下 Spring 的配置文件. 72 | FileSystemXmlApplicationContext :加载本地磁盘下 Spring 的配置文件. 73 | 74 | # 四、Spring的相关配置 75 | 76 | ## 1、bean标签属性id和name配置 77 | 78 | id :Bean 起个名字. 在约束中采用 ID 的约束:唯一.必须以字母开始,可以使用字母、数字、连字符、 79 | 下划线、句话、冒号 id:不能出现特殊字符. 80 | 81 | name:Bean 起个名字. 没有采用 ID 的约束. name:出现特殊字符.如果没有 id 的话 , name 可 82 | 以当做 id 使用. 83 | 84 | * 整合 struts1 的时候: 85 | 86 | ## 2、bean标签属性scope 87 | 88 | bean的作用范围 89 | 90 | * singleton :默认值,单例的. 91 | * prototype :多例的. 92 | * request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中. 93 | * session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中. 94 | * globalSession :WEB 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当 95 | 于 session. 96 | 97 | ## 3、Bean 的生命周期的配置 98 | 99 | 通过配置标签上的 init-method 作为 Bean 的初始化的时候执行的方法,配置 destroy-method 100 | 作为 Bean 的销毁的时候执行的方法。 101 | 销毁方法想要执行,需要是单例创建的 Bean 而且在工厂关闭的时候,Bean 才会被销毁. 102 | 103 | # 五、Spring的bean管理 104 | 105 | ## 1、 Spring 生成 Bean 的时候三种方式 106 | 107 | 【无参数的构造方法的方式:】 108 | 109 | ``` 110 | 111 | ``` 112 | 113 | 【静态工厂实例化的方式】 114 | 115 | 【实例工厂实例化的方式】 116 | 117 | ## 2、 Spring 的 Bean 的属性注入 118 | 119 | 1)【构造方法的方式注入属性】 120 | 121 | ``` 122 | 123 | 124 | 125 | 126 | 127 | ``` 128 | 129 | 如果注入的是对象,value属性要改为ref属性引用另一个 bean 的 id 或 name 130 | 131 | 2)【set 方法的方式注入属性】 132 | 133 | ``` 134 | 135 | 136 | 137 | 138 | ``` 139 | 140 | 比较常用,需要在类中提供set方法 141 | 142 | 如果注入的是对象,value属性要改为ref属性引用另一个 bean 的 id 或 name 143 | 144 | 3) 名称空间 p 的属性注入的方式 145 | 146 | Spring2.x 版本后提供的方式 147 | 148 | 第一步:引入 p 名称空间 149 | 150 | 第二步:使用 p 名称空间. 151 | * 普通属性: p:属性名称=”” 152 | * 对象类型属性: p:属性名称-ref=”” 153 | 154 | ``` 155 | 156 | 158 | 160 | 161 | ``` 162 | 163 | 4)SpEL 的方式的属性注入 164 | 165 | Spring3.x 版本后提供的方式 166 | 167 | ```java 168 | SpEL:Spring Expression Language. 169 | 语法:#{ SpEL } 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 引用了另一个类的属性 181 | 182 | 183 | 184 | 185 | 186 | 187 | ``` 188 | 189 | 5)注入复杂类型 190 | 191 | ``` 192 | 193 | 194 | 195 | 196 | 197 | 会希 198 | 冠希 199 | 天property> 200 | 201 | 202 | 203 | 芙蓉 204 | 如花 205 | 凤姐 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | root 220 | 123 221 | 222 | 223 | 224 | 225 | ``` 226 | 227 | ## 3、分模块开发 228 | 229 | ```java 230 | 一种:创建工厂的时候加载多个配置文件: 231 | ApplicationContext applicationContext = new 232 | ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml"); 233 | 二种:在一个配置文件中包含另一个配置文件: 234 | 235 | ``` 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | -------------------------------------------------------------------------------- /docs/JavaEE框架/Spring/注解IOC&AOP.md: -------------------------------------------------------------------------------- 1 | # 一、Spring的bean管理(注解方式) 2 | 3 | ## 1、配置组件扫描 4 | 5 | 扫描类下的注解,哪些包下的类需要使用IOC注解 6 | 7 | ```java 8 | 9 | 10 | 11 | ``` 12 | 13 | ## 2、在类上添加注解 14 | 15 | ```java 16 | @Component(value="userDao") 17 | public class UserDaoImpl implements UserDao { 18 | @Override 19 | public void sayHello() { 20 | System.out.println("Hello Spring Annotation..."); 21 | } 22 | } 23 | ``` 24 | 25 | 相当于在xml中用bean标签配置类 26 | 27 | # 二、Spring的bean管理常用注解 28 | 29 | ## 1、@Component:组件.(作用在类上) 30 | 31 | ```java 32 | Spring 中提供@Component 的三个衍生注解:(功能目前来讲是一致的) 33 | * @Controller :WEB 层 34 | * @Service :业务层 35 | * @Repository :持久层 36 | 这三个注解是为了让标注类本身的用途清晰,Spring 在后续版本会对其增强 37 | ``` 38 | 39 | ## 2、属性注入的注解:(使用注解注入的方式,可以不用提供 set 方法.) 40 | 41 | ```java 42 | @Value :用于注入普通类型. 43 | @Autowired :自动装配: 44 | * 默认按类型进行装配. 45 | * 按名称注入: 46 | * @Qualifier:强制使用名称注入. 47 | @Resource 相当于: 48 | * @Autowired 和@Qualifier 一起使用. 49 | 50 | ``` 51 | 52 | ## 3、Bean 的作用范围的注解 53 | 54 | @Scope: 55 | * singleton:单例 56 | * prototype:多例 57 | 58 | ## 4、 Bean 的生命周期的配置 59 | 60 | @PostConstruct :相当于 init-method 61 | @PreDestroy :相当于 destroy-method 62 | 63 | # 三、注解和xml对bean管理区别 64 | 65 | ## 1、区别 66 | 67 | XML 和注解: 68 | 69 | * XML :结构清晰. 70 | * 注解 :开发方便.(属性注入.) 71 | 实际开发中还有一种 XML 和注解整合开发: 72 | 73 | 注意:注解方式的这个类是自己提供,但是xml的话可以适用所有类 74 | 75 | ## 2、两种方式结合 76 | 77 | Bean 有 XML 配置.但是使用的属性使用注解注入. 78 | 79 | 在没有扫描下,使用属性注入的注解,需要加上这个配置 80 | 81 | ``` 82 | 83 | ``` 84 | 85 | # 四、AOP的概述 86 | 87 | ## 1、什么是AOP 88 | 89 | AOP是指面向切面编程,是oop的延续,可以为业务逻辑的各个部分进行隔离,解决oop开发遇到的问题,使得业务间的耦合性降低 90 | 91 | ## 2、AOP特点 92 | 93 | 可以对程序,或者通俗的说是对类的方法进行增强,在不修改源代码的条件下 94 | 95 | AOP可以进行权限校验,日志记录,性能监控,事务控制 96 | 97 | ## 3、AOP的底层实现原理 98 | 99 | 底层利用了代理机制 100 | 101 | Spring 的 AOP 的底层用到两种代理机制: 102 | 103 | * JDK 的动态代理 :针对实现了接口的类产生代理. 104 | * Cglib 的动态代理 :针对没有实现接口的类产生代理. 应用的是底层的字节码增强的技术 生成当前类 105 | 的子类对象. 106 | 107 | ## 4、Spring底层AOP的实现原理 108 | 109 | 1)JDK 动态代理增强一个类中方法 110 | 111 | ```java 112 | public class MyJDKProxy implements InvocationHandler { 113 | private UserDao userDao; 114 | public MyJDKProxy(UserDao userDao) { 115 | this.userDao = userDao; 116 | } 117 | // 编写工具方法:生成代理: 118 | public UserDao createProxy(){ 119 | UserDao userDaoProxy = (UserDao) 120 | Proxy.newProxyInstance(userDao.getClass().getClassLoader(), 121 | userDao.getClass().getInterfaces(), this); 122 | return userDaoProxy; 123 | } 124 | @Override 125 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable 126 | { 127 | if("save".equals(method.getName())){ 128 | System.out.println("权限校验================"); 129 | } 130 | return method.invoke(userDao, args); 131 | } 132 | } 133 | 134 | ``` 135 | 136 | 2)Cglib 动态代理增强一个类中的方法 137 | 138 | ```java 139 | public class MyCglibProxy implements MethodInterceptor{ 140 | private CustomerDao customerDao; 141 | public MyCglibProxy(CustomerDao customerDao){ 142 | this.customerDao = customerDao; 143 | } 144 | // 生成代理的方法: 145 | public CustomerDao createProxy(){ 146 | // 创建 Cglib 的核心类: 147 | Enhancer enhancer = new Enhancer(); 148 | // 设置父类: 149 | enhancer.setSuperclass(CustomerDao.class); 150 | // 设置回调: 151 | enhancer.setCallback(this); 152 | // 生成代理: 153 | CustomerDao customerDaoProxy = (CustomerDao) enhancer.create(); 154 | return customerDaoProxy; 155 | } 156 | @Override 157 | public Object intercept(Object proxy, Method method, Object[] args, MethodProxy 158 | methodProxy) throws Throwable { 159 | if("delete".equals(method.getName())){ 160 | Object obj = methodProxy.invokeSuper(proxy, args); 161 | System.out.println("日志记录================"); 162 | return obj; 163 | } 164 | return methodProxy.invokeSuper(proxy, args); 165 | } 166 | } 167 | 168 | ``` 169 | 170 | # 五、AOP 的开发中的相关术语 171 | 172 | ## 1、连接点Joinpoint 173 | 174 | 可以被拦截到的点,在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。 175 | 176 | ## 2、切入点Pointcut 177 | 178 | 真正被拦截到的点,就是我们真正需要去增强的方法 179 | 180 | ## 3、通知/增强Advice 181 | 182 | 就是为切入点增强功能的那些个方法,比如权限校验方法等.通知分为前置通知,后置 183 | 通知,异常通知,最终通知,环绕通知(切面要完成的功能) 184 | 185 | ## 4、切面Aspect 186 | 187 | 是切入点和通知(引介)的结合 188 | 189 | ## 5、引介Introduction 190 | 191 | 引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或 Field.,是类层面的 192 | 193 | ## 6、目标对象Target 194 | 195 | :代理的目标对象 196 | 197 | ## 7、织入Weaving 198 | 199 | 是指把增强应用到目标对象来创建新的代理对象的过程,spring 采用动态代理织入, 200 | 201 | ## 8、代理Proxy 202 | 203 | 一个类被 AOP 织入增强后,就产生一个结果代理类 204 | 205 | # 六、Spring使用 AspectJ 进行 AOP 的开发:XML 的方式 206 | 207 | ## 1、Spring整合Junit进行单元测试 208 | 209 | 引入Spring-test的jar包,不需要再创建工厂,直接测试 210 | 211 | 类注解: 212 | 213 | ```java 214 | @RunWith(SpringJUnit4ClassRunner.class) 215 | @ContextConfiguration("classpath:applicationContext.xml") 216 | 217 | ``` 218 | 219 | 依赖注入: 220 | 221 | @Resource(name="orderDao") 222 | 223 | ## 2、编写切面类 224 | 225 | 将增强的方法放进来,比如权限校验等 226 | 227 | ## 3、通过AOP配置,为目标类生成代理 228 | 229 | ```java 230 | 231 | 232 | 233 | 234 | 235 | 237 | 238 | 239 | 240 | 241 | 242 | ``` 243 | 244 | ## 4、其他增强的配置 245 | 246 | ```java 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | ``` 268 | 269 | # 七、Spring通知类型和使用 270 | 271 | 每种通知均可获得切入点信息 272 | 273 | ## 1、前置通知 274 | 275 | 如权限校验 276 | 277 | 在目标方法执行之前执行 278 | 279 | ``` 280 | 281 | ``` 282 | 283 | ## 2、后置通知 284 | 285 | 如:日志记录 286 | 287 | 在目标方法执行之后执行 288 | 289 | 获得方法的返回值 290 | 291 | ```java 292 | 293 | 294 | ``` 295 | 296 | 然后将result作为参数传入切面中的通知 297 | 298 | ## 3、环绕通知 299 | 300 | 如:性能监控 301 | 302 | 在目标方法执行前和执行后执行 303 | 304 | 可以阻止目标方法的执行 305 | 306 | 在通知类方法要有Object返回值,设置如下: 307 | 308 | ```java 309 | /** 310 | * 环绕通知——性能监控 311 | * @throws Throwable 312 | */ 313 | public Object around(ProceedingJoinPoint joinPoint) throws Throwable { 314 | System.out.println("环绕通知前=============="); 315 | Object object = joinPoint.proceed(); 316 | System.out.println("环绕通知后=============="); 317 | return object; 318 | } 319 | 320 | ``` 321 | 322 | ## 4、异常抛出通知 323 | 324 | 在目标方法执行出现 异常的时候 执行 325 | 326 | 可得到异常信息, 327 | 328 | ```java 329 | 330 | 331 | /** 332 | * 异常抛出通知 333 | */ 334 | public void afterThrowing(Throwable ex) { 335 | System.out.println("异常抛出通知============="+ex.getMessage()); 336 | } 337 | ``` 338 | 339 | ## 5、最终通知 340 | 341 | 无论目标方法是否出现异常 最终通知都会 执行 342 | 343 | ```java 344 | 345 | 346 | ``` 347 | 348 | 349 | 350 | # 八、切入点表达式写法 351 | 352 | execution(表达式) 353 | 354 | ``` 355 | 表达式: 356 | [方法访问修饰符] 方法返回值 包名.类名.方法名(方法的参数) 357 | public * cn.itcast.spring.dao.*.*(..) 358 | * cn.itcast.spring.dao.*.*(..) 359 | * cn.itcast.spring.dao.UserDao+.*(..) 360 | * cn.itcast.spring.dao..*.*(..) 361 | ``` 362 | 363 | 364 | 365 | # 九、AOP核心思想 366 | 367 | 鞥切面扩展程序,想要增强某一个方法,来一个切面然后配置一下就好了,不需要修改源代码 368 | 369 | # 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | -------------------------------------------------------------------------------- /docs/JavaEE框架/Struts2/Struts2中的OGNL和值栈ValueStack.md: -------------------------------------------------------------------------------- 1 | # 一、OGNL 2 | 3 | ## 1、什么是OGNL 4 | 5 | 是一种功能强大的表达式语言,通过他可以获取对象的任意属性和方法,同时能实现必要的类型转换,比EL表达式更加的强大,可以应用在页面,Action以及配置文件中 6 | 7 | ## 2、OGNL的作用 8 | 9 | - 对象方法调用 10 | - 类静态方法调用 11 | - 赋值操作和表达式串联 12 | - 访问OGNL上下文 13 | - 操作集合对象 14 | 15 | ## 3、OGNL的要素 16 | 17 | - 表达式 18 | - 跟对象root 19 | - context对象 20 | 21 | # 二、值栈的概述 22 | 23 | ## 1、什么是值栈 24 | 25 | ValueStack是Struts2的一个接口,OgnlValueStatck是实现类,客户端发送一个请求就会创建一个Action实例,同时会创建一个OgnlValueStatck实例,ValueStack其实类似于数据中转站,Struts中的数据都保存在值栈中,贯穿Action的生命周期,值栈中的数据可在JSP、Action、配置文件中使用 26 | 27 | ## 2、值栈的内部结构 28 | 29 | 值栈的内部有两个主要区域, 30 | 31 | 1)root区域 32 | 33 | 实际上是一个ArrayList集合,放的是对象,实现压栈和出栈功能,拥有栈的特点,先进后出,后进先出,最后压进栈的数据再栈顶,称之为对象栈,取的时候不用加#号 34 | 35 | 通常操作值栈,就是值操作root区域,可查看值栈的内部结构 36 | 37 | 2)context区域 38 | 39 | 他是一个map结构,存放的是一些引用,request、session、等,其中attr代表该Map按如下顺序检索某个属性:request、session、application,其中使用 63 | ``` 64 | 65 | 2)采用valueStatck本身方法方式存入获取 66 | 67 | ``` 68 | 69 | ``` 70 | 71 | 3)获取值栈中集合的数据 72 | 73 | ``` 74 | 75 | ``` 76 | 77 | 4)获取context区域存放的数据 78 | 79 | ``` 80 | 81 | ``` 82 | 83 | ## 7 、EL为何能访问值栈中的数据 84 | 85 | 因为Struts2的底层对request.getAttribute()方法进行了增强,找到 找到就返回,没有找到就会从值栈中去找 86 | 87 | # 三、OGNL特殊字符 88 | 89 | ## 1、#号 90 | 91 | 1)获取context中的数据,在使用标签遍历的时候var中的值 92 | 93 | 2)构建Map集合 94 | 95 | 默认Struts2框架会识别 96 | 97 | ``` 98 | {"aa","bb","cc"}为list集合 99 | {"aa":"11","bb":"22"}为map集合 100 | ``` 101 | 102 | 当使用标签的时候,可以用#构建map集合 103 | 104 | ## 2、%号 105 | 106 | 强制解析OGNL,Struts2的有些便签不能识别OGNL,需要使用%强制解析OGNL 107 | 108 | ## 3、$号 109 | 110 | 1)在配置文件中使用 111 | 112 | A、属性文件:国际化的地方 113 | 114 | B:XML:如文件下载的时候使用 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /docs/JavaEE框架/Struts2/Struts2中的拦截器和标签库.md: -------------------------------------------------------------------------------- 1 | ## 一、写在前面的话 2 | 现在是19年的二月17号,一个很好的日子,可是心情却不是很好。我已经失恋4天,可是我并没有忘记这些回忆。 3 | 在一起的日子总是短暂的,没有人能命令别人做任何事,只有程序会按照你的想法走,这或许就是生活吧,希望各位均安好! 4 | ## 二、Struts2中的拦截器 5 | 1、什么是拦截器 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190217181513641.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 7 | 2、Struts2的执行流程 8 | 客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction();在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(),在代理中执行的execute方法中调用ActionInvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action,根据Action的返回的结果进行页面跳转。 9 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190217181633445.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 10 | 3、自定义拦截器 11 | 12 | ```java 13 | /** 14 | * 自定义的拦截器一 15 | * @author jt 16 | * 17 | */ 18 | public class InterceptorDemo1 extends AbstractInterceptor{ 19 | 20 | @Override 21 | public String intercept(ActionInvocation invocation) throws Exception { 22 | System.out.println("InterceptorDemo1执行了..."); 23 | String obj = invocation.invoke(); 24 | System.out.println("InterceptorDemo1执行结束了..."); 25 | return obj; 26 | } 27 | 28 | } 29 | ``` 30 | 4、拦截器的配置 31 | 32 | ```java 33 | 34 | 35 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | /demo1/demo1.jsp 53 | 54 | 55 | 56 | 59 | 60 | 61 | 62 | /demo2/demo3.jsp 63 | 64 | 65 | ``` 66 | 67 | 5、权限拦截器 68 | 69 | ```java 70 | 71 | /** 72 | * 权限拦截器 73 | * 74 | * @author jt 75 | */ 76 | public class PrivilegeInterceptor extends MethodFilterInterceptor { 77 | 78 | @Override 79 | protected String doIntercept(ActionInvocation invocation) throws Exception { 80 | // 判断session中是否存在用户数据: 81 | User existUser = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser"); 82 | // 判断从session中获取的用户的信息是否为空: 83 | if(existUser == null){ 84 | // 没有登录 85 | // 给出提示信息 86 | ActionSupport actionSupport = (ActionSupport) invocation.getAction(); 87 | actionSupport.addActionError("没有登录!没有权限访问!"); 88 | // 回到登录页面 89 | return actionSupport.LOGIN; 90 | }else{ 91 | // 已经登录 92 | return invocation.invoke(); 93 | } 94 | } 95 | 96 | ``` 97 | 98 | 权限拦截器的配置 99 | 100 | ```java 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | /login.jsp 109 | 110 | 111 | 112 | /jsp/customer/list.jsp 113 | /jsp/customer/add.jsp 114 | customer_find.action 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | /index.jsp 123 | 124 | 125 | 126 | login 127 | 128 | 129 | 130 | 131 | ``` 132 | ## 三、Struts2的标签库 133 | 1、通用标签库 134 | 135 | ```java 136 | 137 | 138 | i 大于 3 139 | 140 | 141 | i 小于 3 142 | 143 | 144 | i 等于 3 145 | 146 | ``` 147 | 148 | ```java 149 | 150 | 151 | 152 |
153 | 154 | -- 155 | 156 |
157 | 158 | 159 | 160 |
161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | ``` 170 | 171 | 2、UI标签库(常用作数据回显) 172 | 173 | ```java 174 |

UI标签

175 |

传统的表单

176 |
177 | 178 | 用户名:
179 | 密码:
180 | 年龄:
181 | 性别:男 182 |
183 | 籍贯:
190 | 爱好:篮球 191 | 足球 192 | 排球 193 | 乒乓球
194 | 介绍:
195 | 196 |
197 | 198 | 199 |

UI标签的表单

200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | ``` 212 | 213 | -------------------------------------------------------------------------------- /docs/JavaEE框架/hibernate/Hibernate之入门.md: -------------------------------------------------------------------------------- 1 | # 一、什么是框架? 2 | 3 | 框架是软件的半成品,已完成部分功能,调用相应的方法,可以简化开发,提高开发效率 4 | 5 | # 二、javaEE三层架构和对应的企业级框架 6 | 7 | 客户端层:HTML+CSS+JS 8 | 9 | ## 1、web层 10 | 11 | 1)servlet+jsp 12 | 13 | 2) SpringMVC 14 | 15 | 3)Strute2 16 | 17 | ## 2、业务层 18 | 19 | 1)javabean 20 | 21 | 2)Spring 22 | 23 | ## 3、持久层 24 | 25 | 1)JDBC 26 | 27 | 2)Hibernate 28 | 29 | 3)Mybatis 30 | 31 | # 三、SSH和SSM 32 | 33 | 这两个都是目前流行的企业级组合开发框架 34 | 35 | SSH是指:Strute2+Spring+Hibernate 36 | 37 | SSM是指:SpringMVC+Spring+Mybatis 38 | 39 | # 四、什么是Hibernate 40 | 41 | 是一个持久层的ORM框架 42 | 43 | # 五、什么是ORM 44 | 45 | Object Ralational Mapping 46 | 47 | 对象关系映射 48 | 49 | 使表和类建立关系,直接操作类相当于操作表 50 | 51 | # 六、hibernate开发步骤 52 | 53 | ## 1、导入所需的jar包 54 | 55 | 1)数据库驱动包 56 | 57 | 2)hibernate所必须包:requied 58 | 59 | 3)日志记录包 60 | 61 | ## 2、建库建表 62 | 63 | ## 3、实体类 64 | 65 | ## 4、创建映射 66 | 67 | 1)映射和实体类在同一个包中 68 | 69 | 2)映射的名字:类名.hbm.xml 70 | 71 | 3)xml的约束本分可在hibernate的核心包中copy 72 | 73 | 4)三个字标签: 74 | 75 | ​ class:属性(name:实体类全路径,table:表名) 76 | 77 | ​ id:(属性:name类名 column:主键字段名),主键与相应的属性建立一一映射的关系 78 | 79 | ​ property(属性同id)——对应除了主键之外的列和类的属性建立一一映射的关系 80 | 81 | 82 | 83 | 实例: 84 | 85 | ```java 86 | 87 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | ``` 108 | 109 | ## 5、hibernate核心配置文件 110 | 111 | 1)在src文件下 112 | 113 | 2)文件名:hibernate.cfg.xml 114 | 115 | 3)xml约束在hibernate核心文件中copy,相应的必要配置可在project下的hibernate.properties下查找 116 | 117 | 4)四个必要参数 118 | 119 | 数据库驱动+url+username+password 120 | 121 | 5)可选配置 122 | 123 | 显示sql+格式化sql+自动建表 124 | 125 | 6)映射文件 126 | 127 | 实例: 128 | 129 | ```java 130 | 131 | 134 | 135 | 136 | 137 | 138 | com.mysql.jdbc.Driver 139 | 140 | 141 | jdbc:mysql:///test 142 | 143 | 144 | root 145 | 146 | 147 | aaaaa123 148 | 149 | 150 | 151 | 152 | org.hibernate.dialect.MySQLDialect 153 | 154 | 155 | 156 | 157 | 158 | true 159 | 160 | 161 | 162 | true 163 | 164 | 165 | 166 | update 167 | 168 | 169 | 170 | 171 | 172 | 173 | ``` 174 | 175 | # 七、工具类hibernateUtils 176 | 177 | ```java 178 | package com.canghe.util; 179 | /** 180 | * 工具类 181 | * @author Administrator 182 | * 183 | */ 184 | 185 | import org.hibernate.Session; 186 | import org.hibernate.SessionFactory; 187 | import org.hibernate.cfg.Configuration; 188 | 189 | public class HibernateUtils { 190 | private static final Configuration configuration; 191 | private static final SessionFactory sessionFactory; 192 | 193 | static { 194 | configuration = new Configuration().configure(); 195 | sessionFactory = configuration.buildSessionFactory(); 196 | } 197 | 198 | public static Session openSission() { 199 | return sessionFactory.openSession(); 200 | } 201 | } 202 | 203 | ``` 204 | 205 | # 八、CURD测试 206 | 207 | ```java 208 | package com.canghe.test; 209 | 210 | import java.io.Serializable; 211 | 212 | import org.hibernate.Session; 213 | import org.hibernate.Transaction; 214 | import org.junit.Test; 215 | 216 | import com.canghe.domain.Customer; 217 | import com.canghe.util.HibernateUtils; 218 | 219 | public class HibernateDemo2 { 220 | @Test 221 | /** 222 | * 增加(保存对象) 223 | */ 224 | public void demo1() { 225 | //获得session链接对象 226 | Session session = HibernateUtils.openSission(); 227 | //开启事务 228 | Transaction transaction = session.beginTransaction(); 229 | //处理 230 | Customer customer = new Customer(); 231 | customer.setCust_name("小一"); 232 | Serializable id = session.save(customer); 233 | System.out.println(id); 234 | //事务提交 235 | transaction.commit(); 236 | //关闭资源 237 | session.close(); 238 | } 239 | 240 | @Test 241 | /** 242 | * 删除 243 | */ 244 | public void demo2() { 245 | Session session = HibernateUtils.openSission(); 246 | Transaction transaction = session.beginTransaction(); 247 | Customer customer = session.get(Customer.class, 4L); 248 | session.delete(customer); 249 | transaction.commit(); 250 | session.close(); 251 | } 252 | 253 | @Test 254 | /** 255 | * 修改 256 | */ 257 | public void demo3() { 258 | Session session = HibernateUtils.openSission(); 259 | Transaction transaction = session.beginTransaction(); 260 | Customer customer = session.get(Customer.class, 5L); 261 | customer.setCust_name("小三"); 262 | customer.setCust_phone("18603016817"); 263 | session.update(customer); 264 | transaction.commit(); 265 | session.close(); 266 | } 267 | @Test 268 | /** 269 | * 查询 270 | */ 271 | public void demo4() { 272 | Session session = HibernateUtils.openSission(); 273 | Transaction transaction = session.beginTransaction(); 274 | //get和load方法的区别,load是延迟加载 275 | Customer customer = session.get(Customer.class, 5L); 276 | System.out.println(customer); 277 | Customer customer2 = session.load(Customer.class, 6L); 278 | System.out.println(customer2); 279 | transaction.commit(); 280 | session.close(); 281 | } 282 | 283 | } 284 | 285 | ``` 286 | 287 | ------ 288 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 289 | 290 | 291 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 292 | 293 | 294 | # 来我的微信公众号玩耍呗:blush: 295 | 296 | 297 | # 扫码无套路关注我的CSDN博客:blush: 298 | -------------------------------------------------------------------------------- /docs/JavaEE框架/hibernate/Hibernate之进阶1——主键生成策略和事务管理.md: -------------------------------------------------------------------------------- 1 | # 一、持久化类的编写规则 2 | 3 | ## 1、什么是持久化? 4 | 5 | 将内存中的数据永久保存到关系型数据库中 6 | 7 | ## 2、什么是持久化类? 8 | 9 | java中的类和数据库表建立了映射关系 10 | 11 | ## 3、持久化类的编写规则 12 | 13 | - 无参构造方法 14 | - 属性需要私有,对私有属性提供公共的set和get方法 15 | - 属性精良使用包装类型(防止基本数据类型默认值为0造成的问题 16 | - 要有一个唯一标识OID与表的主键对应 17 | - 不能使用ffinal修饰(延迟加载代理对象继承了持久化类) 18 | 19 | # 二、Hibernate主键生成策略 20 | 21 | ## 1、主键的类型 22 | 23 | 1)自然主键 24 | 25 | ​ 实体中具体属性(如省份证id) 26 | 27 | 2)代理主键(开发常用) 28 | 29 | ​ 主键本身不是持久化类中的具体属性 30 | 31 | ## 2、主键生成策略 32 | 33 | - increment 34 | 35 | long\short\int类型,hibernate中的自增长,只允许在单线程中使用 36 | 37 | - identity 38 | 39 | long\short\int类型,利用的是数据库的自增长,如mysql 40 | 41 | - sequence 42 | 43 | long\short\int类型,序列,如oracle 44 | 45 | - native 46 | 47 | 本地策略,在identity和sequence中进行自动切换 48 | 49 | - uuid 50 | 51 | 适合字符串,会产生随机的字符串 52 | 53 | - assigned 54 | 55 | hibernate放弃主键管理,需哟啊月用户手动设置 56 | 57 | - foreign 58 | 59 | 一对一主键对应 60 | 61 | # 三、Hibernate持久化类的三中状态 62 | 63 | ## 1、瞬时态 64 | 65 | 无唯一标识UID 66 | 67 | 不被session管理 68 | 69 | 数据库重女无记录 70 | 71 | new对象的时候产生 72 | 73 | ## 2、持久态 74 | 75 | 有UUID 76 | 77 | 被session管理 78 | 79 | 持久化对象可自动更新数据库 80 | 81 | ```java 82 | @Test 83 | /** 84 | * hibernate主键生成策略,以及持久态会自动更新数据表 85 | */ 86 | public void demo2() { 87 | Session session = HibernateUtils.getCurrentSession(); 88 | Transaction transaction = session.beginTransaction(); 89 | // Customer customer = new Customer(); 90 | // customer.setCust_name("脏三"); 91 | Customer customer = session.get(Customer.class, 1l); 92 | customer.setCust_source("小广告"); 93 | // session.save(customer); 94 | transaction.commit(); 95 | } 96 | ``` 97 | 98 | 99 | 100 | ## 3、托管态 101 | 102 | 有OID 103 | 104 | 未被session管理 105 | 106 | # 四、Hibernate的一级缓存 107 | 108 | ## 1、什么是缓存 109 | 110 | 缓存是计算机领域非常通用的概念,介于应用程序和永久性数据存储器(如硬盘上文件或数据库)之间,缓存是将数据放在内存中,降低应用程序直接读写数据库的频率,从而提高应用的运行性能。 111 | 112 | ## 2、Hibernate中的缓存 113 | 114 | 1)以及缓存 115 | 116 | session级别的缓存,hibernate自带缓存,且不可取消 117 | 118 | 2)二级缓存 119 | 120 | sessionFactory级别缓存,需要手动配置才可生效 121 | 122 | ## 3、Hibernate一级缓存 123 | 124 | 1)一级缓存的内部结构 125 | 126 | 在Session接口的实现中包含一系列java集合,构成了缓存 127 | 128 | 快照区:当事务提交时,比较缓存和快照区中数据,当一致的时候不会发送update方法,不一致才会发送update语句,这也解释了为什么hibernate中的持久化类的持久态为什么可以自动更新数据库 129 | 130 | ## 4、缓存的清空 131 | 132 | session.close() 133 | 134 | session.clar():清除所有缓存 135 | 136 | session.evict:清除指定缓存 137 | 138 | # 五、Hibernate的事务管理 139 | 140 | ## 1、什么是事务 141 | 142 | 逻辑上的一组操作,组成这组操作的各个单元,要么一起成功,要么一起失败 143 | 144 | ## 2、事务的四个特性 145 | 146 | ACID 147 | 148 | 1)原子性(A): 149 | 150 | 不可分割的单元 151 | 152 | 2)一致性(C) 153 | 154 | 保证数据整体保持一致状态 155 | 156 | 3)隔离性(I) 157 | 158 | 一个事务的执行不受其他事务的影响 159 | 160 | 4)持久性(D) 161 | 162 | 执行完毕后,数据存到数据库 163 | 164 | ## 3、事务的并发问题 165 | 166 | 1)脏读 167 | 168 | ​ 一个事务读取到另一个事务未提交的数据 169 | 170 | 2)不可重复读 171 | 172 | 一个事务读到了另一个事务已经提交的update的数据,导致在同一个事务中的多次查询结果不一致 173 | 174 | 3)虚读 175 | 176 | 一个事务读到了另一个事务已经提交的insert的数据,导致在同一个事务中的多次查询结果不一致 177 | 178 | ## 4、事务的蛤蜊级别 179 | 180 | 为了解决事务并发的问题 181 | 182 | 1)读未提交(Read Uncommited) 183 | 184 | 不能解决以上读问题 185 | 186 | 2)已读提交(Read Commitied) 187 | 188 | 解决脏读,oracle默认 189 | 190 | 3)可重复读(Rwpeatable Read) 191 | 192 | 解决脏读和不可重复读,mysql默认 193 | 194 | 4)序列化(Serializable) 195 | 196 | 能解决所有事务并发的问题,但是效率较低 197 | 198 | ## 5、Hibernate事务管理 199 | 200 | 考虑到事务是事务应该在sercice层实现,保证调用不同的dao但是是同一个session,可以在工具类中通过sessionFactory对象的getCurrentSession() 方法获得与线程绑定的session,且该session不需要关闭 201 | 202 | 1)先在核心配置文件中配置 203 | 204 | ``` 205 | 206 | 207 | thread 208 | 209 | ``` 210 | 211 | 2)在工具类中修改 212 | 213 | ``` 214 | public static Session getCurrentSession() { 215 | return sessionFactory.getCurrentSession(); 216 | } 217 | ``` 218 | 219 | 220 | 221 | # 六、Hibernate的其他API 222 | 223 | ## 1、Query 224 | 225 | 通过.createQuery(HQL)产生Query,调用query的list()方法执行查询 226 | 227 | 1)基本查询 228 | 229 | ```java 230 | @Test 231 | /** 232 | * 利用query查询所有数据 233 | */ 234 | public void demo3() { 235 | Session session = HibernateUtils.getCurrentSession(); 236 | Transaction transaction = session.beginTransaction(); 237 | Query query = session.createQuery("from Customer"); 238 | List list = query.list(); 239 | for (Customer customer : list) { 240 | System.out.println(customer.getCust_name()); 241 | } 242 | transaction.commit(); 243 | } 244 | ``` 245 | 246 | 2)条件查询 247 | 248 | ```java 249 | @Test 250 | /** 251 | * 利用query条件查询 252 | */ 253 | public void demo4() { 254 | Session session = HibernateUtils.getCurrentSession(); 255 | Transaction transaction = session.beginTransaction(); 256 | Query query = session.createQuery("from Customer where cust_name=? and cust_source=?"); 257 | query.setString(0, "张三"); 258 | query.setString(1, "小广告"); 259 | List list = query.list(); 260 | for (Customer customer : list) { 261 | System.out.println(customer); 262 | } 263 | transaction.commit(); 264 | } 265 | ``` 266 | 267 | 3)分页查询 268 | 269 | ```java 270 | @Test 271 | /** 272 | * 分页查询 273 | */ 274 | public void demo5() { 275 | Session session = HibernateUtils.getCurrentSession(); 276 | Transaction transaction = session.beginTransaction(); 277 | Query query = session.createQuery("from Customer"); 278 | query.setFirstResult(2); 279 | query.setMaxResults(2); 280 | List list = query.list(); 281 | for (Customer customer : list) { 282 | System.out.println(customer); 283 | } 284 | transaction.commit(); 285 | } 286 | ``` 287 | 288 | 289 | 290 | ## 2、 Criteria 291 | 292 | 是一个完全面型对象,可扩展的条件查询API,QBC查询 293 | 294 | 1)查询所有记录 295 | 296 | ```java 297 | @Test 298 | /** 299 | * Criteria查询所有记录 300 | */ 301 | public void demo6() { 302 | Session session = HibernateUtils.getCurrentSession(); 303 | Transaction transaction = session.beginTransaction(); 304 | Criteria criteria = session.createCriteria(Customer.class); 305 | List list = criteria.list(); 306 | for (Customer customer : list) { 307 | System.out.println(customer); 308 | } 309 | transaction.commit(); 310 | } 311 | ``` 312 | 313 | 2)条件查询 314 | 315 | ```java 316 | @Test 317 | /** 318 | * Criteria条件查询 319 | */ 320 | public void demo7() { 321 | Session session = HibernateUtils.getCurrentSession(); 322 | Transaction transaction = session.beginTransaction(); 323 | Criteria criteria = session.createCriteria(Customer.class); 324 | criteria.add(Restrictions.eq("cust_name", "张三")); 325 | criteria.add(Restrictions.eq("cust_source", "小广告")); 326 | List list = criteria.list(); 327 | for (Customer customer : list) { 328 | System.out.println(customer); 329 | } 330 | transaction.commit(); 331 | } 332 | ``` 333 | 334 | 3)分页查询 335 | 336 | ```java 337 | @Test 338 | /** 339 | * Criteria条件查询 340 | */ 341 | public void demo8() { 342 | Session session = HibernateUtils.getCurrentSession(); 343 | Transaction transaction = session.beginTransaction(); 344 | Criteria criteria = session.createCriteria(Customer.class); 345 | criteria.setFirstResult(2); 346 | criteria.setMaxResults(2); 347 | List list = criteria.list(); 348 | for (Customer customer : list) { 349 | System.out.println(customer); 350 | } 351 | transaction.commit(); 352 | } 353 | ``` 354 | 355 | ## 3、SQLQuery 356 | 357 | 用于接收sql语句进行查询 358 | 359 | ------ 360 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 361 | 362 | 363 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 364 | 365 | 366 | # 来我的微信公众号玩耍呗:blush: 367 | 368 | 369 | # 扫码无套路关注我的CSDN博客:blush: 370 | 371 | 372 | 373 | 374 | -------------------------------------------------------------------------------- /docs/JavaEE框架/hibernate/Hibernate之进阶3——查询方式.md: -------------------------------------------------------------------------------- 1 | # 一、OID查询 2 | 3 | 根据对象的OID,即数据表中的主键进行查询某一个特定的对象,比如get和load方法 4 | 5 | ## 1、get方式 6 | 7 | ``` 8 | Customer customer = session.get(Customer.class,1l); 9 | ``` 10 | 11 | ## 2、load方式 12 | 13 | ``` 14 | Customer customer = session.load(Customer.class,1l); 15 | ``` 16 | 17 | ## 3、get和load的区别 18 | 19 | - load采用的是延迟加载 20 | - load返回的是一个代理对象(通过集成持久化类),而get返回的是一个真实对象 21 | - 当查不到结果时,get返回的是null,而load会报异常 22 | 23 | # 二、对象导航检索 24 | 25 | 对象导航检索:Hibernate根据一个已经查询到的对象,获得其关联的对象的一种查询方式。 26 | 27 | ``` 28 | LinkMan linkMan = session.get(LinkMan.class,1l); 29 | Customer customer = linkMan.getCustomer(); 30 | 31 | Customer customer = session.get(Customer.class,2l); 32 | Set linkMans = customer.getLinkMans(); 33 | 34 | ``` 35 | 36 | # 三、HQL检索 37 | 38 | HQL查询:Hibernate Query 39 | Language,Hibernate的查询语言,是一种面向对象的方式的查询语言,语法类似SQL。通过session.createQuery(),用于接收一个HQL进行查询方式 40 | 41 | ## 1、 HQL的简单查询 42 | 43 | ```java 44 | @Test 45 | /** 46 | * HQL的简单查询——查询所有客户 47 | * Hibernate中不支持*的写法 48 | */ 49 | public void demo2() { 50 | Session session = HibernateUtils.getCurrentSession(); 51 | Transaction transaction = session.beginTransaction(); 52 | Query query = session.createQuery("from Customer"); 53 | List list = query.list(); 54 | for (Customer customer : list) { 55 | System.out.println(customer); 56 | } 57 | transaction.commit(); 58 | } 59 | ``` 60 | 61 | ## 2、HQL别名查询 62 | 63 | ```java 64 | @Test 65 | /** 66 | * HQL别名查询 67 | * Hibernate中不支持*的写法 68 | */ 69 | public void demo3() { 70 | Session session = HibernateUtils.getCurrentSession(); 71 | Transaction transaction = session.beginTransaction(); 72 | Query query = session.createQuery("select C from Customer C"); 73 | List list = query.list(); 74 | for (Customer customer : list) { 75 | System.out.println(customer); 76 | } 77 | transaction.commit(); 78 | } 79 | ``` 80 | 81 | ## 3、HQL排序查询 82 | 83 | ```java 84 | @Test 85 | /** 86 | * HQL排序查询(默认升序asc,降序用desc 87 | */ 88 | public void demo4() { 89 | Session session = HibernateUtils.getCurrentSession(); 90 | Transaction transaction = session.beginTransaction(); 91 | List list = session.createQuery("from Customer order by cust_id desc").list(); 92 | for (Customer customer : list) { 93 | System.out.println(customer); 94 | } 95 | transaction.commit(); 96 | } 97 | ``` 98 | 99 | ## 4、HQL条件查询 100 | 101 | ```java 102 | @Test 103 | /** 104 | * HQL条件查询——按位置绑定,类似于sql 105 | */ 106 | public void demo6() { 107 | Session session = HibernateUtils.getCurrentSession(); 108 | Transaction transaction = session.beginTransaction(); 109 | Query query = session.createQuery("from Customer where cust_name=? and cust_source=?"); 110 | query.setParameter(0, "客户1"); 111 | query.setParameter(1, "小广告"); 112 | List list = query.list(); 113 | for (Customer customer : list) { 114 | System.out.println(customer); 115 | } 116 | transaction.commit(); 117 | } 118 | ``` 119 | ```java 120 | @Test 121 | /** 122 | * HQL条件查询——按名称查询 123 | */ 124 | public void demo7() { 125 | Session session = HibernateUtils.getCurrentSession(); 126 | Transaction transaction = session.beginTransaction(); 127 | Query query = session.createQuery("from Customer where cust_name= :aaa and cust_source= :bbb"); 128 | //为参数赋值 129 | query.setParameter("aaa", "客户1"); 130 | query.setParameter("bbb", "小广告"); 131 | List list = query.list(); 132 | for (Customer customer : list) { 133 | System.out.println(customer); 134 | } 135 | transaction.commit(); 136 | } 137 | ``` 138 | 139 | 140 | 141 | ## 5、HQL投影查询 142 | 143 | ```java 144 | @Test 145 | /** 146 | * HQL投影查询——查询对象的某个或者某些属性 147 | * 需要为类起一个别名 148 | */ 149 | public void demo8() { 150 | Session session = HibernateUtils.getCurrentSession(); 151 | Transaction transaction = session.beginTransaction(); 152 | Query query = session.createQuery("select C.cust_name,C.cust_source from Customer C"); 153 | List list = query.list(); 154 | for (Object[] objects : list) { 155 | System.out.println(Arrays.toString(objects)); 156 | } 157 | transaction.commit(); 158 | } 159 | 160 | 161 | @Test 162 | /** 163 | * HQL投影查询——查询对象的某个或者某些属性并将这些属性放入对象中封装 164 | * 利用持久化类提供特定的构造方法 165 | */ 166 | public void demo9() { 167 | Session session = HibernateUtils.getCurrentSession(); 168 | Transaction transaction = session.beginTransaction(); 169 | Query query = session.createQuery("select new Customer(cust_name,cust_source) from Customer"); 170 | List list = query.list(); 171 | for (Customer customer : list) { 172 | System.out.println(customer); 173 | } 174 | transaction.commit(); 175 | } 176 | 177 | ``` 178 | 179 | ## 6、HQL分页查询 180 | 181 | ```java 182 | @Test 183 | /** 184 | * HQL分页查询 185 | * 186 | */ 187 | public void demo10() { 188 | Session session = HibernateUtils.getCurrentSession(); 189 | Transaction transaction = session.beginTransaction(); 190 | Query query = session.createQuery("from LinkMan"); 191 | query.setFirstResult(10); 192 | query.setMaxResults(10); 193 | List list = query.list(); 194 | for (LinkMan linkMan : list) { 195 | System.out.println(linkMan); 196 | } 197 | transaction.commit(); 198 | } 199 | ``` 200 | 201 | ## 7、HQL统计查询 202 | 203 | ```java 204 | @Test 205 | /** 206 | * HQL统计查询 207 | * 聚合函数 208 | * 209 | */ 210 | public void demo11() { 211 | Session session = HibernateUtils.getCurrentSession(); 212 | Transaction transaction = session.beginTransaction(); 213 | Object object = session.createQuery("select count(*) from Customer").uniqueResult(); 214 | System.out.println(object); 215 | transaction.commit(); 216 | } 217 | ``` 218 | 219 | ## 8、HQL分组统计查询 220 | 221 | ```java 222 | @Test 223 | /** 224 | * HQL分组统计查询 225 | * group by 226 | * 227 | */ 228 | public void demo12() { 229 | Session session = HibernateUtils.getCurrentSession(); 230 | Transaction transaction = session.beginTransaction(); 231 | List list = session.createQuery("select cust_source,count(*) from Customer group by cust_source" 232 | + " having count(*)>=2").list(); 233 | for (Object[] objects : list) { 234 | System.out.println(Arrays.toString(objects)); 235 | } 236 | transaction.commit(); 237 | } 238 | 239 | ``` 240 | 241 | 242 | 243 | ## 9、HQL多表查询 244 | 245 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190131153152739.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 246 | 247 | ```java 248 | @Test 249 | /** 250 | * HQL多表查询——普通内连接 251 | */ 252 | public void demo13() { 253 | Session session = HibernateUtils.getCurrentSession(); 254 | Transaction transaction = session.beginTransaction(); 255 | List list = session.createQuery("from Customer c inner join c.linkMan").list(); 256 | for (Object[] objects : list) { 257 | System.out.println(Arrays.toString(objects)); 258 | } 259 | transaction.commit(); 260 | } 261 | 262 | @Test 263 | /** 264 | * HQL多表查询——迫切内连接 265 | * 在inner join后面加fetch,通知Hibernate,可以将另一个对象的数据封装到该对象中 266 | * 在from之前加上distinct 267 | */ 268 | public void demo14() { 269 | Session session = HibernateUtils.getCurrentSession(); 270 | Transaction transaction = session.beginTransaction(); 271 | List list = session.createQuery("select distinct c from Customer c inner join fetch c.linkMan").list(); 272 | for (Customer customer : list) { 273 | System.out.println(customer); 274 | } 275 | transaction.commit(); 276 | } 277 | ``` 278 | 279 | # 四、QBC检索 280 | ------ 281 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 282 | 283 | 284 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 285 | 286 | 287 | # 来我的微信公众号玩耍呗:blush: 288 | 289 | 290 | # 扫码无套路关注我的CSDN博客:blush: 291 | -------------------------------------------------------------------------------- /docs/JavaEE框架/hibernate/eclipse中配置XML提示.md: -------------------------------------------------------------------------------- 1 | ## 一、问题原油 2 | 当我们在eclipse中编写XML时,需要出来提示信息(前提是没有联网),那么就需要进行用户自定义配置相关信息、 3 | ## 二、步骤 4 | 这里我以配置Hibernate框架 中的XML为例子 5 | ### 1、将网络地址复制 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190127142330842.png) 7 | ### 2、打开windows下的个性设置profenrencese 8 | 如图,依次找到用户自定义设置 9 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190127142602526.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 10 | 点击add 11 | ### 3、add页面配置 12 | 将刚复制的网络URI地址放入keys中,type类型选择URI,location路径选择对应的路径,比如我这里对应的是hibernate-mapping-3.0的路径,需要在hibernate的jar包中找到该配置文件 13 | ### 4、完成配置 14 | ------ 15 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 16 | 17 | 18 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 19 | 20 | 21 | # 来我的微信公众号玩耍呗:blush: 22 | 23 | 24 | # 扫码无套路关注我的CSDN博客:blush: 25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/Spring Boot核心技术-笔记.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/Spring Boot核心技术-笔记.pdf -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/2018-02-04_123955.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/2018-02-04_123955.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/concrete-bindings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/concrete-bindings.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/legacy.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/template-engine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/template-engine.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180129151045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180129151045.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180129151112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180129151112.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180129224104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180129224104.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180130161620.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180130161620.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180131220946.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180131220946.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180131221411.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180131221411.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180203164743.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180203164743.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180203181108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180203181108.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180203181751.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180203181751.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180211130621.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180211130621.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180211130721.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180211130721.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180211134506.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180211134506.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180226173408.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180226173408.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180226173527.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180226173527.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180226180347.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180226180347.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180226180504.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180226180504.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180228135513.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180228135513.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180301142915.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180301142915.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180302114401.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180302114401.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180302144835.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180302144835.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180302144910.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180302144910.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180302221835.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180302221835.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180303145450.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180303145450.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180303145531.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180303145531.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180303165113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180303165113.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180305194443.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180305194443.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180306105412.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180306105412.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180306145727.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180306145727.png -------------------------------------------------------------------------------- /docs/JavaEE框架/springboot/images/搜狗截图20180306145855.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaEE框架/springboot/images/搜狗截图20180306145855.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Ajax/Ajax常用用法.md: -------------------------------------------------------------------------------- 1 | # 一、ajax是什么 2 | 3 | 异步的脚本,在整体页面不刷新的情况下,完成与后台数据交互,并根据返回数据,局部刷新页面 4 | 5 | # 二、ajax常用场合 6 | 7 | 1、表单验证:如验证用户名是否可用 8 | 9 | 2、页面拼接显示 10 | 11 | 3、前后端分离式的网站结构 12 | 13 | # 三、ajax常见使用格式 14 | 15 | ## 1、基础格式 16 | 17 | ``` 18 | 语法: $.ajax({ 19 | url:"需要访问的后台方法的地址", 20 | type:"post", //数据传递的格式, post或get 21 | data: {}, //需要携带到后台的请求参数 22 | dataType: "", //参数的数据格式, 例如"json" 23 | success:fucntion(data){ 24 | //后台响应成功后需要执行的回调函数 25 | 26 | } 27 | }); 28 | ``` 29 | 30 | ## 2. post格式(常用) 31 | 32 | ``` 33 | //表单验证 34 | $("[name='userName']").bind("blur", function(){ 35 | //获取数据 36 | var userName = $("[name='userName']").val().trim(); 37 | //关闭异步 38 | $.ajaxSettings.async = false; 39 | //使用ajax访问后台, 查询用户名是否存在 40 | //ajax post格式 41 | $.post( 42 | "${pageContext.request.contextPath }/checkUserName", //地址 43 | { 44 | userName:userName 45 | }, 46 | //"userName="+userName, //参数(传给后台的参数) 47 | //"${pageContext.request.contextPath }/checkUserName?userName="+userName, 48 | function(data){//data是后台传过来的参数,也可以是HTML页面 49 | //辅助变量 50 | var msg = "√"; 51 | var color = "green"; 52 | //判断 53 | if(data==0){ 54 | msg = "用户名已存在"; 55 | color = "red"; 56 | flag = false; 57 | } 58 | 59 | $("[name='userName']").parent().next().html(msg).css("color", color); 60 | } 61 | ); 62 | //开启异步 63 | $.ajaxSettings.async = true; 64 | 65 | 66 | } 67 | ``` 68 | 69 | ## 3、get格式 70 | 71 | ``` 72 | $.get( 73 | "${pageContext.request.contextPath }/checkUserName?userName="+userName, 74 | function(data){ 75 | //辅助变量 76 | var msg = "√"; 77 | var color = "green"; 78 | //判断 79 | if(data==0){ 80 | msg = "用户名已存在"; 81 | color = "red"; 82 | flag = false; 83 | } 84 | $("[name='userName']").parent().next().html(msg).css("color", color); 85 | } 86 | ); 87 | ``` 88 | 89 | # 四、使用ajax进行页面拼接 90 | 91 | ## 1、ajax局部刷新函数 92 | 93 | 使用该函数可以做到,将请求通过ajax传递给后台并携带页面需要传递到后台的参数,这个后台就是处理该请求的servlet,吼他接收到了请求,需要传递给页面一个消息,跳转到需要的页面。当然这里可以理解为后台传递给了页面一个页面作为参数data,然后tojump方法接收到该data,将该页面显示在我们需要指定的区域,这个时候相当于完成了局部刷新(记住ajax的执行过程) 94 | 95 | ``` 96 | //ajax局部页面刷新 97 | function toJump(url, param) { 98 | //alert(url+":"+param); 99 | $.post( 100 | webroot+url, //拼接绝对路径 101 | param, 102 | function(data){ 103 | //alert(data); 104 | $("#main").html(data); //将id main中的内容替换成data接收到的页面 105 | }, 106 | "html" //表示, data接收的数据类型是页面 107 | ); 108 | } 109 | ``` 110 | 111 | 比如我要将这个请求给到queryOne这个servlet,不携带任何参数,那么该后台接收到请求之后做什么呢? 112 | 113 | ``` 114 | //跳转到个人中心显示页(将页面信息作为参数传给页面 115 | response.sendRedirect(request.getContextPath()+"/page/user/info.jsp"); 116 | ``` 117 | 118 | 很简单,只需要跳转到需要显示的页面,这里理解为跳转该页面为将该页面作为data参数返回给到页面 119 | 120 | ## 2、调用函数,实现局部显示 121 | 122 | 这个时候在页面中调用toJump("queryOne");函数那么就可以将该页面放在我们想放的范围内显示了 -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/HTML&CSS/webstorm上导入文件中文乱码问题解决.md: -------------------------------------------------------------------------------- 1 | ## 一、出现如下错误乱码 2 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127183315937.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 3 | 4 | ## 解决办法 5 | 1、右键——file encoding 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127183448521.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 7 | 2、![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127183513756.png) 8 | 9 | 3、![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127183532563.png) 10 | 11 | 3、再右键选择GBK![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127183553310.png) 12 | 13 | 4、![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127183633499.png) 14 | 15 | 5、完成 16 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127183651264.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 17 | 18 | -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/HTML&CSS/webstorm设置黑色主题及相关的编码和显示设置.md: -------------------------------------------------------------------------------- 1 | ## 设置黑色主题 2 | 1、file——setting 3 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127184239622.png) 4 | 5 | 2、找到Appearance 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127184355219.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 7 | 8 | 3、选择黑色主题,注意箭头一定打勾 9 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127185150491.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 10 | 箭头处设置的是在代码编辑区左边项目的字体样式 11 | 12 | 注意这个一定要save as 13 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127184600954.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 14 | 15 | 16 | ## 设置代码区字体样式 17 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127185041791.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 18 | 19 | ## 设置编码为UTF-8 20 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127185328289.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 21 | 22 | 都设置成UTF-8 23 | -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/HTML&CSS/表单.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/HTML&CSS/表单.jpg -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/HTML&CSS/表单.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/HTML&CSS/表单.xmind -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/JavaScript/JS中的数据类型转换.md: -------------------------------------------------------------------------------- 1 | ## 1、普通转换 2 | parseInt() parseFloat() 3 | ## 2、强制转换Boolean() 4 | 可以将所有的数据类型转换为布尔值 5 | 1、字符砖 6 | 空字符串——false 7 | 其他——true 8 | 2、数值 9 | 0——false 10 | 其他——true 11 | 3、变量值 12 | null或者未定义——false 13 | 其他——true 14 | ## 3、开发中常用到 15 | if(!num)直接写变量代表的意思是,如果如果num存在值,那么执行下一步操作,首先num未定义会变成false,然后加上感叹号就变成了true 16 | -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/JavaScript/xmind/JavaScript对象及初识面向对象.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/JavaScript/xmind/JavaScript对象及初识面向对象.xmind -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/JavaScript/xmind/JavaScript操作DOM对象.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/JavaScript/xmind/JavaScript操作DOM对象.xmind -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/JavaScript/思维导图图片/JavaScript对象及初识面向对象.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/JavaScript/思维导图图片/JavaScript对象及初识面向对象.jpg -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/JavaScript/思维导图图片/JavaScript操作DOM对象.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/JavaScript/思维导图图片/JavaScript操作DOM对象.jpg -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/eclipse中将JSP文件的默认字符编码设置成UTF-8.md: -------------------------------------------------------------------------------- 1 | ## 一、问题描述 2 | 在eclipse中新建jsp文件,默认的字符编码是ISO-8859-1,我们需要转换成utf-8,但是不是每次都是在jsp文件中改charset的值,而是在新建jsp的时候就进行更改 3 | ![默认字符编码](https://img-blog.csdnimg.cn/20181217234152503.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 4 | ## 二、设置UTF-8编码 5 | windouw——proferences——搜索jsp——jsp files 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217234508682.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 7 | 将Encoding改成UTF-8即可 8 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217234547464.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 9 | 这样再新建jsp的时候就更改成功了! 10 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217234739772.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/在javaEE中外部的js文件如何和页面之间传递参数.md: -------------------------------------------------------------------------------- 1 | 问题:当我们在进行javaEE开发时(原生态开发,未利用框架),需要为页面引入外部JS脚本,但是在外部JS脚本中是没法利用EL表达式拿到我们想要的参数的,一个最简单的例子就是:当我们在页面点击某个按钮的时候,想要进行跳转,在外部JS中,需要改变location的值,此时需要用到工程的根目录 2 | 3 | 我们都知道在页面中可以利用EL表达式: 4 | 5 | ```java 6 | ${pageContext.request.contextPath } 7 | ``` 8 | 就可以拿到工程根目录,如何在外部JS中也拿到页面的参数呢?方法很简单 9 | ## 1、在外部JS中声明需要用到的变量,如工程根目录 10 | 有时候将所有JS都需要用到的js变量抽出去,携程project.js 11 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019011816234686.png) 12 | ## 2、在页面body之后引入所有要使用到的外部js文件 13 | 一定要在body之后。这是页面加载问题 14 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190118162031665.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 15 | ## 3、在引入外部js的最后协商页面内部js代码 16 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190118162131509.png) 17 | ## 4、这个时候你的外部JS就可以使用该变量了 18 | 19 | 20 | ## 总结 21 | 外部js要想使用页面的某一变量,需要先在js里面声明,然后加载到页面,最后在页面的最后为该变量进行赋值即可 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/Cookie&Session.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/Cookie&Session.doc -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/cookie的购物.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/cookie的购物.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/session.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/session.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/session域.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/session域.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/显示上次访问时间.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/显示上次访问时间.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/购物过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Cookie&Session/购物过程.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/HTTP协议详解.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/HTTP协议详解.txt -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/Http协议和Tomcate服务器.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/Http协议和Tomcate服务器.doc -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/http响应.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/http响应.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/http请求.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/http请求.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/last-modified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/last-modified.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/抓包工具/httpwatch9.3.35.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/Http协议和Tomcate服务器/抓包工具/httpwatch9.3.35.zip -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/javaEE三层架构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/javaEE三层架构.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/jsp&el&jstl.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/jsp&el&jstl.doc -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/jsp的出现.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/jsp的出现.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/out缓冲区.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/out缓冲区.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/显示商品列表.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/显示商品列表.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/案例-显示商品列表.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/案例-显示商品列表.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/静态与动态包含区别.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/静态与动态包含区别.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/页面包含.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/JSP/页面包含.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/javaweb核心之Servlet.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/javaweb核心之Servlet.doc -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/servlet模板.txt: -------------------------------------------------------------------------------- 1 | package ${enclosing_package}; 2 | import java.io.IOException; 3 | import javax.servlet.ServletException; 4 | import javax.servlet.http.HttpServlet; 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpServletResponse; 7 | 8 | public class ${primary_type_name} extends HttpServlet { 9 | 10 | public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 11 | response.getWriter().write("hello haohao..."); 12 | } 13 | 14 | public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 15 | doGet(request, response); 16 | } 17 | } -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/servlet访问过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/servlet访问过程.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/servlet访问过程2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/servlet访问过程2.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/在javaEE中外部的js文件如何和页面之间传递参数.md: -------------------------------------------------------------------------------- 1 | 问题:当我们在进行javaEE开发时(原生态开发,未利用框架),需要为页面引入外部JS脚本,但是在外部JS脚本中是没法利用EL表达式拿到我们想要的参数的,一个最简单的例子就是:当我们在页面点击某个按钮的时候,想要进行跳转,在外部JS中,需要改变location的值,此时需要用到工程的根目录 2 | 3 | 我们都知道在页面中可以利用EL表达式: 4 | 5 | ```java 6 | ${pageContext.request.contextPath } 7 | ``` 8 | 就可以拿到工程根目录,如何在外部JS中也拿到页面的参数呢?方法很简单 9 | ## 1、在外部JS中声明需要用到的变量,如工程根目录 10 | 有时候将所有JS都需要用到的js变量抽出去,携程project.js 11 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019011816234686.png) 12 | ## 2、在页面body之后引入所有要使用到的外部js文件 13 | 一定要在body之后。这是页面加载问题 14 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190118162031665.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 15 | ## 3、在引入外部js的最后协商页面内部js代码 16 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190118162131509.png) 17 | ## 4、这个时候你的外部JS就可以使用该变量了 18 | 19 | 20 | ## 总结 21 | 外部js要想使用页面的某一变量,需要先在js里面声明,然后加载到页面,最后在页面的最后为该变量进行赋值即可 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/域对象.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/域对象.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/用户登录.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/javaweb核心之Servlet/用户登录.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/HttpServletRequest.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/HttpServletRequest.doc -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/request的乱码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/request的乱码.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/注册功能.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/注册功能.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/转发.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/转发.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/转发和重定向.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/request/转发和重定向.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/HttpServletResponse.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/HttpServletResponse.doc -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/response乱码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/response乱码.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/response运行过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/response运行过程.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/一次性验证码/CheckImgServlet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/一次性验证码/CheckImgServlet.java -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/一次性验证码/new_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/一次性验证码/new_words.txt -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/重定向.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/response/重定向.png -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/滤器&监听器/监听器.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/滤器&监听器/监听器.txt -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/知识点/滤器&监听器/过滤器.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/Java_web/知识点/滤器&监听器/过滤器.txt -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/Java_web/解决在Eclipse新建web项目没有自动生成web.xml和在新建servlet的时候自动生成web.xml配置.md: -------------------------------------------------------------------------------- 1 | ## 一、在Eclipse新建web项目没有自动生成web.xml解决办法 2 | ## 方法一:在Eclipse新建web项目的时候重要参数上打勾 3 | 1、file--new-Dynamic Web Project 4 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160226360.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 5 | 2、next下一步 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160315960.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 7 | 8 | 3、next下一步 9 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160348211.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 10 | 11 | 4、关键:这里一定要打勾,默认是没有打勾的![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160416976.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 12 | 13 | 5、建好后可以点开就有web.xml了 14 | 15 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160544786.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 16 | 17 | ## 方法二:在已经建好的项目上加上web.xml 18 | 1.项目名称右键-->Properties: 19 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160700888.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 20 | 2.点击Project Facets,取消选中Dynamic Web Module,点击Apply 21 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160730677.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 22 | 3.重新选中Dynamic Web Module后,会出现Further configuration available... 23 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160754808.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 24 | 25 | 4.点击Further configuration available...,选中Generate web.xml deployment descriptor,点击ok,Apply后,在WEB-INF下生成了web.xml。 26 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160812893.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 27 | 28 | ## Eclipse在新建servlet的时候自动生成web.xml配置 29 | 在新建web项目的时候: 30 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214161006245.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 31 | 我们新建默认用的是Tomact7.0,里面用的是servlet3.0版本默认的是使用注解配置,在新建dynamic web project 时,dynamic web module version选择2.5就ok了。 32 | 选择2.6即可 33 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214161120451.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 34 | 这样就自动生成了servlet的文本.xml的自动配置t -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/easyUI/jQuery+EasyUI开发指南.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/easyUI/jQuery+EasyUI开发指南.pdf -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/jQuery/Xmind/jQuery中的事件.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/jQuery/Xmind/jQuery中的事件.xmind -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/jQuery/Xmind/jQuery选择器.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/jQuery/Xmind/jQuery选择器.xmind -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/jQuery/思维导图JPG/jQuery中的事件.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/jQuery/思维导图JPG/jQuery中的事件.jpg -------------------------------------------------------------------------------- /docs/JavaWeb前后端交互技术基础/jQuery/思维导图JPG/jQuery选择器.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/JavaWeb前后端交互技术基础/jQuery/思维导图JPG/jQuery选择器.jpg -------------------------------------------------------------------------------- /docs/Java_basic/java_basic_API/多线程.md: -------------------------------------------------------------------------------- 1 | 较为详细扩展的文章可参见这篇博客: 2 | https://blog.csdn.net/qq_34337272/article/details/79640870 3 | 4 | ## 一、线程定义 5 | 线程是进程中执行运算的最小单位,是进程内部的一个执行单元 6 | 1、多个线程同时进行,采用枪占的机制,单核计算机一个时间只有一个线程执行,采用枪占资源的方式 7 | ## 二、多线程的优势 8 | 1、最大限度的提高计算机系统的利用效率 9 | 2、充分利用网络和系统资源 10 | ## 三、主线程 11 | main方法为主线程入口 12 | 主线程必须最后执行 13 | ## 四、创建线程 14 | 1、继承Thread类 15 | 重写run方法 16 | 测试中只需要创建线程对象即可 17 | 2、实现Runnable接口 18 | 测试诶中创建线程时候,需要 19 | Thread thread=new Thread(m,name); 20 | m为线程类的实例 21 | name为此线程的名字 22 | 23 | **两种方法的区别** 24 | Thread方法较简单,适用于单继承 25 | Runnable很好的避免了java中的单根继承,并且使用这种方法可以共享数据资源。 26 | ## 五、线程的状态 27 | 1、新生(创建) 28 | new但是还没调用start方法 29 | 2、就绪 30 | 调用了start方法,但是未抢到CPU的资源 31 | 3、运行 32 | 执行run方法 33 | 4、阻塞 34 | 是一种不可运行状态,造成阻塞的原因: 35 | *执行Thread.sleep()方法 36 | *IO操作时,IO操作未完成 37 | *需要得到琐,但是琐被占用 38 | 5、死亡 39 | 退出main方法 40 | ## 六、线程调度 41 | 1、线程优先级 42 | ①设置优先级 43 | setPriority(int guid) 44 | ②1-10表示优先级,10最高,5为默认,每一个优先级对应Thread的一个公用静态常量 45 | NORM_PRIORITY=5 46 | MIN_PRIORITY=1 47 | MAX_PRIORITY=10 48 | 线程的优先级只是表示一个抢到资源的概率,不一定每次优先级高的都先运行,只是表示有这种可能性 49 | 2、实现线程调度的方法 50 | ①sleep 51 | 静态方法 52 | 要用Thread.sleep(1000);括号内为毫秒数 53 | 强制让线程休眠 54 | ②join 55 | 非静态方法 56 | 线程名.join(); 57 | 谁调用join方法,该线程就先执行完,也有可能出现要加入的线程在未达到join条件时就已执行完毕,这时候join就不起作用了。 58 | ③yield 59 | 静态方法 60 | Thread.yield 61 | 线程的礼让 62 | 可以让当前线程暂停执行,允许其他线程执行,但该线程任然可运行状态,此时,系统选择其他或更高优先级的线程执行,如无其他,则该线程继续执行, 63 | ## 七、线程同步 64 | 高并发安全性问题:马上双十一了,很多多人同一时间点会访问同一数据,这时候线程安全就很重要了 65 | 线程同步: 66 | 所谓线程同步就是当两个或多个线程要访问同一资源时,需要以某种顺序来确保某一时刻只能一个线程使用的方式 67 | 1、同步代码块 68 | 在访问修饰符前或后加synchronized,比如这个例子 69 | 70 | ```java 71 | package demo4; 72 | /* 73 | * 线程同步测试 74 | * 1、同步代码块 75 | */ 76 | public class MyThread implements Runnable { 77 | private int count=10;//显示余票 78 | private int piao;//显示抢到几张票 79 | @Override 80 | public void run() { 81 | while(true) { 82 | synchronized (this) { 83 | if (count <= 0) { 84 | break; 85 | } 86 | count--; 87 | piao++; 88 | //模拟网络延迟 89 | try { 90 | Thread.sleep(2000); 91 | } catch (InterruptedException e) { 92 | // TODO Auto-generated catch block 93 | e.printStackTrace(); 94 | } 95 | System.out.println(Thread.currentThread().getName() + "抢到弟" + piao + "张票,剩余" + count + "张票!"); 96 | } 97 | } 98 | 99 | } 100 | 101 | } 102 | 103 | ``` 104 | 注意:eclipse自动生成同步代码块的快捷键 105 | 右键——Surround with——synchronized... 106 | 2、同步方法 107 | 108 | ```java 109 | package demo5; 110 | /* 111 | * 线程同步测试 112 | * 2、同步方法 113 | */ 114 | public class MyThread implements Runnable { 115 | private int count=10;//显示余票 116 | private int piao;//显示抢到几张票 117 | boolean flag=true; 118 | @Override 119 | public void run() { 120 | while(flag) { 121 | buy(); 122 | } 123 | } 124 | synchronized public void buy() { 125 | 126 | if (count <= 0) { 127 | flag=false; 128 | return; 129 | } 130 | 131 | //模拟网络延迟 132 | try { 133 | Thread.sleep(1000); 134 | } catch (InterruptedException e) { 135 | // TODO Auto-generated catch block 136 | e.printStackTrace(); 137 | } 138 | count--; 139 | piao++; 140 | System.out.println(Thread.currentThread().getName() + "抢到弟" + this.piao + "张票,剩余" + this.count + "张票!"); 141 | } 142 | 143 | } 144 | 145 | ``` 146 | 注意:并不是同步的代码越多越好,容易出现死锁现象 147 | 148 | ## 线程同步涉及的类和方法(重要) 149 | 1、ArryLit类的add方法:是非线程同步,不安全的 150 | 2、StringBuffer同步安全 151 | StringBuilder非同步,不安全 152 | 3、线程安全的:能同步,共享资源,安全 153 | 非线程安全:效率高 154 | 4、HashMap:建只能有一个为空,值不能为空,不安全 155 | Hashtable:键值都不允许为空,安全 156 | -------------------------------------------------------------------------------- /docs/Java_basic/算法/N个人站圈报数算法问题.md: -------------------------------------------------------------------------------- 1 |  2 | 这是一道算法面试题 3 | --- 4 | layout: post 5 | title: N个人站圈报数算法问题 6 | categories: Java语言核心 7 | description: Java 网络编程技术 8 | keywords: Java-basic, 算法 9 | --- 10 | 11 | 本系列文章在 持(jing)续(chang)更(duan)新(geng)中,欢迎有兴趣的童鞋们关注。 12 | 13 | ```java 14 | import java.util.Scanner; 15 | 16 | public class Test1 { 17 | public static void main(String[] args) { 18 | Scanner input = new Scanner(System.in); 19 | int n;// 人数 20 | int m;// 报名数(报到的出列) 21 | 22 | 23 | System.out.print("请输入n:"); 24 | n = input.nextInt(); 25 | System.out.print("请输入m:"); 26 | m = input.nextInt(); 27 | int num = n;// 剩余人数 28 | int flag = 0;// 标记报名数,每报一次就加1 29 | int[] arr = new int[n];// 数组,刚开始所有数都为0,0代表存货,1代表删除该元素 30 | // 只要剩余人数大于等于1个人,就一直循环 31 | while (num >1) { 32 | for (int i = 0; i < n; i++) { 33 | if (arr[i] == 0) { 34 | flag++; 35 | } 36 | if (flag == m) { 37 | arr[i] = 1; 38 | System.out.println("第" + (i + 1) + "次出列:编号" + (i+1)); 39 | flag=0; 40 | num--; 41 | } 42 | 43 | } 44 | } 45 | 46 | for (int i = 0; i < n; i++) { 47 | //最后编号为0代表存活的 48 | if(arr[i]==0) { 49 | System.out.println("最后剩下:" + (i+1)); 50 | } 51 | 52 | } 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 方式二: 59 | 60 | ```sql 61 | import java.util.LinkedList; 62 | import java.util.List; 63 | import java.util.Scanner; 64 | /** 65 | * 使用集合解决 66 | * @author Administrator 67 | * 68 | */ 69 | public class Test { 70 | public static void main(String[] args) { 71 | Scanner input = new Scanner(System.in); 72 | // 人数 73 | int n; 74 | // 报名数(报到的出列) 75 | int m; 76 | //用来记录报名 77 | int count=0; 78 | System.out.print("请输入人数:"); 79 | n = input.nextInt(); 80 | System.out.print("请输入报到出列的数字:"); 81 | m = input.nextInt(); 82 | //集合放人和出列 83 | List list = new LinkedList(); 84 | for (int i = 1; i <=n; i++) { 85 | list.add(i); 86 | } 87 | 88 | while(list.size()>1) { 89 | for (int i = 0; i Javastudy,期待您的加入:blush: 112 | 113 | 114 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 115 | 116 | 117 | # 来我的微信公众号玩耍呗:blush: 118 | 119 | 120 | # 扫码无套路关注我的CSDN博客:blush: 121 | 122 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/c3p0连接池/c3p0连接池的用法.md: -------------------------------------------------------------------------------- 1 | # c3p0连接池的用法 2 | 3 | ## 1、导入c3p0jar包 4 | 5 | c3p0-0.9.1.2.jar 6 | 7 | ## 2、xml配置文件 8 | 9 | 在src的目录下, 创建一个名称为 c3p0-config.xml的配置文件, 配置信息如下: 10 | 11 | 1)最基本配置*四个连接数据库必须的参数) 12 | 13 | ```sql 14 | 15 | 16 | 17 | com.mysql.jdbc.Driver 18 | jdbc:mysql://106.13.43.205:3306/test 19 | root 20 | aaaaa123 21 | 22 | 23 | ``` 24 | 25 | 2)复杂的配置信息 26 | 27 | ```sql 28 | 29 | 30 |   31 |         com.mysql.jdbc.Driver   32 |         jdbc:mysql://localhost:3306/test   33 |         root   34 |         123456   35 |                 36 |         5   37 |                 38 |         10   39 |                 40 |         5   41 |                 42 |         20   43 |                 44 |         30   45 |                 46 |         1000   47 |                 48 |          false   49 |       50 | 51 | ``` 52 | 53 | ## 3、创建数据源DataSourceUtils(工具类) 54 | 55 | ```java 56 | package com.canghe.utils; 57 | 58 | import java.sql.Connection; 59 | import java.sql.ResultSet; 60 | import java.sql.SQLException; 61 | import java.sql.Statement; 62 | 63 | import javax.sql.DataSource; 64 | 65 | import com.mchange.v2.c3p0.ComboPooledDataSource; 66 | 67 | public class DataSourceUtils { 68 | 69 | private static DataSource dataSource = new ComboPooledDataSource(); 70 | 71 | private static ThreadLocal tl = new ThreadLocal(); 72 | 73 | // 直接可以获取一个连接池 74 | public static DataSource getDataSource() { 75 | return dataSource; 76 | } 77 | 78 | // 获取连接对象 79 | public static Connection getConnection() throws SQLException { 80 | 81 | Connection con = tl.get(); 82 | if (con == null) { 83 | con = dataSource.getConnection(); 84 | tl.set(con); 85 | } 86 | return con; 87 | } 88 | 89 | // 开启事务 90 | public static void startTransaction() throws SQLException { 91 | Connection con = getConnection(); 92 | if (con != null) { 93 | con.setAutoCommit(false); 94 | } 95 | } 96 | 97 | // 事务回滚 98 | public static void rollback() throws SQLException { 99 | Connection con = getConnection(); 100 | if (con != null) { 101 | con.rollback(); 102 | } 103 | } 104 | 105 | // 提交并且 关闭资源及从ThreadLocall中释放 106 | public static void commitAndRelease() throws SQLException { 107 | Connection con = getConnection(); 108 | if (con != null) { 109 | con.commit(); // 事务提交 110 | con.close();// 关闭资源 111 | tl.remove();// 从线程绑定中移除 112 | } 113 | } 114 | 115 | // 关闭资源方法 116 | public static void closeConnection() throws SQLException { 117 | Connection con = getConnection(); 118 | if (con != null) { 119 | con.close(); 120 | } 121 | } 122 | 123 | public static void closeStatement(Statement st) throws SQLException { 124 | if (st != null) { 125 | st.close(); 126 | } 127 | } 128 | 129 | public static void closeResultSet(ResultSet rs) throws SQLException { 130 | if (rs != null) { 131 | rs.close(); 132 | } 133 | } 134 | 135 | } 136 | 137 | ``` 138 | 139 | 140 | 141 | ## 4、使用DButils进行连接并对数据库进行操作 142 | 143 | ```java 144 | QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); 145 | String sql = "select * from product"; 146 | List productList = null; 147 | try { 148 | productList = runner.query(sql, new BeanListHandler(Product.class)); 149 | } catch (SQLException e) { 150 | e.printStackTrace(); 151 | } 152 | ``` 153 | 154 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/dao/BaseDao.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/dao/BaseDao.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/dao/PetDao.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/dao/PetDao.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/dao/impl/PetDaoImpl.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/dao/impl/PetDaoImpl.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/entity/Pet.java: -------------------------------------------------------------------------------- 1 | package entity; 2 | 3 | public class Pet { 4 | private int id; 5 | private String name; 6 | private int health; 7 | private int love; 8 | private String strain; 9 | public int getId() { 10 | return id; 11 | } 12 | public void setId(int id) { 13 | this.id = id; 14 | } 15 | public String getName() { 16 | return name; 17 | } 18 | public void setName(String name) { 19 | this.name = name; 20 | } 21 | public int getHealth() { 22 | return health; 23 | } 24 | public void setHealth(int health) { 25 | this.health = health; 26 | } 27 | public int getLove() { 28 | return love; 29 | } 30 | public void setLove(int love) { 31 | this.love = love; 32 | } 33 | public String getStrain() { 34 | return strain; 35 | } 36 | public void setStrain(String strain) { 37 | this.strain = strain; 38 | } 39 | public Pet() { 40 | super(); 41 | } 42 | public Pet(int id, String name, int health, int love, String strain) { 43 | super(); 44 | this.id = id; 45 | this.name = name; 46 | this.health = health; 47 | this.love = love; 48 | this.strain = strain; 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/service/PetService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/service/PetService.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/service/impl/PetServiceImpl.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/service/impl/PetServiceImpl.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/test/Test.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/基本概念/test/Test.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/resouces/database.properties: -------------------------------------------------------------------------------- 1 | driver=com.mysql.jdbc.Driver 2 | url=jdbc:mysql://localhost:3306/epet?useUnicade=true&characterEncoding=UTF-8 3 | user=root 4 | password=aaaaa123 -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/BaseDao.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/BaseDao.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/MasterDao.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/MasterDao.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/PetDao.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/PetDao.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/impl/MasterDaoImpl.java: -------------------------------------------------------------------------------- 1 | package dao.impl; 2 | 3 | import java.sql.SQLException; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | import dao.BaseDao; 8 | import dao.MasterDao; 9 | import entity.Master; 10 | 11 | public class MasterDaoImpl extends BaseDao implements MasterDao{ 12 | PetDaoImpl petDaoImpl = new PetDaoImpl(); 13 | @Override 14 | public List findallMaster() { 15 | List listMaster = null; 16 | String sql ="SELECT id,`name`,`password`,money FROM `master`"; 17 | Object[] params = null; 18 | rs=this.executQuery(sql, params); 19 | if(null !=rs) { 20 | listMaster=new ArrayList(); 21 | try { 22 | while(rs.next()) { 23 | Master master = new Master(); 24 | int masterid= rs.getInt("id"); 25 | master.setId(masterid); 26 | master.setName(rs.getString("name")); 27 | master.setPassword(rs.getString("password")); 28 | master.setMoney(rs.getInt("money")); 29 | master.setListPet(petDaoImpl.findAllPetByMasterId(masterid)); 30 | listMaster.add(master); 31 | } 32 | } catch (SQLException e) { 33 | e.printStackTrace(); 34 | }finally { 35 | this.closeAll(conn, pstmt, rs); 36 | } 37 | } 38 | return listMaster; 39 | } 40 | @Override 41 | public int addMaster(Master master) { 42 | int result = -1; 43 | String sql = "INSERT INTO `master` (id,`name`,`password`,money) VALUES (DEFAULT,?,?,?)"; 44 | Object[] params= {master.getName(),master.getPassword(),master.getMoney()}; 45 | result=this.exxcutUpdate(sql, params); 46 | return result; 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/impl/PetDaoImpl.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/dao/impl/PetDaoImpl.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/entity/Master.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/entity/Master.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/entity/Pet.java: -------------------------------------------------------------------------------- 1 | package entity; 2 | 3 | public class Pet { 4 | private int id; 5 | private String name; 6 | private int health; 7 | private int love; 8 | private String strain; 9 | private int masterid; 10 | public int getId() { 11 | return id; 12 | } 13 | public void setId(int id) { 14 | this.id = id; 15 | } 16 | public String getName() { 17 | return name; 18 | } 19 | public void setName(String name) { 20 | this.name = name; 21 | } 22 | public int getHealth() { 23 | return health; 24 | } 25 | public void setHealth(int health) { 26 | this.health = health; 27 | } 28 | public int getLove() { 29 | return love; 30 | } 31 | public void setLove(int love) { 32 | this.love = love; 33 | } 34 | public String getStrain() { 35 | return strain; 36 | } 37 | public void setStrain(String strain) { 38 | this.strain = strain; 39 | } 40 | public Pet() { 41 | super(); 42 | } 43 | public int getMasterid() { 44 | return masterid; 45 | } 46 | public void setMasterid(int masterid) { 47 | this.masterid = masterid; 48 | } 49 | public Pet(int id, String name, int health, int love, String strain) { 50 | super(); 51 | this.id = id; 52 | this.name = name; 53 | this.health = health; 54 | this.love = love; 55 | this.strain = strain; 56 | } 57 | @Override 58 | public String toString() { 59 | return this.getId()+"\t"+this.getName()+"\t"+this.getHealth()+"\t"+this.getLove()+"\t" 60 | +this.getStrain(); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/mgr/PetMgr.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/mgr/PetMgr.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/MasterService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/MasterService.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/PetService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/PetService.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/impl/MasterServiceImpl.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/impl/MasterServiceImpl.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/impl/PetServiceImpl.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/service/impl/PetServiceImpl.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/test/Test.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/test/Test.java -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/JDBC操作数据库/三层架构/宠物管理系统模拟功能/PetDeo/src/test/Test2.java: -------------------------------------------------------------------------------- 1 | package test; 2 | 3 | import mgr.PetMgr; 4 | 5 | public class Test2 { 6 | 7 | public static void main(String[] args) { 8 | PetMgr mgr = new PetMgr(); 9 | mgr.menu(); 10 | 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/MySQL基础/win10环境下MySql(8.0.16最新版本)安装过程以及遇到的问题.md: -------------------------------------------------------------------------------- 1 | ## 目录 2 | 3 | 4 | - [目录](#目录) 5 | - [一、前言](#一前言) 6 | - [二、mysql的彻底卸载](#二mysql的彻底卸载) 7 | - [三、安装mysql](#三安装mysql) 8 | - [四、navicat连接mysql报错1251的解决方法](#四navicat连接mysql报错1251的解决方法) 9 | - [五、正确连接上mysql](#五正确连接上mysql) 10 | 11 | 12 | 13 | ## 一、前言 14 | 买了新的台式机,装了win10操作系统,打算本地安装mysql,由于之前一直用的win7,且用的mysql版本是比较老的,现在打算安装官网最新的版本8.0.16,记录一下安装过程和遇到的坑。 15 | ## 二、mysql的彻底卸载 16 | 在安装新版本前,先要彻底卸载本机上安装的其他版本,这个地方由于我没卸载C:\ProgramData\MySQL文件夹在安装新版本的时候会报这个异常 17 | ```java 18 | Hostname Port and Username are as shown in figure ,and password is right.When I click Test Connection ,it show as above.But if i use 3307 in place of 3306 as port,it connect sucessfully. What matter lead that and how I fix it? 19 | ``` 20 | 如果你也遇到安装时候的这个链接问题,那就表明机器上的mysql没有卸载干净。 21 | 1》停止MySQL服务 22 | 开始-》所有应用-》Windows管理工具-》服务,将MySQL服务停止。 23 | 2》卸载mysql server 24 | 控制面板\所有控制面板项\程序和功能,将mysql server卸载掉。 25 | 3》将MySQL安装目录下的MySQL文件夹删除(我的安装目录是C:\Program Files (x86)\MySQL) 26 | 4》运行“regedit”文件,打开注册表。 27 | 删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹 28 | 删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹。 29 | 删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL的文件夹。 30 | 如果没有相应的文件夹,就不用删除了。 31 | 5》删除C盘下的“C:\ProgramData\MySQL ”文件夹,如果删除不了则用360粉碎掉即可, 32 | 该programData文件默认是隐藏的,设置显示后即可见,或者直接复制 C:\ProgramData 到地址栏回车即可进入! 33 | 将整个MySQL文件夹删除掉。。。 34 | 6》开始-》所有应用-》Windows管理工具-》服务 35 | 如果已经将MySQL卸载,但通过“开始-》所有应用-》Windows管理工具-》服务”查看到MySQL服务仍然残留在 36 | 系统服务里。又不想改服务名,改怎么办呢。 37 | 只要在CMD里输入一条命令就可以将服务删除: 38 | sc delete mysql //这里的mysql是你要删除的服务名 39 | 这样一来服务就被删除了。 40 | 41 | 然后,就可以重装MySQL数据库了!!! 42 | ## 三、安装mysql 43 | 这里可以参考这个博主写的,我认为已经很详细了。在开始前请看补充点 44 | https://blog.csdn.net/believesoul/article/details/79323530 45 | 补充点:上面的安装步骤第九步,注意看你mysql服务的名字,可以改成mysql。所以你按照默认安装好了之后服务的名称是你默认的名称,在cmd中启动服务就要实际的服务名。 46 | 查看mysql服务名方法 47 | win+R——services.msc——找到mysql服务 48 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019062300222530.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 49 | 可以看到我按照默认的服务名是mysql80,右键属性 50 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190623002317705.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 51 | 按照这个修改,否则你会连接不上win10系统下本地的mysql服务 52 | 53 | 看完这些才能去对照着安装。 54 | ## 四、navicat连接mysql报错1251的解决方法 55 | 1、新安装的mysql8,使用破解版的navicat连接的时候一直报错,如图所示: 56 | 57 | 58 | 59 | 2、网上查找原因发现是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 由于用的是破解版的navicat,所以只能用第二种方法解决了; 60 | 61 | 3、首先以管理员身份运行cmd,然后使用命令进入mysql。 62 | 63 | 64 | 65 | 然后输入你安装mysql是设置的root密码即可进入。进入后界面如下 66 | 67 | 68 | 69 | 注意:如果你在输入mysql -u root -p后,cmd提示mysql 不是内部或外部命令,也不是可运行的程序 或批处理文件,说明你之前安装mysql后没有在环境变量PATH中将mysql的路径添加进去。该方法在文章最后有提示; 70 | 71 | 4、然后在mysql中先更改加密方式,指令如下: 72 | 73 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 74 | 5、然后再更改密码,由于加密规则更改,所以需要重新设置密码; 75 | 76 | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; 77 | 6、最后在刷新一下数据库; 78 | 79 | FLUSH PRIVILEGES; 80 | 最后,写一下怎么在环境变量PATH中将mysql的路径添加进去; 81 | 82 | 1、win+r-->services.msc-->右击mysql服务-->属性-->找到可执行路径并复制出来; 83 | 84 | 2、右击“我的电脑”-->属性-->高级系统设置-->环境变量-->系统变量-->PATH-->编辑-->新建-->上面的“可执行路径”,如下图所示; 85 | 86 | 87 | ## 五、正确连接上mysql 88 | 89 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190623002607487.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 90 | 91 | ## 六、总结 92 | 1、一定要确保本机mysql完全删除干净,否则会让你怀疑人生的,相信我 93 | 2、一定确保自己的服务名是啥 94 | 3、新版本的mysql可能并没有老版本的稳定,使用还请注意。 95 | ## 七、关于我 96 | 97 | \------ 98 | 99 | **# 本文章已同步至我的GitHub仓库:Javastudy,期待您的加入:blush:** 100 | 101 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019061700583138.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 102 | 103 | **# 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush:** 104 | 105 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617005714728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 106 | 107 | 108 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/MySQL基础/数据库.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/MySQL基础/数据库.jpg -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/MySQL基础/数据库.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/MySQL基础/数据库.xmind -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/MySQL数据库/MySQL基础/数据库详细思维导图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/MySQL数据库/MySQL基础/数据库详细思维导图.jpg -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/Oracle数据库/Oracle的安装/云服务器安装oracle修改IP地址监听器报错问题.md: -------------------------------------------------------------------------------- 1 | 当在云服务器中安装oracle时,按照一般的安装步骤安装后,需要修改两个文件的iIP地址才可以在本机进行访问,修改注意点: 2 | 监听器部分不要改成服务器的公网IP,要改成服务器的计算机名字才可以,两个配置文件夹均要修改 3 | tnsnames.ora文件修改: 4 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190106113038465.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 5 | listener.ora: 6 | 其中host=那里也是改成计算机名而不是公网ip,然后分别重启监听器和orclservice服务就好,然后将tnsnames.ora文件拷贝到本机的E:\Java\Oracle\InstantClient\InstantClient目录下满。 7 | 8 | 9 | 如果监听器设置的是IP地址而不是计算机名字的话监听器会不起作用,甚至会启动不了服务。 10 | -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/Oracle数据库/xmind/01.安装_函数查询and条件查询.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/Oracle数据库/xmind/01.安装_函数查询and条件查询.xmind -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/Oracle数据库/xmind/02.多表查询_子查询_集合运算.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/Oracle数据库/xmind/02.多表查询_子查询_集合运算.xmind -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/Oracle数据库/xmind/03.DDL,DML,视图,PLSQL编程.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/Oracle数据库/xmind/03.DDL,DML,视图,PLSQL编程.xmind -------------------------------------------------------------------------------- /docs/Java与数据库交互技术/Oracle数据库/xmind/04.游标,存储过程,存储函数,触发器.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/Java与数据库交互技术/Oracle数据库/xmind/04.游标,存储过程,存储函数,触发器.xmind -------------------------------------------------------------------------------- /docs/_coverpage.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |

Java 菜鸟 = > 大神

6 | 7 | [我的博客](https://blog.csdn.net/qq_43270074) 8 | [GitHub]() 9 | [开始阅读](#Java语言核心) 10 | 11 | -------------------------------------------------------------------------------- /docs/images/test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/images/test.jpg -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | JavaStudy 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
加载中,请稍等
14 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /docs/兴趣爱好/2019-07-14-hexo博客结合百度语音合成为你的博客添加欢迎语音.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: hexo博客结合百度语音合成为你的博客添加欢迎语音 4 | date: 2019-07-14 02:57:59 5 | categories: 搭建个人博客 6 | keywords: 个人 7 | tags: 8 | - 语音 9 | --- 10 | ## 前言 11 | 今晚在知乎和CSDN看文章时都发现了文章有点击即可朗读,将文字转换成语音,虽然机器音很严重,但可以将这个用来做个人博客的一个欢迎语。也就是别人点击你博客进入的时候会自动播放这个欢迎语,有点像是你去商店买东西,迎接你的小姐姐说的“欢迎您光临本店”。 12 | 是不是很炫酷?当有人访问你博客的时候,欢迎提示语。 13 | 具体效果请[点击](https://freestylefly.github.io//)(在PC端才会自动播放,客户端目前不支持自动播放,但是可以手动点击左下角的播放按钮即可体验) 14 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190714023033706.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 15 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190714023135989.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 16 | ## 为hexo博客添加APlayer 17 | APlayer就是支持在网页播放音乐的一个库,具体怎么添加可以稍微百度下很简单,如果想省事,就复制我的博客,在主题下的source的dist下找到music.js 18 | 四个参数代表的含义分别是 19 | 20 | ``` 21 | name:歌曲的名字 22 | artist:作者名字 23 | url:歌曲的外链 24 | cover:歌曲封面图片的外链 25 | ``` 26 | 歌曲和图片外链可以在[这里](http://www.ytmp3.cn/)进行获取,这里我们做的是欢迎语,所以欢迎语的外链得从百度AI开放平台那边获取,具体怎么操作呢/ 27 | ## 在百度AI开放平台注册账号并获取相应的key 28 | 1、注册:最好直接用自己百度账号注册 29 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019071402395495.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 30 | 2、创建应用 31 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190714024100315.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 32 | 这里我已经创建了一个应用 33 | 34 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190714024209978.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 35 | 创建应用没什么需要注意的,按照默认的选择复选框即可。这个时候回到应用列表点开你的应用会看到标红的这两个值是接下来要用的 36 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190714024325191.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 37 | ## 拼接欢迎语URL 38 | 1、先获取access_token 39 | 由于百度做的加密防护,先要获取access_token才可以去请求URL并且access_token(30天)后过期。需要手动刷新 40 | 获取token地址: 41 | 42 | https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=这里填你的API Key(刚才获得的)&client_secret=这里填你的Secret Key 43 | 44 | 返回值中就有access_token,可以用postman调用接口 45 | 2、拼接URL 46 | 欢迎语的URL为: 47 | 48 | ``` 49 | https://tsn.baidu.com/text2audio?tex=你好呀,欢迎您光临我的博客,有问题您可以点击右下角的在线客服,我会第一时间联系您,您也可以在留言区留言或者文章底部留言&lan=zh&cuid=123456&ctp=1&tok=替换成你刚获取的access_token 50 | ``` 51 | txt后面替换为你的欢迎语即可。 52 | 赶紧试一下吧。 53 | 54 | -------------------------------------------------------------------------------- /docs/兴趣爱好/使用序列化保存对象信息的时候出现中文乱码问题.md: -------------------------------------------------------------------------------- 1 | # 使用序列化保存对象信息的时候出现中文乱码问题 2 | 3 | # eclipse的默认文本编码格式 4 | 5 | 默认是GBK的编码格式,可以调成UTF-8的格式,方法是: 6 | 7 | Windows—preferences—General—Workspace—text for encoding 8 | 9 | 改成UTF-8即可 10 | 11 | ![1541755254047](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1541755254047.png) 12 | 13 | # 序列化对象 14 | 15 | 1、将eclipse默认编码格式改变特别注意的一点是,你以前用默认编码格式的所有项目的中文将会全部乱码,如果再切换成GBK也是没有作用的 16 | 17 | 2、使用序列化将对象进行储存成文件格式,是一种二进制编码储存,所以你打开储存的txt文件,打开是中文乱码的,这点初学者是最想不通的一点,甚至会和我一样傻逼的看看能不能用用转换编码试试,就是用fileoutputstreamwriter进行编码转换,但还是没有理解这些流类的层级关系,序列化对象使用的ObjectOutputstream是字节输出流,是Outputstream的一个子类,而fileoutputstreamwriter是字符流Writer的一个子类,这两者不能混了。 18 | 19 | 3、所以就需要反序列化将你序列化的对象进行输出到控制台给大家看 20 | 21 | ```java 22 | package test2; 23 | 24 | import java.io.Serializable; 25 | 26 | /* 27 | * 学生类 28 | */ 29 | public class Student implements Serializable { 30 | private static final long serialVersionUID = 1L; 31 | private String id; 32 | private String name; 33 | private int age; 34 | private String sex; 35 | private String address; 36 | 37 | 38 | public Student() { 39 | super(); 40 | // TODO Auto-generated constructor stub 41 | } 42 | 43 | public Student(String id, String name, int age, String sex, String address) { 44 | super(); 45 | this.id = id; 46 | this.name = name; 47 | this.age = age; 48 | this.sex = sex; 49 | this.address = address; 50 | } 51 | 52 | public String getId() { 53 | return id; 54 | } 55 | 56 | public void setId(String id) { 57 | this.id = id; 58 | } 59 | 60 | public String getName() { 61 | return name; 62 | } 63 | 64 | public void setName(String name) { 65 | this.name = name; 66 | } 67 | 68 | public int getAge() { 69 | return age; 70 | } 71 | 72 | public void setAge(int age) { 73 | this.age = age; 74 | } 75 | 76 | public String getSex() { 77 | return sex; 78 | } 79 | 80 | public void setSex(String sex) { 81 | this.sex = sex; 82 | } 83 | 84 | public String getAddress() { 85 | return address; 86 | } 87 | 88 | public void setAddress(String address) { 89 | this.address = address; 90 | } 91 | 92 | @Override 93 | public String toString() { 94 | return "编号:" +this.getId() +"\t" + "姓名:" +this.getName() +"\t" + "年龄:" + this.getAge()+"\t" + "性别:" +this.getSex()+ "\t" + 95 | "地址"+this.getAddress(); 96 | } 97 | 98 | } 99 | 100 | ``` 101 | 102 | 103 | 104 | ```java 105 | public class Test { 106 | public static void main(String[] args) { 107 | //集合储存学生信息 108 | List list =new ArrayList(); 109 | //添加2个学员到集合中 110 | list.add(new Student("101", "张三", 20, "男", "深圳福田")); 111 | list.add(new Student("102", "李四", 23, "男", "深圳龙岗")); 112 | list.add(new Student("103", "王五", 22, "女", "深圳宝安")); 113 | 114 | //序列化集合对象储存学生信息 115 | ObjectOutputStream oos=null; 116 | try { 117 | oos=new ObjectOutputStream(new FileOutputStream("src//test2//test.txt")); 118 | // System.out.println(stu); 119 | oos.writeObject(list); 120 | } catch (IOException e) { 121 | // TODO Auto-generated catch block 122 | e.printStackTrace(); 123 | }finally { 124 | try { 125 | oos.close(); 126 | } catch (IOException e) { 127 | // TODO Auto-generated catch block 128 | e.printStackTrace(); 129 | } 130 | } 131 | } 132 | } 133 | ``` 134 | 135 | 136 | 137 | ![1541755604811](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1541755604811.png) 138 | 139 | # 反序列化对象 140 | 141 | 将刚才序列化的集合对象通过反序列化显示在控制台 142 | 143 | ```java 144 | ObjectInputStream ois=null; 145 | //反序列化显示集合中信息,得到新的集合 146 | ois=new ObjectInputStream(new FileInputStream("src//test2//test.txt")); 147 | @SuppressWarnings("unchecked") 148 | ArrayList list2=(ArrayList) ois.readObject(); 149 | //遍历集合 150 | for (int i = 0; i < list2.size(); i++) { 151 | Student stu=list.get(i); 152 | System.out.println(stu); 153 | } 154 | ``` 155 | 156 | 157 | 158 | ![1541756607896](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1541756607896.png) 159 | 160 | 161 | 162 | # 要深刻理解序列化和反序列化 163 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /docs/学习资料(全).md: -------------------------------------------------------------------------------- 1 | 2 | # 目录 3 | 4 | 5 | - [目录](#目录) 6 | - [一、前言](#一前言) 7 | - [二、第一部分——工具大全篇](#二第一部分工具大全篇) 8 | - [1、eclipse](#1eclipse) 9 | - [2、JDK8](#2jdk8) 10 | - [3、win-xp操作系统](#3win-xp操作系统) 11 | - [4、win7操作系统](#4win7操作系统) 12 | - [5、win10操作系统](#5win10操作系统) 13 | - [6、office2016](#6office2016) 14 | - [7、Tomcat7](#7tomcat7) 15 | - [8、MyEclipse](#8myeclipse) 16 | - [9、虚拟机vmware12](#9虚拟机vmware12) 17 | - [10、测试工具junit4.6](#10测试工具junit46) 18 | - [11、测试工具postman](#11测试工具postman) 19 | - [12、MySQL5.5.4—64位](#12mysql55464位) 20 | - [13、数据库连接工具——sqlyog](#13数据库连接工具sqlyog) 21 | - [14、数据库连接工具——Navicat](#14数据库连接工具navicat) 22 | - [15、数据库——oracle11g](#15数据库oracle11g) 23 | - [16、远程服务器连接工具SecureCAT绿色版](#16远程服务器连接工具securecat绿色版) 24 | - [17、版本控制工具——git](#17版本控制工具git) 25 | - [18、Notepad++](#18notepad) 26 | - [19、免费的PDF转换器](#19免费的pdf转换器) 27 | - [20、GitHub客户端工具GitHubDesktop](#20github客户端工具githubdesktop) 28 | - [21、Markdown编辑工具typora](#21markdown编辑工具typora) 29 | - [22、webstorm10](#22webstorm10) 30 | - [23、xftp-6](#23xftp-6) 31 | - [24、反编译工具——FrontEndPlus](#24反编译工具frontendplus) 32 | - [25、反编译工具——jsd1.5.8](#25反编译工具jsd158) 33 | - [二、第二部分——学习视频资料篇](#二第二部分学习视频资料篇) 34 | - [1、黑马视频(含资料)](#1黑马视频含资料) 35 | - [2、北大青鸟视频(课工场视频)(含资料)](#2北大青鸟视频课工场视频含资料) 36 | - [3、达内学习视频(含资料)](#3达内学习视频含资料) 37 | - [4、尚硅谷学习视频(含资料)](#4尚硅谷学习视频含资料) 38 | - [5、十次方微服务视频资料](#5十次方微服务视频资料) 39 | - [6、Java高并发问题解决方案](#6java高并发问题解决方案) 40 | - [三、第三部分——计算机学习资料篇](#三第三部分计算机学习资料篇) 41 | - [1、计算机考研专业复习指导视频](#1计算机考研专业复习指导视频) 42 | - [2、计算机领先一步基础](#2计算机领先一步基础) 43 | - [3、计算机基础课程(大学)](#3计算机基础课程大学) 44 | - [4、计算机强化课程](#4计算机强化课程) 45 | - [四、第四部分——互联网面试篇](#四第四部分互联网面试篇) 46 | - [1、剑指offer-java面试](#1剑指offer-java面试) 47 | 48 | 49 | 50 | # 一、前言 51 | 52 | 内容涵盖开发所需工具如eclipse、idea、maven、MySQL等、Java开发学习视频,包含多家培训机构内部视频,以及网络直播视频等,整理不易,还请点个赞再走吧! 53 | 54 | 所有资源均为到互联网以及其他途径获取,如有侵权, 请联系作者删除,谢谢! 55 | 56 | # 二、第一部分——工具大全篇 57 | 58 | ## 1、eclipse 59 | 60 | ``` 61 | 链接:https://pan.baidu.com/s/1mtV14JxYAqr_l0EDtI8QMg 62 | 提取码:ju7u 63 | 复制这段内容后打开百度网盘手机App,操作更方便哦 64 | ``` 65 | 66 | ## 2、JDK8 67 | 68 | ``` 69 | 链接:https://pan.baidu.com/s/1HVnGGgKPGUN5UVcRkhaHZQ 70 | 提取码:os0z 71 | 复制这段内容后打开百度网盘手机App,操作更方便哦 72 | ``` 73 | 74 | ## 3、win-xp操作系统 75 | 76 | ``` 77 | 链接:https://pan.baidu.com/s/1MfHJJfJchPx2lby2CyPOeA 78 | 提取码:8foc 79 | 复制这段内容后打开百度网盘手机App,操作更方便哦 80 | ``` 81 | 82 | ## 4、win7操作系统 83 | 84 | ``` 85 | 链接:https://pan.baidu.com/s/1D_uI2X4QJ0jEaRpkuAFgvA 86 | 提取码:9dhp 87 | 复制这段内容后打开百度网盘手机App,操作更方便哦 88 | ``` 89 | 90 | ## 5、win10操作系统 91 | 92 | ``` 93 | 链接:https://pan.baidu.com/s/1S7gdNQy2Q4Mt6BRmd7cbUQ 94 | 提取码:yy7q 95 | 复制这段内容后打开百度网盘手机App,操作更方便哦 96 | ``` 97 | 98 | ## 6、office2016 99 | 100 | ``` 101 | 链接:https://pan.baidu.com/s/1mbco4bQlnf_x5j4dNzPciA 102 | 提取码:tqq8 103 | 复制这段内容后打开百度网盘手机App,操作更方便哦 104 | ``` 105 | 106 | ## 7、Tomcat7 107 | 108 | ``` 109 | 链接:https://pan.baidu.com/s/1a891g8UPjDPnM5pvs7zPww 110 | 提取码:8jzt 111 | 复制这段内容后打开百度网盘手机App,操作更方便哦 112 | ``` 113 | 114 | ## 8、MyEclipse 115 | 116 | ``` 117 | 链接:https://pan.baidu.com/s/14aLA5SAGZyhzf4FoCYjDMQ 118 | 提取码:wytp 119 | 复制这段内容后打开百度网盘手机App,操作更方便哦 120 | ``` 121 | 122 | ## 9、虚拟机vmware12 123 | 124 | ``` 125 | 链接:https://pan.baidu.com/s/1WN9HKL75wpsPZZ1ZKdPcqg 126 | 提取码:gkn1 127 | 复制这段内容后打开百度网盘手机App,操作更方便哦 128 | ``` 129 | 130 | ## 10、测试工具junit4.6 131 | 132 | ``` 133 | 链接:https://pan.baidu.com/s/10eiQJJRU1V6uSjeoK56jOQ 134 | 提取码:bjaz 135 | 复制这段内容后打开百度网盘手机App,操作更方便哦 136 | ``` 137 | 138 | ## 11、测试工具postman 139 | 140 | ``` 141 | 链接:https://pan.baidu.com/s/1I_5VptOlP4-UBO0QrfBjKw 142 | 提取码:c45f 143 | 复制这段内容后打开百度网盘手机App,操作更方便哦 144 | ``` 145 | 146 | ## 12、MySQL5.5.4—64位 147 | 148 | ``` 149 | 链接:https://pan.baidu.com/s/1IaBOa9xeBNUXAuVNMmS1SQ 150 | 提取码:gip9 151 | 复制这段内容后打开百度网盘手机App,操作更方便哦 152 | ``` 153 | 154 | ## 13、数据库连接工具——sqlyog 155 | 156 | ``` 157 | 链接:https://pan.baidu.com/s/1_UWwkB2NPy0kbcEp-XMOlA 158 | 提取码:mob9 159 | 复制这段内容后打开百度网盘手机App,操作更方便哦 160 | ``` 161 | 162 | ## 14、数据库连接工具——Navicat 163 | 164 | ``` 165 | 链接:https://pan.baidu.com/s/17FMeKzJmnXXKrNF1VN6h9Q 166 | 提取码:erqv 167 | 复制这段内容后打开百度网盘手机App,操作更方便哦 168 | ``` 169 | 170 | ## 15、数据库——oracle11g 171 | 172 | ``` 173 | 链接:https://pan.baidu.com/s/1fnsAhm-uVQ6QUB3OA4H5Hw 174 | 提取码:lsiz 175 | 复制这段内容后打开百度网盘手机App,操作更方便哦 176 | ``` 177 | 178 | ## 16、远程服务器连接工具SecureCAT绿色版 179 | 180 | ``` 181 | 链接:https://pan.baidu.com/s/1p5NfFkja-BfJ5T7pWU9hbw 182 | 提取码:bc1h 183 | 复制这段内容后打开百度网盘手机App,操作更方便哦 184 | ``` 185 | 186 | ## 17、版本控制工具——git 187 | 188 | ``` 189 | 链接:https://pan.baidu.com/s/1b4pFEAtZFYVi0IMX36_h2w 190 | 提取码:v9rf 191 | 复制这段内容后打开百度网盘手机App,操作更方便哦 192 | ``` 193 | 194 | ## 18、Notepad++ 195 | 196 | ``` 197 | 链接:https://pan.baidu.com/s/17DUQcS9Gkxb_viAa3yDRkQ 198 | 提取码:iwbl 199 | 复制这段内容后打开百度网盘手机App,操作更方便哦 200 | ``` 201 | 202 | ## 19、免费的PDF转换器 203 | 204 | ``` 205 | 链接:https://pan.baidu.com/s/1US5R_rPLxS1sHGqRztKVJQ 206 | 提取码:7bj3 207 | 复制这段内容后打开百度网盘手机App,操作更方便哦 208 | ``` 209 | 210 | ## 20、GitHub客户端工具GitHubDesktop 211 | 212 | ``` 213 | 链接:https://pan.baidu.com/s/1xnKr2tReAdUR-B7VOEEfFg 214 | 提取码:b7w7 215 | 复制这段内容后打开百度网盘手机App,操作更方便哦 216 | ``` 217 | 218 | ## 21、Markdown编辑工具typora 219 | 220 | ``` 221 | 链接:https://pan.baidu.com/s/1rgPtYJrbs8XwcLnXNTYTTg 222 | 提取码:8mdc 223 | 复制这段内容后打开百度网盘手机App,操作更方便哦 224 | ``` 225 | 226 | ## 22、webstorm10 227 | 228 | ``` 229 | 链接:https://pan.baidu.com/s/1dQBm4LjSbPqCc2QTYlf_pw 230 | 提取码:8cat 231 | 复制这段内容后打开百度网盘手机App,操作更方便哦 232 | ``` 233 | 234 | ## 23、xftp-6 235 | 236 | ``` 237 | 链接:https://pan.baidu.com/s/10zyGC6A8gxJW0t5g_4E3Vg 238 | 提取码:syp6 239 | 复制这段内容后打开百度网盘手机App,操作更方便哦 240 | ``` 241 | 242 | ## 24、反编译工具——FrontEndPlus 243 | 244 | ``` 245 | 链接:https://pan.baidu.com/s/1r30sBRliPlklAYoIZTMUKw 246 | 提取码:l09g 247 | 复制这段内容后打开百度网盘手机App,操作更方便哦 248 | ``` 249 | 250 | ## 25、反编译工具——jsd1.5.8 251 | 252 | ``` 253 | 链接:https://pan.baidu.com/s/10XAXohJEHNjRKL-KbdGORA 254 | 提取码:bvny 255 | 复制这段内容后打开百度网盘手机App,操作更方便哦 256 | ``` 257 | 258 | 259 | 260 | # 二、第二部分——学习视频资料篇 261 | 262 | ## 1、黑马视频(含资料) 263 | 264 | 2018年完整版 265 | 266 | ``` 267 | 链接:https://pan.baidu.com/s/1cNV6dwsD4bpV5Q4d17izog 268 | 提取码:9a8i 269 | 复制这段内容后打开百度网盘手机App,操作更方便哦 270 | ``` 271 | 272 | 2016完整版 273 | 274 | ``` 275 | 链接:https://pan.baidu.com/s/1vyUmPkxB5iMxGt8uppYljg 276 | 提取码:0dvb 277 | 复制这段内容后打开百度网盘手机App,操作更方便哦 278 | ``` 279 | 280 | 281 | 282 | ## 2、北大青鸟视频(课工场视频)(含资料) 283 | 284 | ``` 285 | 链接:https://pan.baidu.com/s/1uFyOFySqBB9vkNdP86u7FA 286 | 提取码:wfgb 287 | 复制这段内容后打开百度网盘手机App,操作更方便哦 288 | ``` 289 | 290 | ## 3、达内学习视频(含资料) 291 | 292 | ``` 293 | 链接:https://pan.baidu.com/s/146Q9ey_08KS4axCORKbpmg 294 | 提取码:675d 295 | 复制这段内容后打开百度网盘手机App,操作更方便哦 296 | ``` 297 | 298 | ## 4、尚硅谷学习视频(含资料) 299 | 300 | 全套下载: 301 | 302 | ``` 303 | 链接:https://pan.baidu.com/s/1ngT-LSOtYxONqEZp7KVAlQ 304 | 提取码:1qjg 305 | 复制这段内容后打开百度网盘手机App,操作更方便哦 306 | ``` 307 | 308 | ## 5、十次方微服务视频资料 309 | 310 | ``` 311 | 链接:https://pan.baidu.com/s/1Tlnsp0p9uEo1phw7dOfFow 312 | 提取码:h6aw 313 | 复制这段内容后打开百度网盘手机App,操作更方便哦 314 | ``` 315 | 316 | ## 6、Java高并发问题解决方案 317 | 318 | ``` 319 | 链接:https://pan.baidu.com/s/1XWQahB-c7FQRwDZV1gfPMA 320 | 提取码:v8tq 321 | 复制这段内容后打开百度网盘手机App,操作更方便哦 322 | ``` 323 | 324 | 325 | 326 | # 三、第三部分——计算机学习资料篇 327 | 328 | ## 1、计算机考研专业复习指导视频 329 | 330 | ``` 331 | 链接:https://pan.baidu.com/s/1EYkT2a5_pUaiptdIHpDZ2A 332 | 提取码:8wsz 333 | 复制这段内容后打开百度网盘手机App,操作更方便哦 334 | ``` 335 | 336 | ## 2、计算机领先一步基础 337 | 338 | ``` 339 | 链接:https://pan.baidu.com/s/1trvguZkBTnnTlLZUBtO1Aw 340 | 提取码:eu1c 341 | 复制这段内容后打开百度网盘手机App,操作更方便哦 342 | ``` 343 | 344 | ## 3、计算机基础课程(大学) 345 | 346 | ``` 347 | 链接:https://pan.baidu.com/s/1iAh-KQooE3qISNMWkaS4_A 348 | 提取码:hmut 349 | 复制这段内容后打开百度网盘手机App,操作更方便哦 350 | ``` 351 | 352 | ## 4、计算机强化课程 353 | 354 | ``` 355 | 链接:https://pan.baidu.com/s/1M9fzARo8Kj6VMwmfffANSg 356 | 提取码:qvpi 357 | 复制这段内容后打开百度网盘手机App,操作更方便哦 358 | ``` 359 | 360 | # 四、第四部分——互联网面试篇 361 | 362 | ## 1、剑指offer-java面试 363 | 364 | ``` 365 | 链接:https://pan.baidu.com/s/1jen4Z3JTGQ2zH-ZFlZPnIQ 366 | 提取码:t3c1 367 | 复制这段内容后打开百度网盘手机App,操作更方便哦 368 | ``` 369 | 370 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/JSP实现文件下载功能.md: -------------------------------------------------------------------------------- 1 | # JSP实现文件下载功能 2 | 3 | ```java 4 | package top.canghe.downloadDemo; 5 | 6 | import java.io.FileInputStream; 7 | import java.io.IOException; 8 | import java.io.InputStream; 9 | import java.net.URLEncoder; 10 | 11 | import javax.servlet.ServletException; 12 | import javax.servlet.ServletOutputStream; 13 | import javax.servlet.http.HttpServlet; 14 | import javax.servlet.http.HttpServletRequest; 15 | import javax.servlet.http.HttpServletResponse; 16 | 17 | import sun.misc.BASE64Encoder; 18 | 19 | public class DownLoadServlet extends HttpServlet { 20 | 21 | protected void doGet(HttpServletRequest request, HttpServletResponse response) 22 | throws ServletException, IOException { 23 | 24 | //*******文件名称是中文的下载******* 25 | 26 | 27 | //获得要下载的文件的名称 28 | String filename = request.getParameter("filename");//????.jpg 29 | //解决获得中文参数的乱码----下节课讲 30 | filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg 31 | 32 | 33 | //获得请求头中的User-Agent 34 | String agent = request.getHeader("User-Agent"); 35 | //根据不同浏览器进行不同的编码 36 | String filenameEncoder = ""; 37 | if (agent.contains("MSIE")) { 38 | // IE浏览器 39 | filenameEncoder = URLEncoder.encode(filename, "utf-8"); 40 | filenameEncoder = filenameEncoder.replace("+", " "); 41 | } else if (agent.contains("Firefox")) { 42 | // 火狐浏览器 43 | BASE64Encoder base64Encoder = new BASE64Encoder(); 44 | filenameEncoder = "=?utf-8?B?" 45 | + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; 46 | } else { 47 | // 其它浏览器 48 | filenameEncoder = URLEncoder.encode(filename, "utf-8"); 49 | } 50 | 51 | 52 | 53 | //要下载的这个文件的类型-----客户端通过文件的MIME类型去区分类型 54 | response.setContentType(this.getServletContext().getMimeType(filename)); 55 | //告诉客户端该文件不是直接解析 而是以附件形式打开(下载)----filename="+filename 客户端默认对名字进行解码 56 | response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); 57 | 58 | //获取文件的绝对路径 59 | String path = this.getServletContext().getRealPath("download/"+filename); 60 | //获得该文件的输入流 61 | InputStream in = new FileInputStream(path); 62 | //获得输出流---通过response获得的输出流 用于向客户端写内容 63 | ServletOutputStream out = response.getOutputStream(); 64 | //文件拷贝的模板代码 65 | int len = 0; 66 | byte[] buffer = new byte[1024]; 67 | while((len=in.read(buffer))>0){ 68 | out.write(buffer, 0, len); 69 | } 70 | 71 | in.close(); 72 | //out.close(); 73 | 74 | } 75 | 76 | protected void doPost(HttpServletRequest request, HttpServletResponse response) 77 | throws ServletException, IOException { 78 | doGet(request, response); 79 | } 80 | } 81 | ``` 82 | 83 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | checkUserName 11 | com.servlet.user.CheckUserName 12 | 13 | 14 | checkUserName 15 | /checkUserName 16 | 17 | 18 | 19 | 20 | index.jsp 21 | 22 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/css/style.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | *{padding:0; margin:0;} 4 | 5 | .login{ 6 | width: 400px; 7 | margin: 50px auto; 8 | padding: 30px; 9 | } 10 | 11 | .login table tr:last-child td:last-child { 12 | color: red; 13 | } 14 | 15 | .welcome{ 16 | height: 600px; 17 | background-color: #d1d1d1; 18 | text-align: center; 19 | line-height: 150px; 20 | } 21 | .info{ 22 | margin: 10px; 23 | } 24 | .info legend{ 25 | margin-left: 20px; 26 | } 27 | 28 | .list table{ 29 | width: 100%; 30 | } 31 | .list table tr:first-child{ 32 | background-color: yellow; 33 | font-weight: bold; 34 | } 35 | .list table tr{ 36 | text-align: center; 37 | } 38 | .list table tr:last-child td:first-child{ 39 | text-align: left; 40 | } 41 | .list table tr:last-child td:last-child{ 42 | text-align: right; 43 | } 44 | 45 | .left{ 46 | width: 200px; 47 | background: linear-gradient(to bottom, #e6fdff, #00ffec, #e6fdff); 48 | height: 600px; 49 | } 50 | 51 | .left ul li{ 52 | line-height: 30px; 53 | text-indent: 30px; 54 | } 55 | 56 | .left ul li:hover{ 57 | border-radius: 15px; 58 | background-color:orange; 59 | color: white; 60 | cursor: pointer; 61 | } 62 | 63 | .left ul li a:link{ 64 | text-decoration: none; 65 | } 66 | 67 | .top{ 68 | position: relative; 69 | line-height: 50px; 70 | background-color: #00ffec; 71 | } 72 | 73 | .top div:first-child { 74 | position: relative; 75 | left: 30px; 76 | } 77 | .top div:last-child { 78 | position: absolute; 79 | top: 0px; 80 | right: 30px; 81 | } 82 | 83 | .bottom{ 84 | background-color: #00ffec; 85 | text-align: center; 86 | line-height: 50px; 87 | } 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/index.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 示例 7 | 8 | 9 | 10 | 11 | jsp模板 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/js/page.js: -------------------------------------------------------------------------------- 1 | /* 声明变量 */ 2 | var curr, //当前页 3 | total, //总页数 4 | size; //页面大小 5 | 6 | /* 分页js */ 7 | $("[value='首页']").bind("click", function() { 8 | // location = webroot + "/query?currPage=1"; 9 | queryByPage(1); 10 | }); 11 | $("[value='上一页']").bind("click", function() { 12 | // location = webroot + "/query?currPage="+(curr-1); 13 | queryByPage(curr-1); 14 | }); 15 | $("[value='下一页']").bind("click", function() { 16 | // location = webroot + "/query?currPage="+(curr+1); 17 | queryByPage(curr+1); 18 | }); 19 | $("[value='尾页']").bind("click", function() { 20 | // location = webroot + "/query?currPage="+total; 21 | queryByPage(total); 22 | }); 23 | $(".list table tr:last select:last").bind("change", function() { 24 | //读取当前页 25 | curr = $(".list table tr:last select:last option:selected").val(); 26 | //跳转 27 | // location = webroot + "/query?currPage="+curr; 28 | queryByPage(curr); 29 | }); 30 | $(".list table tr:last select:first").bind("change", function() { 31 | //读取当前页 32 | // curr = $(".list table tr:last select:last option:selected").val(); 33 | //读取页面大小 34 | size = $(".list table tr:last select:first option:selected").val(); 35 | //跳转 36 | // location = webroot + "/query?currPage="+curr + "&pageSize=" + size; 37 | queryByPage(curr, size); 38 | }); 39 | 40 | /* 分页函数 */ 41 | function queryByPage(target, pageSize) { 42 | 43 | //判断, target 和 size 是否为null 44 | if(!target){ 45 | target = curr; 46 | } 47 | if(!pageSize){ 48 | pageSize = size; 49 | } 50 | //跳转 51 | location = webroot + "/query?currPage="+target + "&pageSize=" + pageSize; 52 | } 53 | 54 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/js/project.js: -------------------------------------------------------------------------------- 1 | //工程根目录变量 2 | var webroot; 3 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/js/registe.js: -------------------------------------------------------------------------------- 1 | //为注册按钮添加单击事件 2 | $("[value='注册']").bind("click", function(){ 3 | //跳转到注册页 4 | location = webroot+"/page/user/registe.jsp"; 5 | }); 6 | //为取消按钮添加单击事件 7 | $("[value='取消']").bind("click", function(){ 8 | //alert(webroot); 9 | //跳转到注册页 10 | location = webroot+"/login.jsp"; 11 | }); -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/WebContent/registe.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 注册页 7 | 8 | 9 | 10 | 11 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/build/classes/ajax.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/build/classes/ajax.txt -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/ajax.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/ajax.txt -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/bean/User.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/bean/User.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/dao/BaseData.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/dao/BaseData.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/dao/UserData.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/dao/UserData.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/servlet/user/CheckUserName.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/ajax/ajax表单验证/ajax-demo/src/com/servlet/user/CheckUserName.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/java生成图片验证码.md: -------------------------------------------------------------------------------- 1 | # 图片验证码 2 | 3 | ## java自动生成图片代码 4 | 5 | ```java 6 | package top.canghe.CheckImgServlet; 7 | 8 | import java.awt.Color; 9 | import java.awt.Font; 10 | import java.awt.Graphics; 11 | import java.awt.Graphics2D; 12 | import java.awt.image.BufferedImage; 13 | import java.io.BufferedReader; 14 | import java.io.FileReader; 15 | import java.io.IOException; 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | import java.util.Random; 19 | 20 | import javax.imageio.ImageIO; 21 | import javax.servlet.ServletException; 22 | import javax.servlet.http.HttpServlet; 23 | import javax.servlet.http.HttpServletRequest; 24 | import javax.servlet.http.HttpServletResponse; 25 | 26 | /** 27 | * 验证码生成程序 28 | * 29 | * 30 | * 31 | */ 32 | public class CheckImgServlet extends HttpServlet { 33 | 34 | // 集合中保存所有成语 35 | private List words = new ArrayList(); 36 | 37 | @Override 38 | public void init() throws ServletException { 39 | // 初始化阶段,读取new_words.txt 40 | // web工程中读取 文件,必须使用绝对磁盘路径 41 | String path = getServletContext().getRealPath("/WEB-INF/new_words.txt"); 42 | try { 43 | BufferedReader reader = new BufferedReader(new FileReader(path)); 44 | String line; 45 | while ((line = reader.readLine()) != null) { 46 | words.add(line); 47 | } 48 | reader.close(); 49 | } catch (IOException e) { 50 | e.printStackTrace(); 51 | } 52 | } 53 | 54 | public void doGet(HttpServletRequest request, HttpServletResponse response) 55 | throws ServletException, IOException { 56 | // 禁止缓存 57 | // response.setHeader("Cache-Control", "no-cache"); 58 | // response.setHeader("Pragma", "no-cache"); 59 | // response.setDateHeader("Expires", -1); 60 | 61 | int width = 120; 62 | int height = 30; 63 | 64 | // 步骤一 绘制一张内存中图片 65 | BufferedImage bufferedImage = new BufferedImage(width, height, 66 | BufferedImage.TYPE_INT_RGB); 67 | 68 | // 步骤二 图片绘制背景颜色 ---通过绘图对象 69 | Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔 70 | // 绘制任何图形之前 都必须指定一个颜色 71 | graphics.setColor(getRandColor(200, 250)); 72 | graphics.fillRect(0, 0, width, height); 73 | 74 | // 步骤三 绘制边框 75 | graphics.setColor(Color.WHITE); 76 | graphics.drawRect(0, 0, width - 1, height - 1); 77 | 78 | // 步骤四 四个随机数字 79 | Graphics2D graphics2d = (Graphics2D) graphics; 80 | // 设置输出字体 81 | graphics2d.setFont(new Font("宋体", Font.BOLD, 18)); 82 | 83 | Random random = new Random();// 生成随机数 84 | int index = random.nextInt(words.size()); 85 | String word = words.get(index);// 获得成语 86 | 87 | // 定义x坐标 88 | int x = 10; 89 | for (int i = 0; i < word.length(); i++) { 90 | // 随机颜色 91 | graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random 92 | .nextInt(110), 20 + random.nextInt(110))); 93 | // 旋转 -30 --- 30度 94 | int jiaodu = random.nextInt(60) - 30; 95 | // 换算弧度 96 | double theta = jiaodu * Math.PI / 180; 97 | 98 | // 获得字母数字 99 | char c = word.charAt(i); 100 | 101 | // 将c 输出到图片 102 | graphics2d.rotate(theta, x, 20); 103 | graphics2d.drawString(String.valueOf(c), x, 20); 104 | graphics2d.rotate(-theta, x, 20); 105 | x += 30; 106 | } 107 | 108 | // 将验证码内容保存session 109 | request.getSession().setAttribute("checkcode_session", word); 110 | 111 | // 步骤五 绘制干扰线 112 | graphics.setColor(getRandColor(160, 200)); 113 | int x1; 114 | int x2; 115 | int y1; 116 | int y2; 117 | for (int i = 0; i < 30; i++) { 118 | x1 = random.nextInt(width); 119 | x2 = random.nextInt(12); 120 | y1 = random.nextInt(height); 121 | y2 = random.nextInt(12); 122 | graphics.drawLine(x1, y1, x1 + x2, x2 + y2); 123 | } 124 | 125 | // 将上面图片输出到浏览器 ImageIO 126 | graphics.dispose();// 释放资源 127 | 128 | //将图片写到response.getOutputStream()中 129 | ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); 130 | 131 | } 132 | 133 | public void doPost(HttpServletRequest request, HttpServletResponse response) 134 | throws ServletException, IOException { 135 | doGet(request, response); 136 | } 137 | 138 | /** 139 | * 取其某一范围的color 140 | * 141 | * @param fc 142 | * int 范围参数1 143 | * @param bc 144 | * int 范围参数2 145 | * @return Color 146 | */ 147 | private Color getRandColor(int fc, int bc) { 148 | // 取其随机颜色 149 | Random random = new Random(); 150 | if (fc > 255) { 151 | fc = 255; 152 | } 153 | if (bc > 255) { 154 | bc = 255; 155 | } 156 | int r = fc + random.nextInt(bc - fc); 157 | int g = fc + random.nextInt(bc - fc); 158 | int b = fc + random.nextInt(bc - fc); 159 | return new Color(r, g, b); 160 | } 161 | 162 | } 163 | 164 | ``` 165 | 166 | ## 登录示例 167 | 168 | ```java 169 | 170 | 171 | 172 | 173 | Insert title here 174 | 183 | 184 | 185 | 186 |
187 | 用户名:
188 | 密码:
189 | 验证码:
190 |
191 |
192 | 193 | 194 | ``` 195 | 196 | ## 判断验证码输入是否正确 197 | 198 | ```java 199 | package top.canghe.CheckImgServlet; 200 | 201 | import java.io.IOException; 202 | import javax.servlet.ServletException; 203 | import javax.servlet.http.HttpServlet; 204 | import javax.servlet.http.HttpServletRequest; 205 | import javax.servlet.http.HttpServletResponse; 206 | 207 | public class DoChecking extends HttpServlet { 208 | 209 | public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 210 | //设置编码 211 | request.setCharacterEncoding("utf-8"); 212 | //拿到表单提交的数据 213 | String username = request.getParameter("username"); 214 | String password = request.getParameter("password"); 215 | System.out.println(username); 216 | //拿到验证码 217 | String checkingWord = request.getParameter("checkingWord"); 218 | //从session中拿到随机产生的验证码 219 | String word = (String)(request.getSession().getAttribute("checkcode_session")); 220 | System.out.println(checkingWord); 221 | System.out.println(word); 222 | //判断验证码输入是否正确 223 | if(checkingWord.equals(word)) { 224 | System.out.println("正确"); 225 | response.sendRedirect("/WEB14/download.jsp"); 226 | }else { 227 | System.out.println("不正确"); 228 | response.sendRedirect("/WEB14/login.html"); 229 | } 230 | } 231 | 232 | public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 233 | doGet(request, response); 234 | } 235 | } 236 | 237 | ``` 238 | 239 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/为数据库批量添加测试数据/AddData.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/为数据库批量添加测试数据/AddData.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | web-demo-1 4 | 5 | index.html 6 | index.htm 7 | index.jsp 8 | default.html 9 | default.htm 10 | default.jsp 11 | 12 | 13 | LoginServlet 14 | com.canghe.web.servlet.user.LoginServlet 15 | 16 | 17 | LoginServlet 18 | /login 19 | 20 | 21 | LogoffServlet 22 | com.canghe.web.servlet.user.LogoffServlet 23 | 24 | 25 | LogoffServlet 26 | /logOff 27 | 28 | 29 | RegisterServlet 30 | com.canghe.web.servlet.user.RegisterServlet 31 | 32 | 33 | RegisterServlet 34 | /register 35 | 36 | 37 | ChangePasswordServlet 38 | com.canghe.web.servlet.user.ChangePasswordServlet 39 | 40 | 41 | ChangePasswordServlet 42 | /changePassword 43 | 44 | 45 | QueryServlet 46 | com.canghe.web.servlet.user.QueryServlet 47 | 48 | 49 | QueryServlet 50 | /query 51 | 52 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/css/style.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | *{padding:0; margin:0;} 3 | 4 | .login{ 5 | width: 400px; 6 | margin: 50px auto; 7 | padding: 30px; 8 | } 9 | 10 | .login table tr:last-child td:last-child { 11 | color: red; 12 | } 13 | 14 | .welcome{ 15 | height: 600px; 16 | background-color: #d1d1d1; 17 | text-align: center; 18 | line-height: 150px; 19 | } 20 | .info{ 21 | margin: 10px; 22 | } 23 | .info legend{ 24 | margin-left: 20px; 25 | } 26 | 27 | .list table{ 28 | width: 100%; 29 | } 30 | .list table tr:first-child{ 31 | background-color: yellow; 32 | font-weight: bold; 33 | } 34 | .list table tr{ 35 | text-align: center; 36 | } 37 | .list table tr:last-child td:first-child{ 38 | text-align: left; 39 | } 40 | .list table tr:last-child td:last-child{ 41 | text-align: right; 42 | } 43 | 44 | .left{ 45 | width: 200px; 46 | background-color: #00ffec; 47 | height: 600px; 48 | } 49 | 50 | .left ul li{ 51 | line-height: 30px; 52 | text-indent: 30px; 53 | } 54 | 55 | .left ul li:hover{ 56 | border-radius: 15px; 57 | background-color: orange; 58 | color: white; 59 | cursor: pointer; 60 | } 61 | 62 | .left ul li a:link{ 63 | text-decoration: none; 64 | } 65 | 66 | .top{ 67 | position: relative; 68 | line-height: 50px; 69 | background-color: #00ffec; 70 | } 71 | 72 | .top div:first-child { 73 | position: relative; 74 | left: 30px; 75 | } 76 | .top div:last-child { 77 | position: absolute; 78 | top: 0px; 79 | right: 30px; 80 | } 81 | 82 | .bottom{ 83 | background-color: #00ffec; 84 | text-align: center; 85 | line-height: 50px; 86 | } 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/index.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8"%> 3 | 4 | 5 | 6 | 7 | 首页 8 | 9 | 10 | 11 |
12 |

——————————欢迎您使用XXX系统——————————

13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/js/page.js: -------------------------------------------------------------------------------- 1 | /* 声明变量 */ 2 | var curr, //当前页 3 | total, //总页数 4 | size; //页面大小 5 | 6 | /* 分页js */ 7 | $("[value='首页']").bind("click", function() { 8 | // location = webroot + "/query?currPage=1"; 9 | queryByPage(1); 10 | }); 11 | $("[value='上一页']").bind("click", function() { 12 | // location = webroot + "/query?currPage="+(curr-1); 13 | queryByPage(curr-1); 14 | }); 15 | $("[value='下一页']").bind("click", function() { 16 | // location = webroot + "/query?currPage="+(curr+1); 17 | queryByPage(curr+1); 18 | }); 19 | $("[value='尾页']").bind("click", function() { 20 | // location = webroot + "/query?currPage="+total; 21 | queryByPage(total); 22 | }); 23 | $(".list table tr:last select:last").bind("change", function() { 24 | //读取当前页 25 | curr = $(".list table tr:last select:last option:selected").val(); 26 | //跳转 27 | // location = webroot + "/query?currPage="+curr; 28 | queryByPage(curr); 29 | }); 30 | $(".list table tr:last select:first").bind("change", function() { 31 | //读取当前页 32 | // curr = $(".list table tr:last select:last option:selected").val(); 33 | //读取页面大小 34 | size = $(".list table tr:last select:first option:selected").val(); 35 | //跳转 36 | // location = webroot + "/query?currPage="+curr + "&pageSize=" + size; 37 | queryByPage(curr, size); 38 | }); 39 | 40 | /* 分页函数 */ 41 | function queryByPage(target, pageSize) { 42 | 43 | //判断, target 和 size 是否为null 44 | if(!target){ 45 | target = curr; 46 | } 47 | if(!pageSize){ 48 | pageSize = size; 49 | } 50 | //跳转 51 | location = webroot + "/query?currPage="+target + "&pageSize=" + pageSize; 52 | } 53 | 54 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/js/project.js: -------------------------------------------------------------------------------- 1 | //工程根目录变量 2 | var webroot; 3 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/js/registe.js: -------------------------------------------------------------------------------- 1 | //为注册按钮添加单击事件 2 | $("[value='注册']").bind("click", function(){ 3 | //跳转到注册页 4 | location = webroot+"/page/user/registe.jsp"; 5 | }); 6 | //为取消按钮添加单击事件 7 | $("[value='取消']").bind("click", function(){ 8 | //alert(webroot); 9 | //跳转到注册页 10 | location = webroot+"/login.jsp"; 11 | }); 12 | //$("[value='提交']").bind("click", function(){ 13 | // //确认提交吗 14 | // var question=confirm("确认日胶吗?"); 15 | // //跳转到注册页 16 | // if(question){ 17 | // location = webroot+"/changePassword"; 18 | // } 19 | // 20 | //}); -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/login.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 | 4 | 5 | 6 | 7 | 登录页 8 | 9 | 10 | 11 | 12 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 48 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/bottom.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 示例 7 | 8 | 9 | 10 | 11 |
12 | ©版权所有 JT35 2019 - 1 - 16 13 |
14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/index.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8"%> 3 | 4 | 5 | 6 | 7 | 首页 8 | 9 | 10 | 11 |
12 |

————欢迎您使用XXX系统————

13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/left.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 示例 7 | 8 | 9 | 10 | 11 |
12 | 32 |
33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/main.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 主页 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | <body> 31 | </body> 32 | 33 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/top.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 示例 7 | 8 | 9 | 10 | 11 |
12 |
欢迎您用户${loginInfo.userName }
13 |
14 | 个人中心 16 | | 17 | 退出 20 |
21 |
22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/user/changePassword.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8"%> 3 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4 | 5 | 6 | 7 | 8 | 修改密码 9 | 10 | 11 |
12 | 修改密码 13 |
14 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 26 | 27 | 28 | 32 | 35 | 36 | 37 |
新密码 18 | 19 |
再输一遍新密码 24 | 25 |
29 | ${succsize} 30 | 31 | 33 | 34 |
38 | 39 |
40 | 41 |
42 | 43 | 44 | 45 | 46 | 49 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/user/info.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 个人中心 7 | 8 | 9 | 10 | 11 |
12 | 个人中心 13 |
14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | 33 | 34 |
用户名: 18 | ${loginInfo.userName } 19 | 20 |
性别: 25 | ${loginInfo.gender==1 ? "男" : (loginInfo.gender==0 ? "女" : "保密") } 26 |
注册时间: 31 | ${loginInfo.registeTime } 32 |
35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 46 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/user/list.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8"%> 3 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4 | 5 | 6 | 7 | 8 | 所有用户查询 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 44 | 67 | 68 |
序号用户名性别注册时间
${i.index+1 }${u.userName }${u.gender==1 ? "男" : (u.gender==0 ? "女" : "保密")}${u.registeTime }
30 | 第 ${pa.currPage } 页  31 | /  共 ${pa.totalPage } 页 32 |  当前显示第 ${pa.start+1 } 条 33 | 到 第 ${pa.start+pa.pageSize > pa.count ? pa.count : pa.start+pa.pageSize } 条 34 | 每页 35 | 42 | 条 43 | 45 | disabled 47 | > 48 | disabled 50 | > 51 | disabled 53 | > 54 | disabled 56 | > 57 | 跳转到 58 | 65 | 页 66 |
69 | 70 |
71 | 72 | 73 | 74 | 75 | 82 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/WebContent/page/user/registe.jsp: -------------------------------------------------------------------------------- 1 | <%@page language="java" contentType="text/html; charset=utf-8" %> 2 | 3 | 4 | 5 | 6 | 注册页 7 | 8 | 9 | 10 | 11 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 54 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/build/classes/c3p0-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.mysql.jdbc.Driver 5 | jdbc:mysql://106.13.43.205:3306/jt35 6 | root 7 | aaaaa123 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/build/classes/sql/data.sql: -------------------------------------------------------------------------------- 1 | 2 | DROP DATABASE IF EXISTS jt35; 3 | CREATE DATABASE jt35 DEFAULT CHARACTER SET utf8; 4 | USE jt35; 5 | 6 | DROP TABLE IF EXISTS t_user; 7 | CREATE TABLE USER( 8 | id INT PRIMARY KEY AUTO_INCREMENT, 9 | userName VARCHAR(40) NOT NULL UNIQUE, 10 | PASSWORD VARCHAR(50) NOT NULL, 11 | gender TINYINT, 12 | registeTime DATETIME NOT NULL 13 | ); 14 | 15 | INSERT INTO USER VALUES(1001, 'admin', '9999', 1, '1990-5-30'); 16 | INSERT INTO USER(username, PASSWORD, gender, registeTime) 17 | VALUES('apple', '9999', 0, '1990-6-30'); 18 | INSERT INTO USER(username, PASSWORD, gender, registeTime) 19 | VALUES('cherry', '9999', 0, '1990-7-30'); 20 | INSERT INTO USER(username, PASSWORD, gender, registeTime) 21 | VALUES('peach', '9999', 2, '1990-8-30'); 22 | 23 | /* 24 | select * from user order by id; 25 | 26 | */ 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/c3p0-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.mysql.jdbc.Driver 5 | jdbc:mysql://106.13.43.205:3306/jt35 6 | root 7 | aaaaa123 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/dao/UserDaoImpl.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/dao/UserDaoImpl.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/domain/User.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/domain/User.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/test/AddDate.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/test/AddDate.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/util/AddData.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/util/AddData.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/util/DataSourceUtils.java: -------------------------------------------------------------------------------- 1 | package com.canghe.util; 2 | 3 | import java.sql.Connection; 4 | import java.sql.ResultSet; 5 | import java.sql.SQLException; 6 | import java.sql.Statement; 7 | 8 | import javax.sql.DataSource; 9 | 10 | import com.mchange.v2.c3p0.ComboPooledDataSource; 11 | 12 | public class DataSourceUtils { 13 | 14 | private static DataSource dataSource = new ComboPooledDataSource(); 15 | 16 | private static ThreadLocal tl = new ThreadLocal(); 17 | 18 | // 鐩存帴鍙互鑾峰彇涓�涓繛鎺ユ睜 19 | public static DataSource getDataSource() { 20 | return dataSource; 21 | } 22 | 23 | // 鑾峰彇杩炴帴瀵硅薄 24 | public static Connection getConnection() throws SQLException { 25 | 26 | Connection con = tl.get(); 27 | if (con == null) { 28 | con = dataSource.getConnection(); 29 | tl.set(con); 30 | } 31 | return con; 32 | } 33 | 34 | // 寮�鍚簨鍔� 35 | public static void startTransaction() throws SQLException { 36 | Connection con = getConnection(); 37 | if (con != null) { 38 | con.setAutoCommit(false); 39 | } 40 | } 41 | 42 | // 浜嬪姟鍥炴粴 43 | public static void rollback() throws SQLException { 44 | Connection con = getConnection(); 45 | if (con != null) { 46 | con.rollback(); 47 | } 48 | } 49 | 50 | // 鎻愪氦骞朵笖 鍏抽棴璧勬簮鍙婁粠ThreadLocall涓噴鏀� 51 | public static void commitAndRelease() throws SQLException { 52 | Connection con = getConnection(); 53 | if (con != null) { 54 | con.commit(); // 浜嬪姟鎻愪氦 55 | con.close();// 鍏抽棴璧勬簮 56 | tl.remove();// 浠庣嚎绋嬬粦瀹氫腑绉婚櫎 57 | } 58 | } 59 | 60 | // 鍏抽棴璧勬簮鏂规硶 61 | public static void closeConnection() throws SQLException { 62 | Connection con = getConnection(); 63 | if (con != null) { 64 | con.close(); 65 | } 66 | } 67 | 68 | public static void closeStatement(Statement st) throws SQLException { 69 | if (st != null) { 70 | st.close(); 71 | } 72 | } 73 | 74 | public static void closeResultSet(ResultSet rs) throws SQLException { 75 | if (rs != null) { 76 | rs.close(); 77 | } 78 | } 79 | 80 | } 81 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/util/PageAssitant.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/util/PageAssitant.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/ChangePasswordServlet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/ChangePasswordServlet.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/LoginServlet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/LoginServlet.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/LogoffServlet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/LogoffServlet.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/QueryServlet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/QueryServlet.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/RegisterServlet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/分页查询/web-demo-1/src/com/canghe/web/servlet/user/RegisterServlet.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/分页查询/web-demo-1/src/sql/data.sql: -------------------------------------------------------------------------------- 1 | 2 | DROP DATABASE IF EXISTS jt35; 3 | CREATE DATABASE jt35 DEFAULT CHARACTER SET utf8; 4 | USE jt35; 5 | 6 | DROP TABLE IF EXISTS t_user; 7 | CREATE TABLE USER( 8 | id INT PRIMARY KEY AUTO_INCREMENT, 9 | userName VARCHAR(40) NOT NULL UNIQUE, 10 | PASSWORD VARCHAR(50) NOT NULL, 11 | gender TINYINT, 12 | registeTime DATETIME NOT NULL 13 | ); 14 | 15 | INSERT INTO USER VALUES(1001, 'admin', '9999', 1, '1990-5-30'); 16 | INSERT INTO USER(username, PASSWORD, gender, registeTime) 17 | VALUES('apple', '9999', 0, '1990-6-30'); 18 | INSERT INTO USER(username, PASSWORD, gender, registeTime) 19 | VALUES('cherry', '9999', 0, '1990-7-30'); 20 | INSERT INTO USER(username, PASSWORD, gender, registeTime) 21 | VALUES('peach', '9999', 2, '1990-8-30'); 22 | 23 | /* 24 | select * from user order by id; 25 | 26 | */ 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /docs/常用功能模块代码/利用cookie获取最近一次访问页面时间/LastCookieTimeServlet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用功能模块代码/利用cookie获取最近一次访问页面时间/LastCookieTimeServlet.java -------------------------------------------------------------------------------- /docs/常用功能模块代码/防盗链/RefererServlet.java: -------------------------------------------------------------------------------- 1 | package com.ithiema.header; 2 | 3 | import java.io.IOException; 4 | import javax.servlet.ServletException; 5 | import javax.servlet.http.HttpServlet; 6 | import javax.servlet.http.HttpServletRequest; 7 | import javax.servlet.http.HttpServletResponse; 8 | 9 | public class RefererServlet extends HttpServlet { 10 | 11 | protected void doGet(HttpServletRequest request, HttpServletResponse response) 12 | throws ServletException, IOException { 13 | 14 | //对该新闻的来源的进行判断 15 | String header = request.getHeader("referer"); 16 | if(header!=null&&header.startsWith("http://localhost")){ 17 | //是从我自己的网站跳转过来的 可以看新闻 18 | response.setContentType("text/html;charset=UTF-8"); 19 | response.getWriter().write("中国确实已经拿到100块金牌...."); 20 | }else{ 21 | response.getWriter().write("你是盗链者,可耻!!"); 22 | } 23 | 24 | 25 | } 26 | 27 | protected void doPost(HttpServletRequest request, HttpServletResponse response) 28 | throws ServletException, IOException { 29 | doGet(request, response); 30 | } 31 | } -------------------------------------------------------------------------------- /docs/常用工具和环境/Git&GitHub/Git&GitHub.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用工具和环境/Git&GitHub/Git&GitHub.pdf -------------------------------------------------------------------------------- /docs/常用工具和环境/Git&GitHub/关于GitHub的一些经验总结(包括README文件的编写目录的自动生成).md: -------------------------------------------------------------------------------- 1 | ## 一、README.md上传图片 2 | 需要注意的是一定要图片先上传到图床,我这边用的有两个 3 | 1、[图床](https://imgchr.com/) 4 | 2、[七牛云](https://www.qiniu.com/) 5 | 关于七牛云我会出另外一篇文章细说 6 | 注意:不管是截图的图片还是本地上传的图片都要上传到图床上,,然后复制URL才可以在GitHub中显示 7 | 8 | ## 二、README.md自动生成目录 9 | 不能用Markdown的【TCG】自动生成目录,在GitHub上是不显示的 10 | 我的办法是: 11 | 1、[点开网站](https://sleepeatcode.com/ghtoc) 12 | 2、将GitHub的README.md的URL复制,自动生成目录,但是这是不全的 13 | 3、复制目录到README.md文件,需要在后面的括号处加上#文件名,这个是我能找到的比较简单的办法了,比手动敲简单 14 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190331070938177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 15 | 特别注意:#后面不要加任何特殊字符和数字,目录不要编号,否则不成功,内部跳转不成功的很大部分原因也是因为内部编号了。 16 | 17 | ## >三、我的GitHub 18 | https://github.com/freestylefly/javaStudy#ajax 19 | 期待你的加入!,有什么不懂的可以在GitHub上留言问我。 20 | 21 | -------------------------------------------------------------------------------- /docs/常用工具和环境/Git&GitHub/分布式版本控制工具——Git.md: -------------------------------------------------------------------------------- 1 |  2 | ## 目录 3 | - [一、写在前面](#一写在前面) 4 | - [二、Git的优势](#二git的优势) 5 | - [三、Git的基本结构](#三git的基本结构) 6 | - [四、本地库和远程库](#四本地库和远程库) 7 | - [五、本地库初始化](#五本地库初始化) 8 | - [六、设置签名](#六设置签名) 9 | - [七、常用命令](#七常用命令) 10 | - [八、历史记录](#八历史记录) 11 | - [九、版本前进后退](#九版本前进后退) 12 | 13 | 14 | ## 一、写在前面 15 | 16 | Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。发明人就是大名鼎鼎的Linus ,发明初衷为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。需要知道的是Git底层文件验证采用的是SHA-1,(SHA-1)哈希算法可以被用来验证文件。哈希算法有如下特点: 17 | 1、不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定 18 | 2、哈希算法确定,输入数据确定,输出数据能够保证不变 19 | 3、哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大 20 | 4、哈希算法不可逆 21 | ## 二、Git的优势 22 | 23 | 1. 大部分在本地完成,不用联网 24 | 2. 完整性保证 25 | 3. 尽可能添加数据而不是删除和修改数据 26 | 4. 分支操作非常快速刘闯 27 | 5. 和Linux命令全面兼容 28 | ## 三、Git的基本结构 29 | 工作区:写代码的地方 30 | 暂存区:Git临时存储的地方 31 | 本地库:Git存放的历史版本 32 | ## 四、本地库和远程库 33 | 局域网:GitLab 34 | 外网:GitHub、码云 35 | 1、团队内部协作: 36 | push:本地库提交到远程库 37 | pull:拉取远程库代码到本地库,包括两个操作fetch(拉取)+merge(合并)拉取并合并,就是将远程库的代码更新到本地库 38 | clone:将远程库所有东西下载到本地,并且建立本地库 39 | 2、跨团队协作 40 | 如需要在被人的GitHub仓库提交自己的修改,跨团队协作 41 | fork:复制一份别人的代码在自己的远程库 42 | pull request:拉取请求,发送自己的修改 43 | merge:合并保存 44 | ## 五、本地库初始化 45 | ”命令:git init 46 | 注意:.git目录不能删除 47 | ## 六、设置签名 48 | 1、作用:在你提交代码的时候作为一个标识,代表这是你提交的代码,这里的签名和远程库上面的账号和密码没有任何关系 49 | 2、命令 50 | ```java 51 | 命令 52 | git comfig user.name 你的签名 53 | git config user.email 你的邮箱 54 | 55 | ``` 56 | 3、注意:签名分两种: 57 | 项目级别:也叫仓库级别,仅在当前本地库范围内有效,git gonfig命令 58 | 系统级别:当前操作系统的用户有效,git config --global 59 | **优先级:就近原则 60 | 4、查看签名 61 | 62 | ```java 63 | 仓库级别: 64 | cat .git/config 65 | 系统级别: 66 | cat `/.gitconfig 67 | ``` 68 | ## 七、常用命令 69 | 70 | ```java 71 | git status:查看工作区、暂存区状态 72 | git add 文件名:添加文件到暂存区 73 | git add *:添加所有文件到暂存区 74 | git rm --cached 文件名:将暂存区恢复到工作区 75 | git commit -m"提交日志" 文件名:提交文件到本地库 76 | git commit -a -m"提交日志" :添加所有文件到本地库 77 | 78 | ``` 79 | ## 八、历史记录 80 | 1、查看历史记录 81 | git log 82 | git reflog 简洁的查看历史记录,HEAD值简单化 83 | 2、多层显示控制方式 84 | 空格向下切换 85 | b向上翻页 86 | q退出 87 | ## 九、版本前进后退 88 | 1、基于索引值操作 89 | git reset --hard 索引值 90 | git help 具体命令:查看帮助 91 | 92 | 2、reset命令的三个参数对比 93 | --sert:仅仅在本地库移动HEAD指针 94 | --mixed:从本地库移动指针,重置暂存区 95 | --hard:本地库移动指针,重置暂存区,重置工作区 96 | ## 十、删除后找回 97 | 一定要明确一点就是,你从本地库或者工作区删除了文件,一定要将删除的操作add和commit 到本地库才可以找回相关文件。 98 | git reset--hard 指针位置 99 | ## 十一、比较文件差异 100 | git diff:工作区和暂存区比较 101 | git diff HEAD 文件名:本地库和历史版本比较,不带文件名是比较多个文件 102 | ## 十二、git的分支 103 | 1、什么是分支 104 | 版本控制中, 使用多条分支同时推进多个任务 105 | 2、查看所有分支 106 | git branch -v 107 | 3、创建分支 108 | git branch 分支名 109 | 4、切换分支 110 | gitcheckout 分支名 111 | 5、合并分支 112 | 第一步L切换到被合并分支 113 | 第二步:执行git merge 分支名 114 | 6、解决分支冲突 115 | 删掉相关标记 116 | git add 文件名:标记为已解决 117 | git commit -m“”“”:提交解决冲突 118 | 注意:提交的时候不能带文件名 119 | ## 十三、GitHub 120 | 1、给远程库URL新建别名 121 | git remote add 别名 远程仓库URL 122 | 2、查看远程仓库地址别名 123 | git remote -v 124 | 3、推送到远程库 125 | git push 别名 分支名 126 | 4、克隆远程仓库内容到本地 127 | git clone 远程地址别名 128 | 注意:克隆会晚会智能的把远程库下载到本地,创建origin远程地址的别名,并且会初始化本地库 129 | 5、抓取:将远程分支放到本地 130 | git fetch 别名 分支名 131 | 6、合并 132 | 将远程分支合并到本地库 133 | git merge 悲鸣/分支名 134 | 7、抓取并合并 135 | git pull 别名 分支名 136 | ## 十四、ssh免密登录和eclipse下的git操作 137 | 这个可以直接访问仓库,对应资源可以下载 138 | https://github.com/freestylefly/javaStudy/tree/master/Git%26GitHub 139 | ## 十五、写在最后 140 | 如果有想要学习资源的话欢迎评论咨询! 141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/常用工具和环境/InteliJ_IDEA/idea下新建的spring boot项目,无法导入依赖以及idea基础回顾.md: -------------------------------------------------------------------------------- 1 | # 一、问题描述 2 | 最近在idea中导入spring boot项目的依赖时,无论怎么也无法导入依赖,如图所示: 3 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420225355958.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 4 | 总是显示:Project 'org.springframework.boot:spring-boot-starter-parent:1.5.9.RELEASE' not found 5 | 一开始以为是maven配置的不对,重新修改配置还是不对 6 | # 二、问题解决 7 | 原来是因为每次用idea新建项目, 二进制版本都是1.5或1.6。只需要修改settings——build Execution Deploment——Compler——java Compler里面修改,如图: 8 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420225831122.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 9 | 修改成JDK1.8即可,刚开始默认是1.5的,也不知道为啥1.5就不能自动导入项目需要的依赖。反正问题就解决了。 10 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420225941307.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 11 | # 三、补充idea基础 12 | ## 1、进入settings,目录结构 13 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420230504104.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 14 | 15 | ## 2、设置主题 16 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420230601414.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 17 | 这里默认提供了三套主题:IntelliJ,Darcula,Windows。这里可以根据自己的喜好进行选择。 18 | ## 3、设置窗体及菜单的字体及字体大小 19 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420230725605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 20 | ## 4、Ctrl + 鼠标滚轮 快捷键来控制代码字体大小显示 21 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420230853739.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 22 | ## 5、设置鼠标悬浮提示 23 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420230924713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 24 | ## 6、设置自动导包功能 25 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420230958526.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 26 | Add unambiguous imports on the fly:自动导入不明确的结构 27 | Optimize imports on the fly:自动帮我们优化导入的包# 28 | ## 7、设置显示行号和方法间的分隔符 29 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420231217341.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 30 | 如上图红圈所示,可以勾选 Show line numbers:显示行数。我建议一般这个要勾选上 31 | 如上图红圈所示,可以勾选 Show method separators: 显示方法分隔线。这种线有助于我们区分开方法,所以建议勾选上 32 | 33 | ## 8、忽略大小写提示 34 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420231348255.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 35 | ## 9、设置取消单行显示 tabs 的操作 36 | 37 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420231428292.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 38 | 39 | ## 10、设置默认的字体、字体大小、字体行间距 40 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420231504625.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 41 | ## 11、修改类头的文档注释信息 42 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420231703634.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 43 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420231623228.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 44 | 45 | ## 12、设置项目文件编码 46 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420231839193.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 47 | # 四、关于我 48 | ------ 49 | # 本文章已同步至我的GitHub仓库:Javastudy,期待您的加入:blush: 50 | 51 | 52 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 53 | 54 | 55 | # 来我的微信公众号玩耍呗:blush: 56 | 57 | 58 | # 扫码无套路关注我的CSDN博客:blush: 59 | -------------------------------------------------------------------------------- /docs/常用工具和环境/InteliJ_IDEA/settings.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用工具和环境/InteliJ_IDEA/settings.jar -------------------------------------------------------------------------------- /docs/常用工具和环境/InteliJ_IDEA/尚硅谷_宋红康_IntelliJIDEA的安装、配置与使用.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用工具和环境/InteliJ_IDEA/尚硅谷_宋红康_IntelliJIDEA的安装、配置与使用.pdf -------------------------------------------------------------------------------- /docs/常用工具和环境/InteliJ_IDEA/激活码.txt: -------------------------------------------------------------------------------- 1 | T3ACKYHDVF-eyJsaWNlbnNlSWQiOiJUM0FDS1lIRFZGIiwibGljZW5zZWVOYW1lIjoi5bCP6bifIOeoi+W6j+WRmCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjAxOS0wNi0xMyIsInBhaWRVcFRvIjoiMjAyMC0wNi0xMiJ9LHsiY29kZSI6IkFDIiwiZmFsbGJhY2tEYXRlIjoiMjAxOS0wNi0xMyIsInBhaWRVcFRvIjoiMjAyMC0wNi0xMiJ9LHsiY29kZSI6IkRQTiIsImZhbGxiYWNrRGF0ZSI6IjIwMTktMDYtMTMiLCJwYWlkVXBUbyI6IjIwMjAtMDYtMTIifSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwMTktMDYtMTMiLCJwYWlkVXBUbyI6IjIwMjAtMDYtMTIifSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMTktMDYtMTMiLCJwYWlkVXBUbyI6IjIwMjAtMDYtMTIifSx7ImNvZGUiOiJETSIsImZhbGxiYWNrRGF0ZSI6IjIwMTktMDYtMTMiLCJwYWlkVXBUbyI6IjIwMjAtMDYtMTIifSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwMTktMDYtMTMiLCJwYWlkVXBUbyI6IjIwMjAtMDYtMTIifSx7ImNvZGUiOiJSUzAiLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiUkQiLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiUk0iLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiV1MiLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiREMiLCJmYWxsYmFja0RhdGUiOiIyMDE5LTA2LTEzIiwicGFpZFVwVG8iOiIyMDIwLTA2LTEyIn0seyJjb2RlIjoiUlNVIiwiZmFsbGJhY2tEYXRlIjoiMjAxOS0wNi0xMyIsInBhaWRVcFRvIjoiMjAyMC0wNi0xMiJ9XSwiaGFzaCI6IjEzMzgwMDA0LzAiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-nTBuZDiAOuM4IHXNkS7GbCvZVZFo4EcHf9hHzfhaPYsaCGQjuCVJFEboopbPuEHn16yT9Zvf7yRuM5WGlGmpcOJnWLpCmGm65S6wHtZdX0kfSNIqnqdS1MhIHpftsAGxSswuQksrm09tltbO4nATeavGs1BIMafsCJVen+BvDFvYL7+3crkRI7AwdyMb2miLLYJcEVPhiVKZnzJUzT9uA8/4Q02BqsvX5oSJg8cLw3w7Cd0ISrn1i8uENe/1z3T/Ede0STM7eOekFaVEdO9cgzYME3iIFzi2TZXMSqIuBpJqF4NFb6M0039tEGy6EHqcksMyDTdCAASquqcDcHrUUA==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow== -------------------------------------------------------------------------------- /docs/常用工具和环境/Linux/Linux命令大全(修改版).chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用工具和环境/Linux/Linux命令大全(修改版).chm -------------------------------------------------------------------------------- /docs/常用工具和环境/Linux/day21--linux入门.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用工具和环境/Linux/day21--linux入门.pdf -------------------------------------------------------------------------------- /docs/常用工具和环境/Linux/操作系统的作用.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/常用工具和环境/Linux/操作系统的作用.png -------------------------------------------------------------------------------- /docs/常用工具和环境/eclipse/Eclipse调用方法放回值快捷键.md: -------------------------------------------------------------------------------- 1 | 有时候条用某个方法,知道返回值类型,需要用变量接收的时候,要手动去创建变量很麻烦,比如: 2 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181221175401829.png) 3 | 当调用getServletContext方法我们鼠标放在方法上可以显示返回值是:ServletContext ,这个时候怎么样快速用一个饮用型变量接收呢? 4 | 方法很简单 5 | 6 | 在";"分号后面按住Ctrl+1,选择第一个即可有变量类型以及自动取好名字: 7 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181221175637113.png) 8 | 9 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181221175655916.png) 10 | 还可以对变量名选择,一般情况变量名和变量类型一致,只是首字母不要大写即可 11 | ,如果Ctrl+1后选择第二个,需要你自己手动输入变量名,一般Ctrl+1,然后选第一个就OK; 12 | ------ 13 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 14 | 15 | 16 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 17 | 18 | 19 | # 来我的微信公众号玩耍呗:blush: 20 | 21 | 22 | # 扫码无套路关注我的CSDN博客:blush: 23 | 24 | -------------------------------------------------------------------------------- /docs/常用工具和环境/eclipse/Eclipse配置Servlet模板.md: -------------------------------------------------------------------------------- 1 | 有时候新建servlet时候会生成很多我们不是想要的东西,每一次都去复制黏贴,手动删除我们不想要的东西,那么如何设置专属自己的模板呢?只需要输入短短几个字,然后ALT+/即可: 2 | 3 | 这里以Eclipse4.5.2版本为例: 4 | 5 | 1.打开Eclilpse,Window->Preferences 6 | 7 | 2.Java->Editor->Templates->New 8 | 9 | 配置如图: 10 | 11 | 12 | 13 | Pattern内容如下: 14 | ```java 15 | package ${enclosing_package}; 16 | import java.io.IOException; 17 | import javax.servlet.ServletException; 18 | import javax.servlet.http.HttpServlet; 19 | import javax.servlet.http.HttpServletRequest; 20 | import javax.servlet.http.HttpServletResponse; 21 | 22 | public class ${primary_type_name} extends HttpServlet { 23 | 24 | public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 | response.getWriter().write("hello haohao..."); 26 | } 27 | 28 | public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 29 | doGet(request, response); 30 | } 31 | } 32 | ``` 33 | 勾选上“Use code formatter”->Apply->OK 34 | 3.重启Eclipse 35 | 36 | 4.使用Alt+/来快速匹配出模板,创建出简单清晰的Servlet 37 | 38 | 原文:https://blog.csdn.net/czkct/article/details/78750478 39 | ------ 40 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 41 | 42 | 43 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 44 | 45 | 46 | # 来我的微信公众号玩耍呗:blush: 47 | 48 | 49 | # 扫码无套路关注我的CSDN博客:blush: 50 | 51 | 52 | -------------------------------------------------------------------------------- /docs/常用工具和环境/eclipse/eclipse中tomcat-advanced以及插件的使用.md: -------------------------------------------------------------------------------- 1 | # 一、问题背景 2 | 今天新需求,需要用到eclipse的tomcat插件,且项目的编译环境为JDK1.7及以下,而我电脑之前的JDK为1.8,tomcat为8,现在也就是要切换JDK版本为1.7且tomcat为7,搞来搞去,搞了一天,必须记录下 3 | # 二、同一电脑安装不同版本的JDK和tomcat 4 | ## 1、网上很多都很玄学 5 | 百度了下,很多说的很玄学,其实很简单。 6 | ## 2、不同版本JDK 7 | 同样的安装,只是环境变量配置的时候,修改JAVA_HOME为对应的JDK的安装目录即可,当然还有更简单的切换方法,比如配置AVA_HOME7和AVA_HOME8,然后用AVA_HOME=%AVA_HOME7%这样的方式,告诉你,亲测,没什么软用 8 | ## 3、不同版本tomcat 9 | 环境变量替换即可 10 | # 三、eclipse的tomcat插件配置 11 | 找到eclipse配置下的tomcat,然后选7x,选择tomcat的安装路径,然后下面的apache-tomcat-7.0.41\conf\Catalina\localhost将xml文件加进来,因为公司项目已经配好,具体怎么搞看自己 12 | 13 | 14 | 注意:当项目死活启动说缺少相应jar包,排除其他问题,那么可以考虑,是不是tomcat-advanced这里没有依赖给引进来。
15 | 我就是因为这个点,最后项目启动了半天,还是有经验的同事告诉我才解决这个问题。 16 | eclipse真是个神奇的东西,各种错误都某明奇妙,走IDEA了准备。 17 | ------ 18 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 19 | 20 | 21 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 22 | 23 | 24 | # 来我的微信公众号玩耍呗:blush: 25 | 26 | 27 | # 扫码无套路关注我的CSDN博客:blush: 28 | -------------------------------------------------------------------------------- /docs/常用工具和环境/eclipse/eclipse中配置XML提示.md: -------------------------------------------------------------------------------- 1 | ## 一、问题原油 2 | 当我们在eclipse中编写XML时,需要出来提示信息(前提是没有联网),那么就需要进行用户自定义配置相关信息、 3 | ## 二、步骤 4 | 这里我以配置Hibernate框架 中的XML为例子 5 | ### 1、将网络地址复制 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190127142330842.png) 7 | ### 2、打开windows下的个性设置profenrencese 8 | 如图,依次找到用户自定义设置 9 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190127142602526.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 10 | 点击add 11 | ### 3、add页面配置 12 | 将刚复制的网络URI地址放入keys中,type类型选择URI,location路径选择对应的路径,比如我这里对应的是hibernate-mapping-3.0的路径,需要在hibernate的jar包中找到该配置文件 13 | ### 4、完成配置 14 | ------ 15 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 16 | 17 | 18 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 19 | 20 | 21 | # 来我的微信公众号玩耍呗:blush: 22 | 23 | 24 | # 扫码无套路关注我的CSDN博客:blush: 25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/常用工具和环境/eclipse/解决在Eclipse新建web项目没有自动生成web.xml和在新建servlet的时候自动生成web.xml配置.md: -------------------------------------------------------------------------------- 1 | ## 一、在Eclipse新建web项目没有自动生成web.xml解决办法 2 | ## 方法一:在Eclipse新建web项目的时候重要参数上打勾 3 | 1、file--new-Dynamic Web Project 4 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160226360.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 5 | 2、next下一步 6 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160315960.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 7 | 8 | 3、next下一步 9 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160348211.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 10 | 11 | 4、关键:这里一定要打勾,默认是没有打勾的![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160416976.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 12 | 13 | 5、建好后可以点开就有web.xml了 14 | 15 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160544786.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 16 | 17 | ## 方法二:在已经建好的项目上加上web.xml 18 | 1.项目名称右键-->Properties: 19 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160700888.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 20 | 2.点击Project Facets,取消选中Dynamic Web Module,点击Apply 21 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160730677.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 22 | 3.重新选中Dynamic Web Module后,会出现Further configuration available... 23 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160754808.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 24 | 25 | 4.点击Further configuration available...,选中Generate web.xml deployment descriptor,点击ok,Apply后,在WEB-INF下生成了web.xml。 26 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214160812893.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 27 | 28 | ## Eclipse在新建servlet的时候自动生成web.xml配置 29 | 在新建web项目的时候: 30 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214161006245.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 31 | 我们新建默认用的是Tomact7.0,里面用的是servlet3.0版本默认的是使用注解配置,在新建dynamic web project 时,dynamic web module version选择2.5就ok了。 32 | 选择2.6即可 33 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181214161120451.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcwMDc0,size_16,color_FFFFFF,t_70) 34 | 这样就自动生成了servlet的文本.xml的自动配置t 35 | ------ 36 | # 本文章已同步至GitHub仓库:Javastudy,期待您的加入:blush: 37 | 38 | 39 | # 本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush: 40 | 41 | 42 | # 来我的微信公众号玩耍呗:blush: 43 | 44 | 45 | # 扫码无套路关注我的CSDN博客:blush: 46 | -------------------------------------------------------------------------------- /docs/文档/usingthymeleaf.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2227324689/javaStudy/ccfa15dde5065e1d5cedbc4ae3f71e4ad22a4459/docs/文档/usingthymeleaf.pdf -------------------------------------------------------------------------------- /docs/经验总结/java在过滤器中为http请求加请求头header.md: -------------------------------------------------------------------------------- 1 | # 前言 2 | 现在有一个需求场景是,每一个请求我都需要在请求头里面加上token这个请求头,作为一种校验机制,传统的接口可以通过设置一个全局的变量,然后通过页面携带过来(大概就是先将我们的token放在session中,写一个服务用来获取session中的token,然后主页面用ajax调用接口,将token放在隐藏域中,然后将请求头放进来,用ajax方法,这里不想洗说了),但是有一种情况是通过页面传递的并不一定都会适用所有接口,比如上传和下载的接口有时候头里面就没有token参数,可能是上传和下载是用表单提交的 3 | 这个时候如何将请求头通过后台的方法加进来? 4 | 想到用过滤器,用后台方法强制加入请求头。 5 | 6 | # HTTP请求头 7 | 关于http请求头的相关信息可以参考这票博客,这里就不画蛇添足了 8 | https://blog.csdn.net/alexshi5/article/details/80379086 9 | 下面直接上如何通过filter为请求添加请求头参数: 10 | 11 | # 新建请求控制类 12 | ```java 13 | package com.bitplan.smartCRM.web; 14 | 15 | import java.io.IOException; 16 | import java.util.Collections; 17 | import java.util.Enumeration; 18 | import java.util.HashMap; 19 | import java.util.List; 20 | import java.util.Map; 21 | 22 | import javax.servlet.Filter; 23 | import javax.servlet.FilterChain; 24 | import javax.servlet.FilterConfig; 25 | import javax.servlet.ServletException; 26 | import javax.servlet.ServletRequest; 27 | import javax.servlet.ServletResponse; 28 | import javax.servlet.http.HttpServletRequest; 29 | import javax.servlet.http.HttpServletRequestWrapper; 30 | 31 | public class HeaderMapRequestWrapper extends HttpServletRequestWrapper { 32 | /** 33 | * construct a wrapper for this request 34 | * 35 | * @param request 36 | */ 37 | public HeaderMapRequestWrapper(HttpServletRequest request) { 38 | super(request); 39 | } 40 | 41 | private Map headerMap = new HashMap(); 42 | 43 | /** 44 | * add a header with given name and value 45 | * 46 | * @param name 47 | * @param value 48 | */ 49 | public void addHeader(String name, String value) { 50 | headerMap.put(name, value); 51 | } 52 | 53 | @Override 54 | public String getHeader(String name) { 55 | String headerValue = super.getHeader(name); 56 | if (headerMap.containsKey(name)) { 57 | headerValue = headerMap.get(name); 58 | } 59 | return headerValue; 60 | } 61 | 62 | /** 63 | * get the Header names 64 | */ 65 | @Override 66 | public Enumeration getHeaderNames() { 67 | List names = Collections.list(super.getHeaderNames()); 68 | for (String name : headerMap.keySet()) { 69 | names.add(name); 70 | } 71 | return Collections.enumeration(names); 72 | } 73 | 74 | @Override 75 | public Enumeration getHeaders(String name) { 76 | List values = Collections.list(super.getHeaders(name)); 77 | if (headerMap.containsKey(name)) { 78 | values.add(headerMap.get(name)); 79 | } 80 | return Collections.enumeration(values); 81 | } 82 | 83 | } 84 | ``` 85 | # 新建过滤器 86 | 注意:需要将请求头里面没有token的接口后面带上token参数,参数名是“”token“” 87 | ```java 88 | public class RemoteAddrFilter implements Filter { 89 | 90 | @Override 91 | public void destroy() { 92 | 93 | } 94 | 95 | @Override 96 | public void doFilter(ServletRequest request, ServletResponse response, 97 | FilterChain chain) throws IOException, ServletException { 98 | HttpServletRequest req = (HttpServletRequest) request; 99 | HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(req); 100 | //获得请求参数中的token值 101 | String token = request.getParamter("token"); 102 | if(!StringUtils.isEntry(token)){ 103 | //如果请求中带有这个参数,则进行过滤加一个header头 104 | requestWrapper.addHeader("tokenr", token); 105 | chain.doFilter(requestWrapper, response); // Goes to default servlet. 106 | } 107 | chain.doFilter(request, response); // Goes to default servlet. 108 | 109 | } 110 | 111 | @Override 112 | public void init(FilterConfig filterConfig) throws ServletException { 113 | 114 | } 115 | ``` 116 | 这个时候请求头中是会带有这个token,但是你可能用右键F12看不到这个头,相当于是一层伪代理,我们的接口是已经加上token校验。 117 | 118 | # 总结 119 | 查找了很多资料,百度找到的和其他博客上说的感觉都是大同小异,并没有达到想要的效果。我觉得写博客就得一针见血,什么问题必须标书清楚,不要为了写而写,你可能不知道当人看了半天你的博客但是却没有得到问题的解决是一件多么痛苦的过程。最后是在https://stackoverflow.com上面找到的答案,当百度找不到答案时尝试谷歌,谷歌找不到时尝试下stackoverflow。 120 | 查找问题的搜索词也很重要,这些都需要有相关的经验才可以快速的定位问题,快速的找到解决办法,这才是一个资深程序眼必须会的一项技能。 121 | --------------------------------------------------------------------------------