笔记-JavaWeb学习之旅5
CP30的演示
package cn.itcast.datasourcejdbc;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3P0Demo2 {
public static void main(String[] args){
//创建连接池对象,使用多态
//不指定配置文件的名称,会连接默认配置
DataSource ds = new ComboPooledDataSource();
//使用getConnection方法获取连接
try{
//归还连接对象演示
//文件默认配置了10个连接
for(int i = 0 ; i <10 ; i++){
Connection c = ds.getConnection();
//i<5个的话不会报错
//i<11的话会报异常 An attempt by a client to checkout a Connection has timed out.
System.out.println(i+""+c);
//现在归连接
if(i==5){
c.close();
//运行正常,并且控制台打印的对象有两个地址是一样的
}
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
Druid
package cn.itcast.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo1 {
public static void main(String[] args) throws Exception{
//druid包下的类DruidDataSourceFactory有个方法可以获取到连接池对象
// DruidDataSourceFactory需要Properties参数
//创建Properties对象
Properties p = new Properties();
//加载读取文件配置,需要一个参数字节输入流或字符输入流
//获取字节输入流参数,可以先获取字节码文件然后通过方法getClassLoader来获取ClassLoader对象
//通过ClassLoader对象来获取字节输入流
Class aClass=new DruidDemo1().getClass();
ClassLoader aClassClassLoader= aClass.getClassLoader();
InputStream aInputStream = aClassClassLoader.getResourceAsStream("druid.properties");
//有了字节输入流对应的资源,就可以让他加载了
//以上代码都可以通过一行代码来实现
//InputStream aInputStream = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
p.load(aInputStream);
//获得数据库连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(p);
//创建连接
Connection aConnection = ds.getConnection();
System.out.println(aConnection);
}
}
Druid工具类的创建
package cn.itcast.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
//定义成员变量DataSource
private static DataSource ds;
static{
try {
//加载配置文件
Properties pro = new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//获取连接池
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//释放资源方法
public static void close(Statement stmt, Connection conn){
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 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 DataSource getDataSouce(){
return ds;
}
}
package cn.itcast.druid;
import cn.itcast.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DruidDemo2 {
public static void main(String[] args) {
Connection c =null;
PreparedStatement ps =null;
//使用Druid操作数据库
try {
//获取连接
c = JDBCUtils.getConnection();
//要执行sql语句,需要先创建sql语句,sql语句的参数使用?占位符
String sql = "INSERT INTO emp(id,ename,salary)VALUES(?,?,?)";
//要执行sql语句,需要创建prepareStatement对象
//prepareStatement对象可以通过Connection对象的方法来获取
ps = c.prepareStatement(sql);
//调用prepareStatement的方法给占位符赋值
ps.setInt(1,10015);
ps.setString(2,"李白");
ps.setDouble(3,15000.00);
//执行sql语句
int count = ps.executeUpdate();
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(ps,c);
}
}
}
package cn.itcast.jdbcTemplate;
import cn.itcast.utils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;
public class JDBCTemplateDemo {
public static void main(String[] args) {
//创建JDBCTemplate对象
//参数给予数据源,让他连接到数据库
JdbcTemplate jt = new JdbcTemplate(JDBCUtils.getDataSouce());
//定义sql语句
String sql = "UPDATE emp set salary = ? where id = ?";
//调用update方法,参数一个是sql语句,另一个给占位符赋值
//赋值与问好占位符一一对应
int count = jt.update(sql,20000.00,10015);
System.out.println(count);
}
}
Spring JDBC
Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发
步骤:
- 导入jar包
- 创建jdbcTemplate对象。依赖于数据源DataSource
- 调用jdbcTemplate的方法来完成crud的操作
- update():执行DML语句,增删改语句
- queryForMap():查询结果将结果集封装为map集合
- queryForList();查询结果将结果集封装为list集合
- query():查询结果,将结果封装为JavaBeanduixang
- queryForObject:查询结果封装为对象
package cn.itcast.test;
import cn.itcast.utils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class Demo {
private JdbcTemplate jt = new JdbcTemplate(JDBCUtils.getDataSouce());
//单元测试,可以让方法独立执行
@Test
//修改1001号数据salary为15000
public void test1(){
//创建框架对象,参数传递数据源
//创建sql语句
String sql = "Update emp set salary = 15000 where id = ?";
//有了框架,不用创建prepareStatement对象也可以执行sql语句了
int count = jt.update(sql,1001);
System.out.println(count);
}
//添加一条记录
@Test
public void test2(){
String sql = "insert into emp(id,ename,salary) values (?,?,?)";
int count= jt.update(sql,1016,"郭靖",12000);
System.out.println(count);
}
//删除刚刚添加的记录
@Test
public void test(){
String sql = "delete from emp where id = ?";
int count = jt.update(sql,1016);
System.out.println(count);
}
//查询id为1001的记录,将其封装为Map集合
@Test
public void test4(){
String sql = "select * from emp where id = ?";
//查询的结果集长度只能是1,如果要查询两行的数据的话,会报错
Map<String,Object> map = jt.queryForMap(sql,1001);
System.out.println(map);
//{id=1001, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=15000.00, bonus=null, dept_id=20}
}
@Test
//查询所有记录,将其封装为List集合
public void test5(){
String sql = "select * from emp";
//queryForList方法会把每一天记录封装为map集合,然后再将map集合封装为List集合
List<Map<String,Object>> list = jt.queryForList(sql);
for(Map<String,Object> map : list){
System.out.println(map);
}
}
@Test
//查询所有记录,将其封装成Emp对象的list集合
public void test6(){
String sql = "select * from emp";
//query方法有两个参数,一个是sql语句,一个是RowMapper的实现类,一般我们使用它给我们提供的实现类,BeanPropertyRowMapper,这个实现类可以完成数据到JavaBean的自动封装
List<Emp> list = jt.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
for(Emp emp :list){
System.out.println(emp);
}
}
@Test
//查询总记录数
public void test7(){
String sql = "select count(id) from emp";
//第一个参数是sql,第二个参数是class类型,是一个将来要返回的Class类型
//将来要返回Long类型,那么参数就是Long.class
Long l = jt.queryForObject(sql,Long.class);
System.out.println(l);
}
}
Web概念概述
JavaWeb:使用Java语言开发基于互联网的项目
软件架构:
C/S:Client/Server 客户端/服务器端
在用户本地有一个客户端程序,在远程有一个服务器端程序
如QQ,迅雷....
优点:1.用户体验号
缺点:开发,安装,部署,维护麻烦
B/S:Browser/Server 浏览器/服务器端
只需要一个浏览器,用户通过不同的网址(URL),客户访问不同的服务器端程序
优点:1.开发,安装,部署,维护,简单
缺点:如果应用过大,用户体验可能会受影响
对硬件要求过高
B/S架构详解
资源分类:
1.静态资源:使用静态网页开发技术发布的资源,特点:所有用户访问,得到结果是一样的,比如,文本,图片,视频,HTML,CSS,JavaScript。如果用户请求的是静态资源,那么服务器会直接将静态资源放送给浏览器。浏览器中内置了静态资源的解析引擎,可以展示静态资源
2.动态资源:使用动态网页及时发布的资源,特点所有用户访问,得到的结果可能不一样,如:JSP/servlet,php,asp....。如果用户请求的是动态资源,那么服务器就会执行动态资源,转换为静态资源,在发送给浏览器
我们要学习动态资源你,就必须先学习静态资源
静态资源(三剑客):
HTML:用于搭建基础网页,展示网页的内容
CSS:用于美化页面,布局页面
JavaScript:控制页面的元素,让页面有一些动态的效果
HTML快速入门
语法:
- html文档后缀名.html 或者.htm
- 标签分为
- 围堵标签:有开始标签和结束标签如
- 自闭和标签:开始标签和结束标签在一起
- 标签可以嵌套:
- 在开始标签中可以定义属性。属性是由键值对构成,值需要用引号引起来
- html的标签不区分大小写,但是建议小写。
<html>
<head>
<title>title</title>
</head>
<body>
<font color='red'>Hello World</font><br/>
<font color='green'>Hello World</font>
</body>
</html>
3.标签学习
文件标签:构成html最基本的标签
- html:html文档的根标签
- head:头标签。用于指定html文档的一些属性。引入外部资源
- title:标题标签
- body:体标签
- (): html5中定义该文档是html文档
文本标签:和文本有关的标签
注释:
.
to
:标题标签
.
:段落标签
换行标签
展示水平线
;拥有属性可以改变水平线的样式color:颜色,width:宽度,size:高度,align:对齐方式(center:居中对齐,left:左对齐,right:右对齐)字体加粗:
字体斜体
字体标签有颜色(color),大小(size),字体样式的属性(face)
属性定义:
color
- 英文单词:red,green,blue
- rge(值1,值2 ,值3),值得范围0~255,如 rgb(0,0,255),表示红色绿色为0,蓝色为255
width:
- 数值:width='20',数值的单位,默认是px(像素)
- 数值%:占比相对于父元素的比列
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文本标签</title>
</head>
<body>
<!-- 注释 -->
<!-- br 换行-->
<!--h1~h6标题标签-->
云想衣裳花想容<br>
春风扶槛露华浓<br>
若非群玉山头见<br>
会向瑶台月下逢<br>
<!-- 段落标签 p-->
<p>
黄河远上白云间
<p/>
<p>
一片孤城万仞山
<p/>
<p>
羌笛何须怨杨柳
<p/>
<p>
春风不度玉门关
</p>
<!--hr显示一条水平线 是自闭和标签-->
<hr color = 'red'/>
<!--加粗b-->
春风不度玉门关<br>
<b>春风不度玉门关</b>
<!--斜体i-->
<i>羌笛何须怨杨柳</i>
<hr>
<!--字体font-->
<font color="red" size ="5" face="楷体">云想衣裳花想容</font><br>
</body>
</html>
- 图片标签:
- src:指定图片的位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片标签</title>
</head>
<body>
<!--alt 代表找不到图片的话就用指定的文字代替-->
<img src="3.jpg" width="500" align="right" alt="图片挂了">
</body>
</html>
列表标签:
有序列表:ol , li代表每一项
无序列表ul ,li代表每一项
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--有序列表ol-->
早上起床干的事情
<ol>
<li>睁眼</li>
<li>看手机</li>
<li>洗衣服</li>
<li>洗漱</li>
</ol>
<!--有无列表ul-->
<ul>
<li>睁眼</li>
<li>看手机</li>
<li>洗衣服</li>
<li>洗漱</li>
</ul>
</body>
</html>
链接标签:
a:定义以超链接
属性:href:指定访问资源的URL(统一资源定位符)
target :指定打开资源的方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>链接标签</title>
</head>
<body>
<!--超链接a-->
<a href="https://www.cnblogs.com/train99999/">点击在本页面进入我的博客</a><br>
<!--点击在新的页面打开选项卡-->
<a href="https://www.cnblogs.com/train99999/" target="_blank">点击在新的选项卡中打开</a><br>
<!--访问本地的资源-->
<a href="3.jpg">点击加载本地图片</a><br>
<!--打开会打开本地邮箱-->
<a href="mailto:123456@train.com">点击联系我</a>
<!--点击图片加载链接-->
<a href="https://www.cnblogs.com/train99999/"><img src="3.jpg"></a>
</body>
</html>
div和span:
div:每一个div占满一整行,块级标签
span:文本信息在一行展示,行内标签,内联标签
语义化标签:html5中为了提高程序的可读性,提供了一些标签(header,footer)这些标签对页面没有任何的样式。
笔记-JavaWeb学习之旅5的更多相关文章
- 笔记-JavaWeb学习之旅7
JavaScript基础 概念:一门客户端脚本语言,运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎,是一个脚本语言,不需要编译,直接就可以被浏览器解析执行. JavaScript ...
- 笔记-JavaWeb学习之旅19
Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...
- 笔记-JavaWeb学习之旅18
AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...
- 笔记-JavaWeb学习之旅17
1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...
- 笔记-JavaWeb学习之旅16
增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...
- 笔记-JavaWeb学习之旅15
Filter:过滤器 概念:当访问服务器的资源是,过滤器可以将请求拦截下来,完成一些特殊的功能 快速入门: 步骤: 定义一个类,实现接口Filter 复写方法 配置拦截路径 package com.d ...
- 笔记-JavaWeb学习之旅14
JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...
- 笔记-JavaWeb学习之旅10
Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...
- 笔记-JavaWeb学习之旅13
验证码案列 昨天晚上出现的500错误原因在于验证码没有获取到,获取验证码是应该获取的是共享域中的验证码,而我把获取值得键给写成了jsp中的键,而不是内存生成图片中,然后把图片上传到共享域中的键.这两个 ...
随机推荐
- 我的前端之旅-nodejs 安装静态的文件服务器 (1)
一个最简单的 Web Server 之功能包含下列三个步骤:步骤一 : 接收浏览器所传来的网址:步骤二 : 取出相对应的文件:步骤三 : 将文件内容传回给浏览器.然而.在这个接收与传回的过程中,所有的 ...
- 云计算系列——HIVE1.2.1 环境搭建
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...
- TMS320C6478+MCP2515
调一个驱动,将看过的资料记录下来. 这个驱动写得比较直观:http://www.51hei.com/bbs/dpj-114085-1.html
- charles刷分微信跳一跳小程序对https的理解
以前以为只要安装了https 客户端与服务端的数据会被加密就安全了 事实上 只要任意一款抓包工具 并伪造证书 就可以解密这个被所谓https加密的数据 如 可以下载charles的根证书 作为伪 ...
- POJ2406 Power Strings —— KMP or 后缀数组 最小循环节
题目链接:https://vjudge.net/problem/POJ-2406 Power Strings Time Limit: 3000MS Memory Limit: 65536K Tot ...
- 基于BASYS2的VHDL程序——交通灯(状态机版)
请尊重作者版权,转载注明源地址:http://www.cnblogs.com/connorzx/p/3694618.html 使用了状态机,增加了可读性和用户体验. library IEEE; use ...
- w3C盒子模型和IE的盒子模型
W3C 盒子模型的范围包括 margin.border.padding.content,并且 content 部分不包含其他部分IE 盒子模型的范围也包括 margin.border.padding. ...
- 怎样安装CentOS 6.6之三:磁盘分区的划分和修改
安装 CentOS(或Linux)系统,最难的就是磁盘分区.磁盘分区需要根据自己的实际使用需要来规划,以达到最优的效果. 工具/原料 CentOS 6.6 安装包 VMware 虚拟机 一.划分方 ...
- HDU2222(AC自动机入门题)
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- 全民nib
1.为任何组件创建nib文件 那么如何通过XIB来创建自己的个性化的class呢. 1.Add----New Filss---Cocoa Touch Classes---Object-C Class ...