前端...

JDBC

jdbc 专门用来 通过java程序 连接 数据库。是一套标准,本质上就是用jar包里的各种工具类。                                                

导入jar包(丰富的工具类)
获取和数据库的连接(用户名、密码)
通过程序执行SQL
通过程序处理结果     

package cn.tedu.jdbc;

import java.sql.*;

//测试 jdbc
//需求:查询cgb2104库里的students表里的所有数据
public class Test1 {
    public static void main(String[] args) throws Exception {
        //1,注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2,获取和数据库的连接
//String url= "jdbc:mysql://localhost:3306/cgb2104?characterEncoding=utf8";//指定要连接哪个数据库
String url= "jdbc:mysql:///cgb2104?characterEncoding=utf8";//指定要连接哪个数据库
        String user= "root" ; //使用的用户名
        String pwd= "root" ; //使用的密码
        Connection conn = DriverManager.getConnection(url, user, pwd);
        //3,获取传输器,执行SQL
        Statement st = conn.createStatement();
        //4,执行SQL
        ResultSet rs = st.executeQuery("select * from students");
        //5,解析结果集
        while( rs.next() ){//next()判断结果集中是否有数据
            for (int i = 1; i <= 5 ; i++) {
                //获取每列的值并打印
                System.out.println( rs.getString(i) );
            }
        }
        //6,释放资源
        rs.close(); //关闭结果集
        st.close();//关闭传输器
        conn.close();//关闭连接
    }
}

 SQL注入

/*自己准备user2表(id/name/password),准备数据
    CREATE TABLE `user2` (
          `id` int(11)  PRIMARY KEY  auto_increment,
          `name` varchar(10) default NULL,
          `password` varchar(10) default NULL
    ) ;
 */
//需求:利用jdbc,根据用户名和密码查询cgb2104库里的user表
//SQL注入攻击问题
private static void login() {
    try{
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql:///cgb2104?characterEncoding=utf8";
        Connection conn = DriverManager.getConnection(url, "root", "root");
        Statement st = conn.createStatement();
// String sql ="select * from user2 where name='jack' and password='123456'";//写死了

        String user = new Scanner(System.in).nextLine();//用户输入jack'#
        String pwd = new Scanner(System.in).nextLine();
        //SQL注入攻击问题:本质上是因为SQL语句中出现了特殊符号#,改变了SQL语义
String sql ="select * from user2 where name='"+user+"' and password='"+pwd+"'";
        ResultSet rs = st.executeQuery(sql);//执行查询的SQL,返回结果集
        if(rs.next()){
            System.out.println("登录成功~");
        }else{
            System.out.println("登录失败~");
        }
        st.close();
        conn.close();
    }catch(Exception e){
        e.printStackTrace();//有异常,直接打印异常信息
        //System.out.println("执行失败。。。");//上线
    }

}

解决方案

//解决SQL注入攻击的方案
private static void login2() {
    try{
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql:///cgb2104?characterEncoding=utf8";
        Connection conn = DriverManager.getConnection(url, "root", "root");
//            Statement st = conn.createStatement();不行,不安全,会被SQL攻击

        String user = new Scanner(System.in).nextLine();//用户输入jack'#
        String pwd = new Scanner(System.in).nextLine();
        //?叫占位符 ,SQL的骨架
String sql ="select * from user2 where name=? and password=?";
        //先把SQL骨架发给数据库执行
        PreparedStatement ps = conn.prepareStatement(sql);
        //给SQL里的? 设置参数
        ps.setString(1,user);//给第一个?设置值是user
        ps.setString(2,pwd);//给第二个?设置值是pwd
        
        ResultSet rs = ps.executeQuery();//执行拼接好的SQL,返回结果集

        if(rs.next()){
            System.out.println("登录成功~");
        }else{
            System.out.println("登录失败~");
        }
        ps.close();
        conn.close();
    }catch(Exception e){
        e.printStackTrace();//有异常,直接打印异常信息
        //System.out.println("执行失败。。。");//上线
    }
}

HTML

静态页面 超文本标记语言,是指可以在网页中加入比文本更丰富的内容
标记有很多,要写开始标记和结果标记 <html></html>

CSS

美化静态页面 用来修饰网页的,变得好看。层叠样式表stylesheet

js

让网页动起来

Jquery

用来简化JS的写法,综合使用了HTML css js。语法: $(选择器).事件 

json

是一种轻量级的数据交换格式。指定了 浏览器 和 服务器 之间数据传输的格式。
格式: {“name”:“jack”,“age”:“18”}字符串

ajax

是异步的技术(js and xml),用来局部刷新网页。
在不刷新整个网页的前提下,局部更新数据     
 是一种用于创建快速动态网页的技术
JS提供的 运用到Dom的技术 原生的 兼容性很差
jQuery
$.ajax({
    type:  //要使用的请求方式
    url:  //要使用的请求路径 
    contentType: //要传递的数据类型
    data:  //要拼接的数据
    dataType:  //数据类型
    success: function(data){ //成功时的方案 
        
    },
    error: function(data){ //失败时的方案
        
    }
})
Vue 需要导入文件 vue.js和axios.js
语法:axios.get(url).then( a=>( a表示服务器返回的结果 ) ) 
需要放行js请求 要不前端报错 访问不到
在Controller层加上@CrossOrigin                                                                                                      
访问网页 网页会直接发起ajax请求 请求服务器的数据 服务器把数据返回交给ajax
继续解析 最终实现局部刷新网页

 <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>测试 vue提供的ajax技术</title>
        <!-- 1. 导入vue.js和axios.js -->
            <script src="vue.js"></script>
            <script src="axios.min.js"></script> 
            <!-- 发起ajax请求,异步访问,局部刷新-->
    </head>
    <body>
        <!--  2. 准备数据渲染区,利用插值表达式获取值 -->
            <div id="app">
                123{{info}}
            </div>
        <!-- 3. 创建Vue对象 -->
            <script>
                new Vue({
                    el : "#app", // 挂载点
                    data : { //数据区
                        info : ' '
                    },
                    mounted : function(){//发起ajax请求
                        //ajax 访问 服务器的数据
                        axios.get('http://localhost:8080/car/get').then(
                            //箭头语法,其中a表示服务器返回的数据
                            a => (
                                //修改info的值,a.data是固定写法用来获取a的值
                                this.info = a.data
                            )
                        )
                    }
                })
            </script>
        
    </body>
</html>

dom

本质就是把网页文件看做一个Document文档对象. 提供了一套API, 可以操作网页中的所有元素

获取对象: window.document
常用的方法:
按照id的值获取元素: getElementById(id属性的值)–只会获取到一个元素
按照name的值获取元素: getElementsByName(name属性的值)–获取到多个元素 , 存入数组
按照class的值获取元素: getElementsByClassName(class属性的值)–获取到多个元素 , 存入数组
按照标签名的值获取元素: getElementsByTagName(标签的名字)–获取到多个元素 , 存入数组
直接向网页输出: write()
常用的属性:
title–返回网页的标题
id–设置或返回元素的id
innerHTML–设置或返回元素的内容

vue

一个渐进式的前端框架. 渐进式是指按需配置
mvvm框架  m model 数据模型 v view 视图 vm 让model和view产生关系
松耦合 双向绑定 简化dom操作 数据动态更新
核心思想是数据驱动 组件化的前端开发 操作的是数据
https://cn.vuejs.org
导入vue.js 准备数据渲染区 准备数据(js对象) 把数据渲染到挂载点
准备Vue对象
el属性是用来描述元素(挂着点) data属性是具体要展示的数据
显示数据的过程叫渲染
插值表达式 {{ }} vue的固定语法 获得变量的值
data 三种形式                                                                                                                                    
第一种形式
 data : {
msg : "hello vueeee~~~"
}第二种形式:定义函数,返回对象
data:function(){
return {
msg:"hi~vue"
}
},
第三种形式:定义函数,es6的简写法
data(){
return {msg:"vue hi~"
}
}
高级用法 v-命令
指令是带有 v- 前缀的特殊属性,以表示它们是 Vue 提供的特殊特性。                                            
 指令用于在表达式的值改变时,将某些行为应用到 DOM 上。
常见的Vue指令:v-if v-for v-on v-bind v-model v-cloak等
v-model 双向绑定 修改一方同时修改相同的另一方,达到数据同时更新
v-cloak  还没看到效果 先展示插值表达式
在标签中增加指令:v-cloak
增加style标签,[v-cloak]属性选择器,设置先不展示display:none;
实现在页面未渲染完成时先隐藏标签,渲染完成后在展示,这样就解决了闪烁问题
<style>
[v-cloak]{}
</style>
v-if
 用来判断,类似于java的if else if else,判断成立就显示不成立就不显示
v-show和v-if一样也可以判断,只是条件不满足也会在页面加载,隐藏而已
v-for循环 可以通过下标获得 可以循环 一般下标是i 数据是o
<h1 v-for="o in data里数组的名字">{{o}}</h1>
<h1 v-for="o,i in data里数组的名字">{{i}},{{o}}</h1>
v-on 用来绑定事件 点击按钮触发函数
<button v-on:click="show()">v-on:click 点我</button>
@是一种简写形式简化了v-on
<button @click="show()">v-on:click 点我</button>
 v-bind 用来获取变量的值 
<a v-bind:href="url">{{链接}}</a>
<a :href="url">{{链接}}</a>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值