JavaEE知识体系详细知识点详细讲解

    xiaoxiao2022-07-07  189

    JavaEE知识体系

    idl的快捷方式:

    查找:ctrl+F

    快速显示文档和信息:ctrl+Q

    抽取方法:ctrl+alt+M

    修改:shift+F6

    导入:ctrl+shift+alt+S

    快捷键英文说明中文说明Ctrl + SpaceBasic code completion (the name of any class, method or variable)补全代码,由于经常与操作系统的输入法的切换冲突,所以实际很少用。一般直接在 idea 中开启输入自动补全机制。Ctrl + Shift + SpaceSmart code completion (filters the list of methods and variables by expected type在列出的可选项中只显示出你所输入的关键字最相关的信息。(常用)Ctrl + Shift + EnterComplete statement代码补全后,自动在代码末尾添加分号结束符Ctrl + PParameter info (within method call arguments)在某个方法中,调用该按键后,会展示出这个方法的调用参数列表信息。Ctrl + QQuick documentation lookup展示某个类或者方法的 API 说明文档Ctrl + mouseover code Brief Info跳进到某个类或者方法源代码中进行查看。(常用)Alt + InsertGenerate code… (Getters, Setters, Constructors, hashCode/equals, toString)自动生成某个类的 Getters, Setters, Constructors, hashCode/equals, toString 等代码。(常用)Ctrl + OOverride methods展示该类中所有覆盖或者实现的方法列表,注意这里是字母小写的 O!Ctrl + Alt + TSurround with… (if..else,try..catch, for, synchronized, etc.)自动生成具有环绕性质的代码,比如:if..else,try..catch, for, synchronized 等等,使用前要先选择好需要环绕的代码块。(常用)Ctrl + /Comment/uncomment with line comment对单行代码,添加或删除注释。分为两种情况:如果只是光标停留在某行,那么连续使用该快捷键,会不断注释掉下一行的代码;如果选定了某行代码(选定了某行代码一部分也算这种情况),那么连续使用该快捷键,会在添加或删除该行注释之间来回切换。(常用)Ctrl + Shift + /Comment/uncomment with block comment对代码块,添加或删除注释。它与 Ctrl + / 的区别是,它只会在代码块的开头与结尾添加注释符号!(常用)Ctrl + WSelect successively increasing code blocks选中当前光标所在的代码块,多次触发,代码块会逐级变大。(常用)Ctrl + Shift + WDecrease current selection to previous state是 Ctrl + W 的反向操作,多次触发,代码块会逐级变小,最小变为光标。Alt + QContext info展示包含当前光标所在代码的父节点信息,比如在 java 方法中调用,就会展示方法签名信息。Alt + EnterShow intention actions and quick-fixes展示当前当前光标所在代码,可以变化的扩展操作Ctrl + Alt + LReformat code格式化代码 (常用)Ctrl + Alt + OOptimize imports去除没有实际用到的包,这在 java 类中特别有用。(常用)Ctrl + Alt + IAuto-indent line(s)按照缩进的设定,自动缩进所选择的代码段。Tab / Shift + TabIndent/unindent selected lines缩进或者不缩进一次所选择的代码段。(常用)Ctrl + X 或 Shift DeleteCut current line or selected block to clipboard剪切当前代码。 (常用)Ctrl + C 或 Ctrl + InsertCopy current line or selected block to clipboard拷贝当前代码。 (常用)Ctrl + V 或 Shift + InsertPaste from clipboard粘贴之前剪切或拷贝的代码。(常用)Ctrl + Shift + VPaste from recent buffers…从之前的剪切或拷贝的代码历史记录中,选择现在需要粘贴的内容。(常用)Ctrl + DDuplicate current line or selected block复制当前选中的代码。(常用)Ctrl + YDelete line at caret删除当前光标所在的代码行。(常用)Ctrl + Shift + JSmart line join把下一行的代码接续到当前的代码行。Ctrl + EnterSmart line split当前代码行与下一行代码之间插入一个空行,原来所在的光标不变。(常用)Shift + EnterStart new line当前代码行与下一行代码之间插入一个空行,原来光标现在处于新加的空行上。(常用)Ctrl + Shift + UToggle case for word at caret or selected block所选择的内容进行大小写转换。。(常用)Ctrl + Shift + ]/[Select till code block end/start从当前光标所在位置开始,一直选择到当前光标所在代码段起始或者结束位置。Ctrl + DeleteDelete to word end删除从当前光标所在位置开始,直到这个单词的结尾的内容。Ctrl + NumPad(+/-)Expand/collapse code block展开或收缩代码段。 (常用)Ctrl + Shift + NumPad(+)Expand all展开所有代码段。Ctrl + Shift + NumPad(-)Collapse all收缩所有代码段。Ctrl + F4Close active editor tab关闭当前标签页。Shift + F6 修改名字。(常用)

    一、数据库

    Servlet的ResultInfo的固定步骤:

    ResultInfo info=null; try{ info=new ResultInfo(true,路径,""); }catch(Exception e){ e.printStackTrace(); info = new ResultInfo(false, "系统忙,请稍候"); } //把集合转换成json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(info); response.getWriter().print(json);

    action

    首先搞明白观念:你action返回的值 ajax是得不到的。ajax能得到的是你action里往前台输出的内容,也就是action往输出流里输出的内容,而不是返回值。如果lz想要得到action返回给ajax的内容,那么在action里要得到输出流,然后把要给ajax的东西给输出流。这样ajax端才能得到你输出的内容。

    1. MySql管理

    启动服务:net start mysql

    关闭服务:net stop mysql

    登录MySql:mysql -u用户名 -p密码

    2. SQL语句

    SQL快捷键

    在学习使用sqlyog的时候,想要多行注释SQL语句,就去网上找了相关的快捷键,与大家分享,网上有很多!

    Ctrl+M 创建一个新的连接 Ctrl+N 使用当前设置新建连接 Ctrl+F4 断开当前连接

    对象浏览器 F5 刷新对象浏览器(默认) Ctrl+B 设置焦点于对象浏览器

    SQL 窗口 Ctrl+T 新建查询编辑器 Ctrl+E 设置焦点于 SQL 窗口 Ctrl+Y 重做 Ctrl+Z 撤销 Ctrl+X 剪切 Ctrl+V 粘贴 Ctrl+H 替换 Ctrl+G 转到 Ctrl+O 在 SQL 窗口打开一个 SQL 文档 Ctrl+Shift+U 使选择内容大写 Ctrl+Shift+L 使选择内容小写 Ctrl+Shift+C 注释 SQL 窗口选择内容 Ctrl+Shift+R 从选择内容删除注释 Ctrl+Shift+T 插入模板 Ctrl+Enter 列出所有的标签 Ctrl+Space 列出匹配的标签

    执行查询 F8 执行当前查询并编辑结果集 F9 执行当前查询(默认) Ctrl+F9 执行选定查询(默认) Shift+F9 执行全部查询(默认)

    粘贴 SQL 语句 Alt+Shift+I 插入语句 Alt+Shift+U 更新语句 Alt+Shift+D 删除语句 Alt+Shift+S 选择语句

    结果 F11 插入更新对话框 Ctrl+R 设置焦点于结果面板中的活动标签 Ctrl+L 切换结果窗口/表数据以表格/文本方式显示 Ctrl+Alt+C 以 CSV, SQL, Excel 等导出表数据 Ctrl+Alt+E 以 SQL 转储文件备份数据 Ctrl+Shift+M 从 CSV 导入数据 Ctrl+Shift+E 导出结果集 Alt+1…n 在结果窗口中选择第n个标签

    显示/隐藏 Ctrl+1 显示/隐藏 对象浏览器 Ctrl+2 显示/隐藏 结果面板 Ctrl+3 显示/隐藏 查询窗口

    数据库/数据表 Ctrl+D 创建数据库 F6 更改 数据库/数据表的结构/索引/视图/存储过程/函数/触发器/事件 F2 重命名 数据表/视图/触发器/事件 Shift+Del 截断 数据库/数据表 F7 管理索引窗口 F10 关联/外键 Ctrl+Alt+R 重新排序字段 Ctrl+Alt+T 数据表诊断 Ctrl+Alt+F 刷新对话框 Ctrl+Shift+Alt+S 以 HTML 格式创建数据库架构 Ctrl+Shift+Q 从 SQL 转储文件恢复数据库

    增强工具 Ctrl+W 数据库同步向导 Ctrl+Q 架构同步工具 Ctrl+Alt+O 数据迁移工具包 Ctrl+Alt+N 通知服务向导 Ctrl+Alt+S 计划备份 Ctrl+K 查询创建器 Ctrl+Alt+D 架构设计器

    用户管理 Ctrl+U 添加用户 Ctrl+Alt+U 编辑用户 Ctrl+Shift+W 管理用户权限

    个人文件夹 Ctrl+Shift+F 添加当前 SQL 语句到个人文件夹

    其它 F1 帮助 F12 快捷键窗口 Ctrl+C 复制 Ctrl+A 全选 Ctrl+F/F3 查找 (SQL 窗口/以文本方式显示的结果窗口和表数据) Ctrl+S 保存 Ctrl+PgUp 切换到上一标签 Ctrl+PgDown 切换到下一标签 DEL 删除选定 Alt+L 关闭标签 Alt+F4 退出程序

    2.1 DDL

    2.1.1 操作database

    -- 1.创建database create database 数据库名; -- 2.查看database show databases; show create database 数据库名; -- 3.修改database alter database 数据库名 character set 字符集 -- 4. 删除database drop database 数据库名; -- 5. 使用database use 数据库名; select database();

    2.1.2 操作table

    -- 1. 创建table create table 表名称(     字段名 类型 [约束],    ...    字段名 类型 [约束] ); -- 2. 查看table show tables; show create table 表名称; desc 表名称; -- 查看表结构 -- 3. 删除table drop table 表名称; -- 4. 修改table -- 4.1 重命名表 rename table 表名称 to 新名称; -- 4.2 添加字段 alter table 表名称 add 字段名 类型 [约束]; -- 4.3 修改字段类型 alter table 表名称 modify 字段名 新类型 [约束]; -- 4.4 修改字段名称 alter table 表名称 change 字段名 新字段名 类型 [约束]; -- 4.5 删除字符 alter table 表名称 drop 字段名;

    2.2 DML

    -- 1. 插入数据 insert into 表名称 (字段1, 字段2,...) values (值1,值2,...); -- 2. 修改数据 update 表名称 set 字段1=值1, 字段2=值2,... where 条件; -- 3. 删除数据 delete from 表名称 where 条件;

    2.3 DQL

    2.3.1 单表查询

    -- 1.简单查询 select * from 表名称; select 字段1,字段2,... from 表名称; select ifnull(字段,默认值) from 表名称; select 字段1+字段2, 字段3+100,... from 表名称; select 字段1 as 别名1, 字段2 别名2 from 表名称; ​ -- 2.条件查询:>,<,>=,<=,=,<>,like, between...and..., in(),   and, or, not select * from emp where salary > 5000; select * from emp where ename like '张%'; -- %表示任意个任意字符; _表示一个任意字符 select * from emp where salary between 2000 and 10000; select * from emp where dept_id in (10, 30); ​ -- 3.排序查询:order by 排序字段 排序规则    desc降序,asc升序 select * from emp order by age desc; ​ -- 4.聚合函数:聚合函数会忽略null值 select count(*) from emp; select sum(salary) from emp; select avg(salary) from emp; select max(salary) from emp; select min(salary) from emp; ​ -- 5.分组查询:group by 分组字段 having 分组后过滤条件 select dept_id, count(*) from emp group by dept_id having count(*) > 10; ​ -- 6.分页查询:limit 起始索引, 查询数量 select * from emp limit 0, 5;

    2.3.2 多表查询

    -- 1.内连接查询:查询表之间必定有关联的数据 select * from emp e, dept d where e.dept_id = d.id; select * from emp e inner join dept d on e.dept_id = d.id; ​ -- 2.外连接查询:查询一张表的全部数据,及另外一张表的关联数据 select * from emp e left join dept d on e.dept_id = d.id; select * from emp e right join dept d on e.dept_id = d.id; ​ -- 3.子查询:是查询技巧没有固定语法,是查询嵌套 select * from emp where salary = (select max(salary) from emp); select * from dept where id in (select dept_id from emp where salary > 10000); select * from dept d, (select * from emp where salary > 10000) t where d.id = t.dept_id;

    2.4 DCL

    -- 1. 创建用户 create user 'tom'@'%' identified by 'tom'; -- 2. 用户授权 grant all on *.* to 'tom'@'%'; -- 3. 查看权限 show grants for 'tom'@'%'; -- 4. 取消授权 revoke delete on *.* from 'tom'@'%'; -- 5. 删除用户 drop user 'tom'@'%'; -- 6. 修改密码 set password for 'tom'@'%' = password('1234');

    2.5 TCL

    -- 1. 开启事务 start transaction;  -- 或者  set autocommit = 0; -- 2. 执行多条DML语句 -- ...... -- 3. 关闭事务:提交事务 commit; -- 3. 关闭事务:回滚事务 rollback;

    3. JDBC+预编译对象

    //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 Connection conn = DriverManager.getConnection("url","username","password"); //3.创建SQL执行平台 PreparedStatement pstmt = conn.prepareStatement("使用?处理过的sql语句"); pstmt.setXXX(参数序号, 参数值); //4.执行SQL语句   executeUpdate(),  execute() ResultSet rs = pstmt.executeQuery(); //5.处理结果 while(rs.next()){    XXX value = rs.getXXX("字段名称"); } //6.释放资源 rs.close(); pstmt.close(); conn.close();

    4. 连接池

    4.1 c3p0连接池的使用

    导入jar包:数据库驱动包,c3p0的jar包

    提供配置文件:

    文件名称:c3p0-config.xml

    文件位置:类加载路径下(src下)

    编写代码,使用连接池

    ComboPooledDataSource dataSource = new ComboPooledDataSource(); Connection conn = dataSource.getConnectoin(); //使用conn操作数据库 conn.close();

    4.2 druid连接池的使用

    导入jar包:数据库驱动包,druid的jar包

    提供配置文件

    文件名称:xxx.properties

    文件位置:建议放在类加载路径下

    编写代码使用连接池

    DataSource dataSource = DruidDataSourceFactory.createDataSource(Properties对象); Connection conn = dataSource.getConnection(); //使用conn操作数据库 conn.close();

    5. JdbcTemplate

    5.1 使用步骤

    导入jar包:数据库驱动包,连接池的jar包,JdbcTemplate的jar包

    提供连接池的配置文件,和工具类JdbcUtils(工具类里提供了获取连接池对象的方法)

    编写代码,使用JdbcTemplate执行SQL语句

    JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils.getDataSource()); //使用JdbcTemplate的不同方法,执行不同SQL语句

    4.query使用BeanPropertyRowMapper做映射返回对象

    public <T> List<T> query(String sql, RowMapper<T> rowMapper) 执行查询语句,返回一个List集合,List中存放的是RowMapper指定类型的数据

    案例实现

    // query使用BeanPropertyRowMapper做映射返回对象 public static void test07() throws Exception { JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils.getDataSource()); // 查询数据的SQL语句 String sql = "SELECT * FROM product;"; List<Product> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<> (Product.class)); for (Product product : list) { System.out.println(product); } }

    5.2 常用方法

    //1. 查询一个值,比如:查询表里的数量Integer value = jdbcTemplate.queryForObject("sql", Integer.class, params); //2. 查询多条数据,得到JavaBean的集合List<JavaBean> list = jdbcTemplate.query("sql",new BeanPropertyRowMapper<>(JavaBean类名.class), params);//3. 查询一条数据,得到一个JavaBean对象 JavaBean obj = jdbcTemplate.queryForObject("sql",new BeanPropertyRowMapper<>(JavaBean类名.class),params);

    二、客户端

    1. HTML

    2. CSS

    3. JavaScript

    3.1 js的作用

    操作浏览器:使用bom对象

    操作网页(被jQuery封装简化了,代替掉了)

    3.2 js的组成:

    ECMAScript:基本语法规范

    bom:浏览器对象模型,用于操作浏览器的

    dom:文档对象模型,用于操作网页的

    3.3 bom操作

    3.3.1 window

    弹窗方法:

    alert()

    confirm()

    prompt()

    定时器:

    var timer = setInterval(fn, ms)

    clearInterval(timer)

    var timer = setTimeout(fn, ms)

    clearTimeout(timer)

    全局函数

    eval(string):把字符串作为js代码执行一次,把json格式的字符串转换成json对象

    var str = "{....}"; var jsonObj = eval("(" + str + ")")

    3.3.2 location

    location.href = "网址"

    location.reload()刷新当前页

    3.3.3关于重定向和请求转发的问题讲解

     重定向

    浏览器发起的请求已被服务器响应,该请求已经结束,但因为服务器给浏览器响应了一个重定向的链接,所有浏览器会自动在发一次给链接的请求,所以整个过程牵扯到了浏览器

    只能通过response.sendRedirect("path");//response是HttpServletResponse的对象

    注解:

    重定向发了两次请求,且浏览器的地址栏发生变化,可以访问域外链接

    转发是服务器内部的发生的,不会引起浏览器的二次请求,所以地址栏不会发生改变,但不能访问域外链接,且因为是一次的请求,所以内部传递数据。

    通常为了提供访问速度等,一般采用转发

    package com.itheima.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class demo8 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.getServletContext().getRequestDispatcher("path");//转发 request.getRequestDispatcher("path");//转发 response.sendRedirect("path");//重定向 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    请求转发(是服务器内部的事,不牵扯浏览器,转发的时候请求好没有结束)

    通过request.getRequesDispatcher("path").forward(request,response);//resquest是HttpServletRquest的对象

    或者通过调用:this.getServletContext().getRequestDispatcher("path").forward(request,response)来实现

    4. Bootstrap

    三、web核心

    1. Servlet

    1.1 Servlet的生命周期

    何时创建:默认第一次访问时,由Tomcat生成Servlet对象,会执行init方法

    何时销毁:服务器关闭时,销毁时会执行destroy方法

    每次访问必定会执行的方法:service方法

    1.2 Servlet的创建方式

    继承httpServlet的方式

    @WebServlet(urlPatterns="/demo") public class DemoServlet extends HttpServlet{         public void doGet(HttpServletRequest request, HttpServletResponse response){         System.out.println("功能代码");     }         public void doPost(HttpServletRequest request, HttpServletResponse response){         this.doGet(request, response);     } }

    1.3 ServletContext对象

    是一个域对象

    由Servlet规范提供的,可以存取数据的对象。存储的数据在其作用范围里可以共享。

    ServletContext的生命周期

    何时创建:服务器启动时

    何时销毁:服务器关闭时

    作用范围:整个web项目中

    可以获取项目里任意资源

    获取src里的资源:类加载器.getResourceAsStream("资源文件在src里的路径");

    获取web里的资源:servletContext.getResourceAsStream("资源文件在web里的路径");

    2. response

    2.1 操作响应行

    响应行的格式:协议版本 响应状态码

    操作响应状态码:response.setStatus(int code)

    2.2 操作响应头

    响应头的格式:一行一个键值对,一个键值对是一个响应头,一次响应可以有多个响应头

    设置响应头:response.setHeader(String name, String value)

    2.3 操作响应体

    本次响应的正文内容,会显示到浏览器的页面上

    ==字符型:==

    response.setContentType("text/html;charset=utf-8"); response.getWriter().print("会显示到浏览器页面上的内容");

    字节型:

    ServletOutputStream os = response.getOutputStream();

    2.4 ==重定向跳转==

    response.sendRedirect("/项目路径/资源路径");

    3. request

    3.1 获取请求行数据

    请求行的格式:请求方式 请求资源 协议版本

    获取请求方式:request.getMethod()

    获取项目路径:request.getContextPath()

    3.2 获取请求头数据

    请求头的格式:一行一个键值对,一个键值对是一个请求头,一次请求可以有多个请求头

    获取请求头:request.getHeader(String name)

    3.3 ==获取请求参数==

    获取单值的一个表单项:request.getParameter(String name)

    获取多值的一个表单项:request.getParameterValues(String name)

    获取所有的表单项:Map<String,String[]> map = request.getParameterMap()

    如果获取中文参数,只有POST乱码,get方式已经由Tomcat8帮我们解决了乱码问题

    request.setCharacterEncoding("utf-8");

    3.4 是一个域对象

    request域对象:

    何时创建:一次请求开始

    何时销毁:一次请求结束

    作用范围:一次请求中

    3.5 ==可以实现请求转发跳转==

    方法:

    request.getRequestDispatcher("/资源路径").forward(request, response);

    请求转发和重定向的区别

    请求转发有1次请求;重定向有2次请求

    请求转发时地址栏不变;重定向进地址栏会变

    请求转发是服务端跳转;重定向是浏览器跳转

    4. 会话技术

    4.1 什么是会话技术

    会话技术:用来临时保存会话数据的技术,要求:

    一个会话内部,多次请求之间,数据要共享

    多个会话之间,数据相互独立互不干扰的

    会话技术有:

    Cookie:客户端的会话技术

    优点:服务器压力小

    缺点:不安全

    session:服务端的会话技术,依赖于Cookie

    优点:安全

    缺点:服务器压力大

    4.2 Cookie技术的使用

    创建一个Cookie对象

    Cookie cookie = new Cookie(String name, String value);

    设置Cookie的有效期

    有效期:是Cookie存活到什么时候

    默认情况下,有效期是一次会话期间(数据是在浏览器内存中保存的)

    设置有效期:cookie.setMaxAge(int seconds)

    设置Cookie的有效范围

    有效范围:只有在访问有效范围内的资源时,浏览器才会把Cookie携带到服务端

    默认情况下,有效范围是 生成Cookie的资源上一层目录

    设置有效范围:cookie.setPath(String path)

    把Cookie传递给客户端

    response.addCookie(cookie)

    接收客户端携带的Cookie数据

    Cookie[] cookies = request.getCookies()

    4.3 session技术的使用

    得到一个session对象

    HttpSession session = request.getSession()

    什么时候是创建新的session:客户端没有JSESSIONID, 或者 服务端没有对应的session对象

    什么时候是获取旧的session:客户端有JSESSIONID, 并且 服务端有对应的session对象

    向session对象里存取数据(是一个域对象)

    何时创建:一次会话开始

    何时销毁:一次会话结束

    服务器非正常关闭,session销毁

    会话超时,session自动销毁(默认30分钟)

    手动销毁:session.invalidate()

    作用范围:一次会话期间

    5. 域对象总结

    域对象:由Servlet规范提供的,可以存储数据的对象。存取的数据在作用范围里可以共享

    域对象共同的存取数据的方法:

    setAttribute(String name, Object value)

    getAttribute(String name)

    removeAttribute(String name)

    不同域对象,作用范围不同:

    ServletContext:

    何时创建:服务器启动时

    何时销毁:服务器关闭时

    作用范围:整个web项目中

    session:

    何时创建:一次会话开始

    客户端没有JSESSIONID,或者服务端没有session对象

    何时销毁:一次会话结果

    服务器非正常关闭、会话超时、手动销毁session.invalidate()

    作用范围:一次会话期间

    request:

    何时创建:一次请求开始

    何时销毁:一次请求结束

    作用范围:一次请求中

    pageContext:

    何时创建:一个JSP被访问时

    何时销毁:一个JSP被访问结束

    作用范围:一个JSP内部

    域对象使用原则:

    在满足要求的基础上,域对象越小越好

    6. JSP/EL/JSTL

    6.1 JSP

    JSP的嵌套Java脚本:

    <%=Java表达式 %>:用来把表达式结果输出显示到页面上

    <% Java代码块 %>:用来写一些代码逻辑,比如:if、for循环

    <%! Java声明 %>:用来声明一些成员方法、成员变量

    JSP的注释:<%-- JSP注释内容 --%>

    JSP的原理:

    JSP必须要部署在服务器里,才可以运行。

    JSP被服务器翻译成Servlet

    服务器把Sevlet编译成class文件

    访问JSP,本质是调用了Servlet的代码

    6.2 EL

    用来代替JSP里:<%=Java表达式%>,用来向页面输出显示内容

    作用:

    从域里取数据,显示到页面上:${key[索引].key}

    数据运算:+-*/%, >,<,>=,<=,==,!=,&&,||,!, empty,三元运算

    6.3 JSTL

    使用步骤:

    导入jar包

    在JSP里引入标签库

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

    常用标签:

    c:if用于判断

    <c:if test="使用EL表达式进行判断"> 如果判断为true,这里的内容会生效 </c:if>

    c:forEach用于循环遍历

    <c:forEach var="i" begin="1" end="10" step="1"> ${i} </c:forEach> <c:forEach items="EL获取被循环遍历的对象" var="变量" varStatus="vs"> ${变量},     当前序号:${vs.count},     当前索引:${vs.index} </c:forEach>

    7. 使用JSP开发的模式

     

    8. jQuery

    本质是js,简化了js的操作

    使用jQuery的方法只有两步:1.找到它(用选择器),2.操作它(用dom的方法)

    8.1 选择器

    基本选择器:

    $("div")

    $("#div1")

    $(".classname")

    层级选择器

    $("div span"):后代选择器,选择div的后代span

    $("div>span"):子选择器,选择div的子元素span

    属性选择器

    $("input[type='text']"):选择type属性值为text的input标签

    $("link[type]"):选择所有 包含type属性的link标签

    $("a[href][target='_blank']"):复合属性选择器

    基本过滤选择器

    :first, :last, :not(selector), :even, :odd, :eq(n), :lt(n), :gt(n), :header

    表单属性选择器

    :enabled:获取可用的表单项(没有disabled属性的表单项)

    :disabled:获取不可用的表单项(有disabled属性的表单项)

    :checked:获取被选中的radio/checkbox

    :selected:获取被选中的下拉选项option标签

    8.2 dom操作方法

    1. 操作标签体

    html():获取标签体

    html("html代码"):设置标签体,并且html代码会生效,是覆盖式设置

    text():获取标签体里的文本

    text("字符串"):设置文本字符串内容,如果有html代码也不会生效

    2. 操作属性

    attr(attrName)/prop(attrName):获取属性值

    attr(attrName, attrValue)/prop(attrName, attrValue):设置属性值

    removeAttr(attrName):删除属性

    注意:

    如果要获取checked和selected属性,必须使用prop的方法;

    其它属性操作优先使用attr方法,如果不行,再用prop的方法

    3. 操作class属性

    添加class:addClass(类名)

    删除class:removeClass(类名)

    切换class:toggleClass(类名)

    如果标签上有此类名,就删除掉

    如果标签上没有此类名,就添加上

    4. 操作样式:

    css(cssName, cssValue):设置样式

    css(cssName):获取样式

    5. 操作表单项的值

    val():获取表单项的值

    val(v):设置表单项的值

    可以操作文本框、密码框、下拉框、文本域

    6. 操作标签

    $("<h1>创建一个标签h1</h1>"):创建标签

    append(标签对象):把标签对象插入到 内部最后

    标签对象.appendTo():把标签对象插入到 内部最后

    8.3 事件

    基本事件写法,和js区别:

    事件名称不带on

    事件是方法

    响应行为 是事件方法的实参

    hover

    hover(fn1,fn2):鼠标移入触发fn1,鼠标移出触发fn2

    hover(fn):鼠标移入和移出共同触发fn

    事件绑定与解绑

    绑定事件:事件源.on("事件名称", fn)

    解绑事件:事件源.off("事件名称")

    未来元素事件:

    绑定事件:on函数

    $("ul").on("click","li",function(){     });

    解绑事件:off函数

    $("ul").off("click","li");

    8.4 循环遍历

    js的循环遍历

    for(var i=0;i<10;i++){     alert(i); } for(var item of items){         }

    jQuery的循环遍历

    $.each(被循环遍历对象, function(index, element){     index:索引     element:当前元素,可以使用this代替 }); jQuery对象.each(function(index,element){//循环jQuery对象自己     index:索引     element:当前元素,可以使用this代替 });

    对JQuery的循环遍历

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="jquery-3.3.1.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ var $lis = $("#city li"); $lis.each(function(index,element){ alert(index+"--"+$(element).html()); }); }); </script> </head> <body> <ul id="city"> <li>北京</li> <li>上海</li> <li>天津</li> <li>重庆</li> </ul> </body> </html>

    8.5 表单校验插件

    使用步骤

    导入js文件:jQuery,插件的js文件

    基本语法:

    表单jQuery对象.validate({     submitHandler:function(form){         //表单校验通过之后,执行的函数。form:校验的那个表单     },     rules:{         表单项name:{             规则:参数值,             ...,             规则:参数值         }     },     messages:{         表单项name:{             规则:提示信息,             ...,             规则:提示信息         }     } });

    表单校验的规则

    自定义错误信息的位置

    <label class="error" for="表单项的name"></label>

    自定义校验规则

    $.validator.addMethod("规则名称",function(value, element, params){     value:用户输入的值,要校验的值     element:用户输入的那个表单项     params:使用规则时,配置的规则参数         如果校验通过,就返回true;否则返回false },"默认提示信息");

    9. Ajax

    9.1 jQuery的常用的Ajax方法

    $.get(url, params, callback, type)

    $.post(url, params, callback, type)

    参数说明:

    url:请求地址,必须

    params:提交的表单参数

    callback:响应完成之后的回调函数function(result){}

    type:服务端响应的数据类型text/json

    9.2 jQuery的备用Ajax方法

    $.ajax({key:value,key:value,...})

    配置项:

    url:请求地址,必须

    data:提交的表单参数

    type:请求方式。get/post

    dataType:服务端响应的数据类型text/json

    success:响应成功之后的回调函数

    async:是否异步

    代码块演示:

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax请求方式代码</title> <script src="js/jquery-3.3.1.js" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript"> function sendRequest() { $.ajax({ url:"demo03", async:true, data:"name=luliang&age=18", type:"GET", dataType:"text", success:function (data) { alert(data); }, error:function () { alert("数据没有成功返回") } }); } </script> </head> <body> <input type="button" value="ajax的异步访问服务器" onclick="sendRequest()"> </body> </html>

    解析:

    10. json

    关于json的固定的异常处理的Servlet的写法:

    public void search(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     ResultInfo info = null;     try {         //1.接收参数         String cid = request.getParameter("cid");         String rname = request.getParameter("rname");         int pageNumber = 1;         int pageSize = 8;         String pageNumberStr = request.getParameter("pageNumber");         if (pageNumberStr != null && !"".equals(pageNumberStr)) {             pageNumber = Integer.parseInt(pageNumberStr);         }

            //2.封装实体:略         //3.完成功能         PageBean<Route> pageBean = routeService.search(cid,rname, pageNumber,pageSize);

            //4.处理结果         info = new ResultInfo(true, pageBean);     } catch (Exception e) {         e.printStackTrace();         info = new ResultInfo(false, "系统忙,请稍候");     }

        ObjectMapper mapper = new ObjectMapper();     String json = mapper.writeValueAsString(info);     response.getWriter().print(json); }

    10.1 json的定义和解析(基本语法)

    定义json:

    解析json:

    数组[索引]

    对象.key

    10.2 json转换工具

    jackson把Java对象转换成json格式的字符串

    使用步骤:

    导入jar包

    编写代码:

    ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(Java对象);

    11. 使用Ajax开发的模式

     

    12. redis

    12.1 字符串的操作命令

    设置:set key value

    获取:get key

    删除:del key

    12.2 Jedis的基本操作

    导入jar包

    编写代码:

    Jedis jedis = new Jedis("ip", 端口); jedis操作数据库,方法名和命令名一样 jedis.close()

    12.3 Jedis的连接池使用

    导入jar包

    编写代码:

    JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(50); config.setMaxIdle(5); ​ JedisPool pool= new JedisPool(config, "ip", 端口); Jedis jedis = pool.getResource(); 使用jedis操作数据库 jedis.close()

    12.4 web项目里使用Redis的方式

    项目中图片项目讲解

     

     

    pageBean的分页工具

    在开发中有时需要将数据库中的数据显示到页面中,数据中的数据又比较多,使用一页是显示不了的。此时需要在数据库中分页查询,然后分页显示在页面中。如果使用一个通用的分页工具类,会比较方便。只需在创建该类时传入每页显示的行数,总行数(数据库中的数据总行数),以及当前页码。就可以求出总页数,并且对传入的页码数进行判断。

    PageBean代码

    package com.book.Until; import java.util.List; /** * 分页工具类 泛型类 * @param <T> */ public class PageBean<T> { private List<T> lists;// 存放 需要显示的 实体类数据 private Integer pageNo = 1;// 当前页码数(默认给1) private Integer pageSize; // 每页显示的行数 private Integer totalPage;// 总页数 private Integer rows;// 总行数 //对私有属性的封装 // 不需要对外提供totalPage总页数的set方法 因为totalPage是根据 总行数 和 每页显示的行数求出来的 public List<T> getLists() { return lists; } public void setLists(List<T> lists) { this.lists = lists; } public Integer getPageNo() { return pageNo; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalPage() { return totalPage; } public Integer getRows() { return rows; } //设置有行数据 并求出页数 public void setRows(Integer rows) { this.rows = rows; //页数 根据传入的 总行数 以及 每页显示的行数 求出总页数 this.totalPage=rows % pageSize==0 ? rows/pageSize : (rows/pageSize+1); } //设置页码 public void setPageNo(Integer pageNo) { //如果传入的页码为空 或者小于0 就默认给 1 if (null == pageNo || pageNo < 0) this.pageNo = 1; //如果当前页码数>总页码数 就让 当前页码数 等于 最大页码数 else if (pageNo > this.totalPage && this.totalpage> 0) this.pageNo = this.totalPage; //都符合条件 就让 当前页码数 等于 传入的页码数 else this.pageNo = pageNo; } }

    Page工具的使用

    在上图只需要关注步骤和其中一些方法的作用即可。至于方法以及参数,不需要太过深究。结果都是通过用户层传过来的数据,调用dao层的方法来实现数据访的,最后将数据返还给用户。根据自己的需求而定。

    最新回复(0)