欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

笔记-JavaWeb学习之旅5

程序员文章站 2022-08-10 10:16:19
CP30的演示 Web概念概述 JavaWeb:使用Java语言开发基于互联网的项目 软件架构: 1. C/S:Client/Server 客户端/服务器端 在用户本地有一个客户端程序,在远程有一个服务器端程序 如QQ,迅雷.... 优点:1.用户体验号 缺点:开发,安装,部署,维护麻烦 2. B/ ......

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);
    }
}

笔记-JavaWeb学习之旅5

spring jdbc

spring框架对jdbc的简单封装,提供了一个jdbctemplate对象简化jdbc的开发

步骤:

  1. 导入jar包
  2. 创建jdbctemplate对象。依赖于数据源datasource
  3. 调用jdbctemplate的方法来完成crud的操作
    1. update():执行dml语句,增删改语句
    2. queryformap():查询结果将结果集封装为map集合
    3. queryforlist();查询结果将结果集封装为list集合
    4. query():查询结果,将结果封装为javabeanduixang
    5. 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语言开发基于互联网的项目

软件架构:

  1. c/s:client/server 客户端/服务器端

    在用户本地有一个客户端程序,在远程有一个服务器端程序

    如qq,迅雷....

    优点:1.用户体验号

    缺点:开发,安装,部署,维护麻烦

  2. b/s:browser/server 浏览器/服务器端

    只需要一个浏览器,用户通过不同的网址(url),客户访问不同的服务器端程序

    优点:1.开发,安装,部署,维护,简单

    缺点:如果应用过大,用户体验可能会受影响

    ​ 对硬件要求过高

b/s架构详解
资源分类:

1.静态资源:使用静态网页开发技术发布的资源,特点:所有用户访问,得到结果是一样的,比如,文本,图片,视频,html,css,javascript。如果用户请求的是静态资源,那么服务器会直接将静态资源放送给浏览器。浏览器中内置了静态资源的解析引擎,可以展示静态资源

2.动态资源:使用动态网页及时发布的资源,特点所有用户访问,得到的结果可能不一样,如:jsp/servlet,php,asp....。如果用户请求的是动态资源,那么服务器就会执行动态资源,转换为静态资源,在发送给浏览器

我们要学习动态资源你,就必须先学习静态资源

静态资源(三剑客):

html:用于搭建基础网页,展示网页的内容

css:用于美化页面,布局页面

javascript:控制页面的元素,让页面有一些动态的效果

html快速入门

语法:

  1. html文档后缀名.html 或者.htm
  2. 标签分为
    1. 围堵标签:有开始标签和结束标签如
    2. 自闭和标签:开始标签和结束标签在一起
  3. 标签可以嵌套:
  4. 在开始标签中可以定义属性。属性是由键值对构成,值需要用引号引起来
  5. html的标签不区分大小写,但是建议小写。
<html>
    
    <head>
        <title>title</title>
    </head>
    
    <body>
        <font color='red'>hello world</font><br/>
        
        <font color='green'>hello world</font>
    </body>
    
</html>

3.标签学习

  1. 文件标签:构成html最基本的标签

    1. html:html文档的根标签
    2. head:头标签。用于指定html文档的一些属性。引入外部资源
    3. title:标题标签
    4. body:体标签
    5. (<!doctype html>): html5中定义该文档是html文档
  2. 文本标签:和文本有关的标签

    1. 注释:

    2. .

      to

      :标题标签

    3. .

      :段落标签

    4. 换行标签

    5. 展示水平线


      ;拥有属性可以改变水平线的样式color:颜色,width:宽度,size:高度,align:对齐方式(center:居中对齐,left:左对齐,right:右对齐)
    6. 字体加粗:

    7. 字体斜体

    8. 字体标签有颜色(color),大小(size),字体样式的属性(face)

      属性定义:

      1. color

        1. 英文单词:red,green,blue
        2. rge(值1,值2 ,值3),值得范围0~255,如 rgb(0,0,255),表示红色绿色为0,蓝色为255

        width:

        1. 数值:width='20',数值的单位,默认是px(像素)
        2. 数值%:占比相对于父元素的比列

<!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>
  1. 图片标签:笔记-JavaWeb学习之旅5
    1. 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>
  1. 列表标签:

    ​ 有序列表: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>
  2. 链接标签:

    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>

笔记-JavaWeb学习之旅5

div和span:

div:每一个div占满一整行,块级标签

span:文本信息在一行展示,行内标签,内联标签

语义化标签:html5中为了提高程序的可读性,提供了一些标签(header,footer)这些标签对页面没有任何的样式。