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

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连接池的使用

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

  2. 提供配置文件:

    • 文件名称:c3p0-config.xml

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

  3. 编写代码,使用连接池

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

4.2 druid连接池的使用

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

  2. 提供配置文件

    • 文件名称:xxx.properties

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

  3. 编写代码使用连接池

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

5. JdbcTemplate

5.1 使用步骤

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

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

  3. 编写代码,使用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技术的使用

  1. 创建一个Cookie对象

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

  2. 设置Cookie的有效期

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

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

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

  3. 设置Cookie的有效范围

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

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

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

  4. 把Cookie传递给客户端

    • response.addCookie(cookie)

  5. 接收客户端携带的Cookie数据

    • Cookie[] cookies = request.getCookies()

4.3 session技术的使用

  1. 得到一个session对象

    • HttpSession session = request.getSession()

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

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

  2. 向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层的方法来实现数据访的,最后将数据返还给用户。根据自己的需求而定。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值