本文主要是介绍java 2106 第七周总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本周总结
一、数据库
1、约束之外键约束
foreign key
设置方式:
1)创建表的时候直接添加外键
CREATE TABLE emp( id INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号NAME VARCHAR(20), -- 员工姓名gender VARCHAR(10), -- 性别dept_id INT, -- 部门编号 CONSTRAINT fk_demp_emp -- 声明 外键名称FOREIGN KEY (dept_id) -- 作用在指定从表的指定字段REFERENCES -- 关联dept(id) -- 部门表的主键id
2)通过alter table 表名 add … 方式添加
-- 通过修改表添加外键
ALTER TABLE empADD
CONSTRAINT -- 声明fk_demp_emp -- 外键名称
FOREIGN KEY (dept_id) -- 作用在指定从表的指定字段
REFERENCES -- 关联
dept(id) ; -- 部门表的主键id
删除外键约束:
ALTER TABLE emp DROP FOREIGN KEY 外键名称
有了外键有关联关系,所以不直接操作主表,需要先修改从表,或者删除外键约束
级联操作 :CASCADE
级联修改:ON UPDATE CASCADE
当前修改主表的数据,那么从表和主表相关联的数据一定会被随着改变
级联删除: ON DELETE CASCADE
当删除主表的数据时,从表和主表相关联的数据也会被删除
2、数据库的备份和还原
1)图形界面化:简单直观
选择数据库—右键----备份---->选择导出的路径(结构以及数据都保存)
之前存在库,然后选择 执行指定sql脚本----> 选择指定的sql脚本—进行执行即可!
2)命令行方式
备份:mysqldump -uroot -p密码 备份数据库名称 > 保存的本地地址
还原:将原来删除,新建库,使用库,source将保存的本地地址
3、 表于表的关系
一对一:是一种特例 (应用场景不多)
举例: 人和身份证
一个人对应一张身份证
一个身份证属于某个人的
一对多的关系 ,多对多的关系
员工表和部门表
一个部门可以有多个员工,一个员工属于某一个部门的(员工表中有一个外键)
4、数据库的三大范式:
1NF :数据库表的每一列都是不可分割的原子数据项
不能出现复合项
2NF :第二范式就是在第一范式的基础上所有列(所有字段)完全依赖于主键列(主键字段)
3NF :在第二范式2NF的基础上,非主键字段不能传递依赖于主键,需要通过外键解决
5、多表查询
1)内连接查询
隐式内连接:通过where语句作为连接条件来查询(按照外键关联关系)
操作步骤:
– 1)查询哪张表
– 2)要查询的是指定表中的哪个字段
– 3)表和表之间的关联关系问题
显示内连接 :
– select <字段列表>
– from 表名1
– (inner) join
– 表名2
– on 关联关系(连接条件);
内连接查询出现的问题:只能查出交集部分的数据
2)外连接查询
左外连接 :
left(outer) join: 通用
将两表中左表的数据全部进行查询并且将交集部分的数据全部查询
右外连接:
right (outer) join
语法格式:
select
字段列表
from
表名1 --左表
left outer join 表名2
on 连接条件 ;
3)子查询
情况1:单行单列的情况:通常使用运算符进行操作
情况2:多行多列的情况:使用关键字in(集合数据)
情况3:使用select语句查询的结果作为一个虚表,使用这个虚表然后与其他表进行查询
-- 入职日期 join_date > '2011-03-14' 将查询作为虚表 和部门表继续进行查询SELECT * FROM emp WHERE join_date > '2011-03-14';
-- 可以使用左外连接
SELECTt2.*, -- 员工的所有信息t1.`name` '部门名称'
FROMdept t1 -- 部门表
LEFT OUTER JOIN (SELECT * FROM emp WHERE join_date > '2011-03-14') t2
ONt1.`id` = t2.`dept_id` ;-- 最基本隐式内连接
SELECTt1.* , -- 员工所有信息t2.`name` -- 部门名称
FROMemp t1 ,dept t2
WHERE t1.`dept_id` = t2.`id` AND
t1.`join_date` > '2011-03-14' ;
6、 事务
事务:在业务操作过程中,一次性可能同时操作多个sql语句,防止 操作多个sql语句时候出现问题,将这整个业务操作看成一个整体,进行处理
– 这些多个sql要么一次性全部执行成功,要么同时失败!
事物的特点 :ACID
1)原子性:就是事物操作业务中的sql ,要么同时执行成功,要么同时失败
2)一致性:操作sql语句的前后,总数量保持不变
3) 隔离性:
将业务使用事务管理,业务与业务之间分离
事物与事物之间不能相互影响
4)持久性:如果一旦事务被提交了,是永久存储的
隔离级别:
read uncommitted :读未提交 安全性最差 不能有效防止脏读
read committed :读已提交 安全性相比上个高,能有效防止脏读,不能够防止可重复读的问题
repeaable read :可重复读 能够有效防止脏读,可重复读
serializable :串行话
查询隔离级别:
select @@tx_isilation; ------------5,1/5,7
select @@ transaction_isolation; -----------8,0
设置隔离级别 set global transaction isolation level 级别字符串;
隔离级别不同,会出现的不同问题:
1)脏读:一个事务读取另一个没有提交的事务
2)不可重复读:一般都是update语句影响,两个事务中,一个事务读取的前后内容不一致
3)幻读:一般insert/delete :影响两个事务中,前后数量不一致
二、JDBC
1、介绍
jdbc的本质就是能够实现sun公司提供的java.sql包下的相关的接口的实现类
使用java连接数据库的过程
1)在java项目添加额外的第三方的jar包
2)注册驱动
3)获取数据库的连接对象
4)准备静态sql语句
5)通过数据库连接对象创建执行对象Statement
6)执行更新操作
7)释放资源
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JdbcDemo {public static void main(String[] args) throws Exception {//1)导包了//2)注册驱动Class.forName("com.mysql.cj.jdbc.Driver") ; //mysql8.0 的驱动实现类:com.mysql.cj.jdbc.Driver//mysql8.0以前的驱动实现类:com.mysql.jdbc.Driver//3)获取数据库的连接对象 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb_01?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true", "root", "123456");//4)准备sql语句String sql = "insert into account(name,balance) values('赵又廷',1000)" ;//5)通过数据库连接对象获取执行对象//public Statement createStatement() ;用于将sql语句发送的数据库的执行器对象Statement stmt = connection.createStatement();//6)执行更新操作//通用方法//int executeUpdate(String sql) throws SQLExceptionint count = stmt.executeUpdate(sql);System.out.println("影响了"+count+"行");//7)释放资源stmt.close() ;connection.close();}
2、ResultSet接口
ResultSet接口 :一般都是select 查询语句查询的数据表的结果集
需求:将ee_2106这个数据库中的student表数据全部查询并遍历出来!
import java.sql.*;
public class JdbcDemo3 {public static void main(String[] args) {Connection conn = null ;Statement stmt = null ;ResultSet rs = null ;//注册驱动try {Class.forName("com.mysql.cj.jdbc.Driver") ;//创建数据库连接对象conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ee_2106?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true","root","123456");//准备sqlString sql = "select * from student" ;//创建执行对象stmt = conn.createStatement() ;//执行sql语句rs = stmt.executeQuery(sql);if(rs.next()) {int id = rs.getInt(1);String name = rs.getString(2) ;String gender = rs.getString(3) ;String email = rs.getString(4) ;System.out.println(id+"\t"+name+"\t"+gender+"\t"+email);}while(rs.next()){int id = rs.getInt("id");String name = rs.getString("name") ;String gender = rs.getString("gender") ;String email = rs.getString("email") ;System.out.println(id+"\t"+name+"\t"+gender+"\t"+email);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}
3、封装工具类
封装jdbc操作的工具类
频繁的去操作数据库:CRUD:增删查改
每一条sql都去创建Connection对象
而且还需不断的去释放资源 Statment对象,Connection,ResultSet集合对象
代码体现
import com.mysql.jdbc.Driver;import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {private static String url = null ;private static String user = null ;private static String password = null ;private static String drivceClass = null ;//构造方法私有化private JdbcUtils(){}//静态代码块//JdbcUtils工具类一加载就执行静态代码块static{try {//创建一个Properties属性列表Properties prop = new Properties() ;//读取src下面的jdbc.properties配置文件//直接获取当前类的字节码文件对象,获取类加载,获取资源文件所在的输入流对象InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");//将流中内容加载到属性列表中prop.load(inputStream);System.out.println(prop);//测试属性列表中的内容//通过key获取valueurl = prop.getProperty("url") ;user = prop.getProperty("user") ;password = prop.getProperty("password") ;drivceClass = prop.getProperty("driverClass") ;//注册驱动Class.forName(drivceClass) ;} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}//提供功能都是static//通用的功能:获取数据库连接对象public static Connection getConnection(){Connection conn = null ;try {//通过驱动类管理类获取conn = DriverManager.getConnection(url,user,password) ;return conn ;} catch (SQLException e) {e.printStackTrace();}return null ;}//关闭资源://DDL语句或者DML语句----->Statement对象和Connectionpublic static void close(Statement stmt,Connection conn){close(null,stmt,conn);}//关闭资源//DQL语句---->ResultSet对象,Statement对象和Connectionpublic static void close(ResultSet rs,Statement stmt,Connection conn){if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt !=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}public static void main(String[] args) {Connection connection = JdbcUtils.getConnection();System.out.println(connection);}
}
4、预编译对象
预编译对象PreparedStatement 继承自Statment对象
操作步骤
1)注册驱动
2)获取数据库连接对象
3)准备参数化的sql,(sql语句非静态)
4)通过连接创建预编译对象并将参数化的sql语句保存在PreparedStatement对象中
5)给参数化的sql的数据进行赋值
6)执行更新/查询
7)释放资源
import com.qf.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class PerparedStatementDemo {public static void main(String[] args) {Connection conn = null ;PreparedStatement stmt = null ;ResultSet rs = null ;try {//获取数据库的连接对象conn = JdbcUtils.getConnection();//准备sql语句:参数化的sql//占位符号:?(英文符号)// String sql = "insert into student(name,gender,email) values(?,?,?)" ;String sql = "select * from student" ;//通过连接对象获取预编译对象并将参数化的sql保存到该对象中//PreparedStatement prepareStatement(String sql)stmt = conn.prepareStatement(sql); //预编译的过程:对sql语句中占位符号进行描述//参数赋值//void setXXX(int parameterIndex,XXX num)//举例:setString(第几个占位符号(占位符号的索引值:1开始),当前占位符的实际参数"hello" )/* stmt.setString(1,"王桑") ;stmt.setString(2,"男") ;stmt.setString(3,"wangsang@163.com") ;*///执行//ResultSet executeQuery() :执行查询操作:DQL语句//int executeUpdate() 执行通用的更新操作:DDL/DML语句(insert into /update/delete)// int count = stmt.executeUpdate();// System.out.println("影响了"+count+"行");//查询rs = stmt.executeQuery();while(rs.next()){int id = rs.getInt("id");String name = rs.getString("name");String gender = rs.getString("gender");String email = rs.getString("email");System.out.println(id+"\t"+name+"\t"+gender+"\t"+email);}} catch (SQLException e) {e.printStackTrace();}finally {//释放资源JdbcUtils.close(stmt,conn);}}
}
5、连接池
1)什么是连接池
是一种容器(集合),存储数据库连接对象;防止用户操作数据库的时候频繁,创建连接对象,而且当
数据库连接Connection使用完毕,就释放close()---->消耗内存空间!
提供固定的可重用的连接对象的容器
2)本质
连接池的本质就是实现sun公司提供的DataSource实现类(物理数据源代替DriverManager)
import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDataSourceDemo {public static void main(String[] args) throws Exception {Properties prop = new Properties() ;InputStream inputStream = DruidDataSourceDemo.class.getClassLoader().getResourceAsStream("druid.properties");prop.load(inputStream);DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);for(int x = 1; x <= 11 ; x ++){Connection connection = dataSource.getConnection();if(x == 5){connection.close(); /}System.out.println(connection) ; }}
}
连接池工具类
import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class DruidJdbcUtils {//成员变量位置private static DataSource ds ;//为了保证线程安全:每一线程使用自己的Connection (张三/李四)private static ThreadLocal<Connection> t1 = new ThreadLocal<>() ; //提供线程的局部变量保存连接对象//构造方法私有化private DruidJdbcUtils(){}//静态代码块static{try {//读取数据库连接池的配置文件----->通过DruidDataSourceFactory工厂类创建DataSource//创建一个属性集合列表Properties prop = new Properties() ;//读取druid.propertiesInputStream inputStream = DruidJdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties");//将资源文件所在的输入流加载列表中prop.load(inputStream);ds = DruidDataSourceFactory.createDataSource(prop); //底层子实现类:DruidDataSource//System.out.println("数据源获取成功");} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}//提供静态方法:单独获取数据源public static DataSource getDataSource(){return ds ;}//获取连接对象Connection静态功能public static Connection getConnection(){//从ThreadLocal中获取局部变量的副本:Connection/*** public T get() :从线程中获取局部变量的副本!*/Connection conn = null ;try {conn = t1.get();if(conn==null){//如果空,需要从数据库的连接池中获取连接对象conn = ds.getConnection();//获取到之后,每一线程执行自己的Connection//将获取到的连接对象 绑定到当前线程中t1.set(conn);}//如果不为空,说明ThreadLocal线程中已经存在Connectionreturn conn ; //} catch (SQLException e) {e.printStackTrace();}return null ;}//关闭(释放资源)资源public static void close(ResultSet rs, Statement stmt,Connection conn) {if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();//关闭之后,归还到连接池中,需要从当前线程中解绑t1.remove();} catch (SQLException e) {e.printStackTrace();}}}public static void close( Statement stmt,Connection conn) {close(null,stmt,conn);}//事务管理代码 --- 加入public static void main(String[] args) {// DataSource ds = DruidJdbcUtils.getDataSource();//System.out.println(ds);Connection connection = DruidJdbcUtils.getConnection();System.out.println(connection);}
}
单元测试:
提供junit的内置注解@Test
@Before标记的方法:在执行@Test单元测试方法之前先执行 (初始化的操作)
@After标记的方法:在执行@Test单元测试方法之后执行(一般:资源的关闭)
三、注解
1、本质
注解的本质是一个接口
2、普通注解
@Override:一般方法中使用,标记这个方法是否是重写方法
@SupressWarning:压制警告 (项目部署上线的时候,项目中不能出现黄色警告线)
@Deprecated:标记方法已经过时
@FunctionalInterface:标记某个接口是否为函数式接口(接口中有且仅有一个抽象方法)
3、元注解
@Target:当前这个注解能够使用的范围
ElementType[] value(); value属性(“抽象方法名”) 返回值枚举数组类型
ElementType 枚举中的都是常量字段 (等价于 public static final …)
TYPE,能够使用在类上或者接口上
FIELD:能够使用在成员变量上
METHOD:能够使用在成员方法上
@Retention:标记当前这个某个注解保留的阶段
RetentionPolicy value(); value属性 它的返回值枚举类
4、 注解(本质接口)中的方法名----- 称为"属性"
属性中可以什么类型的数据类型?
可以是基本数据类型,String类型,枚举类型,注解类型,以上类型的数组格式
如果某个注解中有且只有一个属性,value
public @interface XXX{
String value() ;
}
在别的一些类上使用这个注解的时候,那么赋值value属性可以不写
@XXX(value=(“hello”))
class Demo{}
5、自定义注解
1)自定义一个注解 @Annotation
2)在加上一些元注解,标记当前你自己的定义这个的@Target:作用的位置
@Retention:保留的阶段(Runtime,source,class)
如何解析自定义注解
反射的方式
public < A extends Annotation> A getAnnotation(Class annotationClass)
参数:表示当前注解类型的Class
public @interface MyAnno {//字符串类型String name() ; //name属性//基本数据类型int age() ; // age属性//枚举类型MyEnum direction() ;//direction//注解类型MyAnno2 value() ;//value属性//以上类型的数组格式String[] strs() ;//strs属性
}
四、jdbc操作管理事务
1、事务:
一种机制,某个业务中多次调用dao完成多个sql同时执行,要么同时执行成功/要么同时执行失败 否则,就出现数据紊乱! 使用事务管理(JDBC方式操作)
用户发送请求,通过连接池获取Connection对象
Connection:管理事务的功能
void setAutoCommit(boolean autoCommit) throws SQLException
默认情况下,新创建的连接对象处于自动提交模式 参数为true,声明为false,禁用自动提交,需要收到提交sql
void rollback() throws SQLException:当前执行提交之前,如果sql发生异常,将撤销之前的所有操作
void commit() SQLException:如果执行过程中没有问题或者回滚了,都提交事务,将之前的所有操作永久保存!
需求 :张三账户向李四账户转账500
import com.qf.utils.DruidJdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JdbcTransactionDemo {public static void main(String[] args) {Connection connection = null;PreparedStatement stmt1 = null;PreparedStatement stmt2 = null;try {//通过DruidJdbcUtils获取连接对象connection = DruidJdbcUtils.getConnection();//开启事务---将自动提交禁用调用,参数为false,手动提交connection.setAutoCommit(false);//准备sql语句String sql1 = "update account set balance = balance - ? where id = ?" ;//创建预编译对象对sql1进行预编译stmt1 = connection.prepareStatement(sql1);//参数赋值stmt1.setInt(1,500);stmt1.setInt(2,1);//执行更新stmt1.executeUpdate() ;//程序出问题了
// int i = 10 /0 ;String sql2 = "update account set balance = balance + ? where id = ? " ;//创建预编译对象对sql2进行预编译stmt2 = connection.prepareStatement(sql2);//参数赋值stmt2.setInt(1,500);stmt2.setInt(2,2);//执行更新stmt2.executeUpdate() ;//如果没有问题,正常提交connection.commit();System.out.println("转账成功...");} catch (SQLException e) {//处理异常: 直接事务回滚//有异常,执行catch语句,就回滚try {System.out.println("程序出问题了...");connection.rollback();} catch (SQLException ex) {ex.printStackTrace();}//e.printStackTrace();}//释放资源DruidJdbcUtils.close(stmt1,connection);DruidJdbcUtils.close(stmt2,connection);}
}
五、 前端
前端三剑客: html,css,js(javascript)
html: Hyper Text Markup Language:超文本标记语言
html页面----- 通过js完成和后台通信(Jquery框架: 封装js库)
1、文本标签
1)标题标签
标题标签 h1~h6:从小到大 闭合标签,有开始有结束
<h1>JavaEE</h1> <h2>JavaEE</h2><h3>JavaEE</h3><h4>JavaEE</h4><h5>JavaEE</h5> <h6>JavaEE</h6>
2)滚动标签
滚动标签:marquee:不指定滚动方向,默认从右到左滚动
属性:
behavior:滚动方式: slide:滚到一边停止:alternate:来回滚动; scroll:交替滚动,碰到边框不会停止
direction:滚动的方向 :默认值left(右到左)
scrollamount:滚动速度 :正整数值越大,速度越快
bgcolor :背景色
<marquee behavior="scroll"direction
="right" scrollamount
="22" bgcolor="pink">hello,html</marquee>
3) 段落标签
段落标签p:闭合标签
<p> 文字说明。。</p>
<p> 文字说明。。</p>
4)换行标签
换行标签 br 非闭合标签
我爱你,中国!<br />
hello,world!<br />
5)水平标签
水平标签 hr 非闭合标签
<hr/>
6)上下标标签
上下标标签sup和sub 应用场景:在门户系统最后一行 注册商品以及版权所有
数学公式:x^2 <br />
x<sup>2</sup> <br />
化学公式: H<sub>2</sub>O<br/>
7)转义字符
转义字符
版权所有: ©; 代表 © 版权所有
注册商品: ®; 代表 ®
空格:  ; 一个 ;代表一个空格
&ensp; 一个转义字符代表两个空格
xxx公司版权所有2021-2022<sup>©</sup> <br/>xx公司注册商品<sup>®</sup><br/>中  国<br />
8)加粗标签
加粗标签 strong /b
语义强调的加粗使用b标签,一般用strong
<strong>阿富汗</strong>
<b>奥拉夫</b><br />
9) 倾斜标签
倾斜标签 em /i
语义强调使用i标签 ,一般用em
<em>毛泽东</em>
<i>毛泽东</i>
10)居中标签
居中标签 center :将文本内容进行居中
<center>文本内容</center>
11) 原样输出标签
原样输出标签 pre
<pre>
昨天
jave{}}}}alert("hello") ;
}
</pre>
2、列表标签
1)无序列表
无序列表 ul li (列表项)
以下的明星喜欢谁?<ul type="square"><li>高圆圆</li><li>姆巴佩</li><li>赵又廷</li></ul>
2)有序列表
有序列表 ol li
以下的明星喜欢谁?<ol type="1"><li>高圆圆</li><li>姆巴佩</li><li>赵又廷</li></ol>
3、超连接标签
超连接 a标签来表示
属性
href :后面跟统一资源定位符 url 本地地址或者服务器地址
需要加上协议http:// www.baidu.comhttp协议请求规则C:\Windows\System32\drivers\etchosts文件记录ip地址 域名 127.0.0.1(本地回环地址) localhost如果在hosts文件本地找不到www.baidu.com对应的ip地址那么就会调用网卡联网操作DNS服务器(网络运营商)ip地址1 www.baidu.comip地址2 www.sina.com.cn....回显百度首页给用户指定服务器地址http://locahost:8080/后台地址url地址:统一资源定位符http:// 域名:端口号/端口号:80端口可以省略不写协议:ftphttp协议thunder://
超链接的用法
1)作为资源跳转进行使用‘
2)作为锚连接来使用
同一个页面(使用居多)
a)打锚点(创建一个跳转标记)
< a name=“锚点名称”>
b)创建跳转链接
< a href="#锚点名称 ">跳转
不同页面跳转
a)打锚点(创建一个跳转标记) :在另一个页面的某个位置
< a name=“锚点名称”>
b)在当前的某个位置创建跳转链接
< a href=“链接到指定的页面上+#锚点名称”>跳转
<!-- 跳转到另一个页面链接 --><a href="00_html文本标签.html#ul" target="_self">跳转到指定页面的某个位置</a><br/><!-- 跳转标记 --><a name="top"></a><a href="#foot">[跳转底部]</a><br/> <a href="http://www.baidu.com:80">链接到百度</a><br/><a href="http://14.215.177.39:80">链接到百度</a><br/><!-- 创建一个锚点:跳转标记 --><a name="foot"></a><!-- 跳转链接 --><a href="#top">[跳转顶部]</a>
4、图像标签
< img src=“图片资源地址” />
src :加载的图片资源地址,使用的是相对路径
width和heigth :宽度和高度属性指定像素,或者指定占当前整个宽高分辨率的百分比
alt :替代文本,当图片失效时起作用,描述这个图片
title :给图片设置标题内容,当鼠标悬浮在图片上,提示文字
超链接的href属性以及img的src属性:都会加载资源(就会给服务器发送请求)
<img src="../img/1.jpg" width="200px" height="300px" alt="手机图片" /><br />
<img src="../img/mm.jpg" width="200px" height="300px" title="高圆圆" />
5、表格标签
table表格标签
属性:显示表格样式 必须指定border 边框
algin:对齐方式
width/height:宽度和高度(px/百分比(占当前系统分辨率权重百分比))
bgColor:背景色
cellspacing:设置边框线和单元格的距离
子标签capation:表格表格标签tr:行标签td:单元格标签th:表格的表头标签:特殊的单元(自动居中,加粗)单元格合并:td的属性合并行: rowspan属性占用的单元格数量合并列:colspan属性占用单元格数量
<!-- 写一个三行四列的表格 --><table border="1px" width="100%" height="300px" cellspacing="0" bgcolor="greenyellow"><!-- 标题 --><caption>xxx学校成绩表</caption><tr><th>编号</th><th>姓名</th><th>班级</th><th>成绩</th></tr><tr align="center"><td>1</td><td>高圆圆</td><td>Java基础班</td><td>98</td></tr><tr align="center"><td>2</td><td>赵又廷</td><td>Java基础班</td><td rowspan="2">89</td></tr><tr align="center"><td>3</td><td>张三丰</td><td>计算机1班</td><!-- <td>76</td> --></tr><!-- 平均分 --><tr align="center"><!-- 合并列coslpan --><td colspan="3">平均分</td><!-- <td></td><td></td> --><td>80</td></tr></table>
6、表单标签
表单标签 form
1、属性:
method :提交方式 默认get请求(用户直接在浏览器访问)
action :url 本地提交或者提交后台服务器地址
http://localhost:8080/xxx
2、应用场景:
登录、注册页面
注册: (同步)需要输入用户相关的信息 点击----"注册"------用户的数据提交后台服务器---查询用户名是否存在,如果存在,不能进行注册了,"请更换用户名""登录(同步)输入用户名和密码---- 点击登录----服务器里面先通过查询用户名是否存在,如果存在,就在通过获取到的用户对应的密码和前台提交的密码如果匹配,登录成功,否则登录失败!
3、get方式和post方式的区别 :
1、 get方式
1)将用户提交的数据提交到后台地址上
url?key1=value1&key2=value2…
2)因为提交到地址栏上,提交的数据的大小是有限制的
3)不适合提交私密数据,相对post不安全
2、post方式
1)不会将用户的数据提交到地址上
2)提交大小没有限制
2)相对于get方式,更安全
<title>登录页面</title>
<form action="server.html" method="post">
<!-- 表单项 中必填name属性:需要给后台提交,后台需要知道书写的参数名称 -->
<!-- 文本输入框 placeholder:H5的属性 提示输入的内容,当鼠标光标获取焦点并输入内容,自动清空-->用户名:<input type="text" name="username" placeholder="请输入用户名" /><br/><!-- input type="password"密码输入框 非明文-->密  码:<input type="password" name="password" placeholder="请输入密码" /><br/><!-- 提交按钮 --><input type="submit" value="登录" /></form>
4、常用表单项
表单项 必须要指定name属性输入型 文本输入框,密码输入框,日期组件,邮箱.....inputtype="text" 文本输入框type="password" 密码输入框type="radio"单选按钮type="checkbox"复选框type="date"日期格式type="eamil" 必须符合邮箱格式@字符type="hidden":隐藏域(没有效果,可以携带数据)下拉菜单select标签:普通下拉菜单 选择一个option:下列选项文本域 textarea属性:rows:文本域中指定多少行内容cols:一行里面指定多少个字符按钮相关的特殊按钮:提交按钮 input type="submit"提交按钮(将表单中的所有表单项中的内容全部提交后台)跟 input type="submit"等价的一个标签 button <button>提交<button>type="reset" 重置按钮普通按钮type="button" value="点击...."
7、框架标签
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>框架标签</title></head><!-- frameset框架:当前这个整个结构4个页面组成 --><frameset rows="10%,*,10%"><!-- 三个部分:分别是frame --><frame src="header.html"/><!-- 头部页面 --><!-- 从左--到右 --><frameset cols="15%,*"><!-- 两个部分页面通过frame导入 --><frame src="menu.html" /><!-- 给当前中间页面表示的frame给定name --><frame src="main.html" name="main" /></frameset><frame src="footer.html" /><!-- 底部页面 --></frameset><!-- <body></body> -->
</html>
这篇关于java 2106 第七周总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!