Javaweb备忘录2

day06-SQL

创建数据库:create database day0601;
删除数据库:drop database day0601;    
使用数据库:use day0601;

eg.创建表:
    create table user(
        id int primary key  auto_increment,
        username varchar(20)
    );

修改表:
alter table user rename to user10;
alter table user add password varchar(20);
alter table change password pwd varchar(20);
alter table modify pwd int;
alter table drop pwd;

删除表:drop table user;

插入:
insert into user values(字段值1...);
insert into user(字段,字段2) values(字段值,字段值2);

更新:
update user set 字段名=字段值,字段名1=字段值1 where 条件

删除:
delete from user where 条件

select ... from user where 条件 group by 分组字段 order by 排序字段 asc|desc;

---------------------------------------

多表的创建,关系的创建
常见的关系:
        一对多:
在开发中,在多表的一方添加一个外键,  外键的名称一般为主表的名称_id,
字段类型一般和主表的主键的类型保持一致.为了保证数据的有效性和完整性,
在多表的一方添加外键约束(非必须的,可通过java程序来控制)
        格式:
alter table 多表名 add foreign key(外键名) references 主表名(主键名)

    多对多:
在开发中,一般引入一个中间表,在中间表中存放另外两张表的主键.
这样就可以将多对多的关系拆分两个一对多的关系,
为保数据的有效性,完整性,在中间表上添加两个外键约束(非必须的,可通过java程序来控制)

    外键约束的特点:
        1.主表中不能删除从表中已引用的数据
        2.从表中不能添加主表中不存在的数据

    一对一:了解
        在开发中,例如:person idcard
        思路1:将两个实体合二为一
        思路2:在一个表上将这个表的主键设置成外键且添加外键约束.

多表查询:
    内连接:
        显式的内连接
            select a.* ,b.* from a join b on 连接条件;
        隐式内连接
            select a.*,b.* from a,b where 连接条件;
    外连接
        select a.*,b.* from a left join b on 连接条件.
        展示a表所有数据,根据条件关联查询b表,满足条件展示,不满足以null值展示

    子查询:将一个查询的结果作为一张临时表     
select user.*,tmp.* from user,
(select * from orders where price>300) as tmp 
where user.id=tmp.user_id;
        给表起别名: 
            表 [as] 别名

扩展:
以后开发中很少使用delete,数据无价,删除有物理和逻辑(常用),
逻辑删除一般会在表中添加一个字段(isdel:若值为1,代表删除了;若为0代表没有删除),
此时的删除操作变成了更新操作.

day07-jdbc

jdbc:
    java语言操作数据库
    jdbc是oracle公司指定的一套规范,
    驱动:jdbc的实现类,由数据库厂商提供.
jdbc操作步骤:
    1.导入驱动jar包
    2.注册驱动
    3.获取连接
    4.编写sql
    5.获取语句执行者
        PreparedStatement st=conn.prepareStatement(sql);
    6.设置参数
        st.setXxx(int 第几个问号,Object 实参);
    7.执行sql
        ResultSet rs=st.executeQuery();
        int i=st.executeUpdate();
    8.处理结果
        若是resultset
            while(rs.next()){
                rs.getXxx(int|String)
            }
    9.释放资源
////////////////////////////////////////
获取src目录下的properties格式的配置文件
    ResourceBundle bundle=ResourceBundle.getBundle("不带后缀名的文件名");
    String value = bundle.getString("key"); 
////////////////////////
自定义连接池:
增强方法:
    1.继承
    2.装饰者模式(静态代理)
    3.动态代理
///////////////
装饰者模式(静态代理)
    1.装饰者和被装饰者实现同一个接口或者继承同一个类
    2.在装饰者中要有被装饰者的引用
    3.对需要增强的方法进行加强
    4.对不需要加强的方法调用原来方法
///////////////////
常见连接池:
    dbcp:
    c3p0:★
        配置文件:
            名称:c3p0.properties或者 c3p0-config.xml
            位置:src下
        使用:
            new ComboPooledDataSource()
////////////////
dbutils:
    工具类,封装了jdbc的操作.
    使用步骤:
        1.导入jar包
        2.创建queryrunner类
        3.编写sql
        4.执行sql
queryrunner:操作sql语句
    构造器:
        new queryrunner()
    方法:
        query(..)
        update(..)
ResultSetHandler:封装结果集
    BeanHandler
    BeanListHandler
    MapListHandler
    ScalarHandler

day08-xml&tomcat

xml:
    可扩展的标签语言
    作用:
        配置文件.
约束:
    用来控制xml文档中可以出现那些元素和属性,以及他们出现的顺序
分类:
    DTD约束:struts hiebernate 
    SCHEMA约束:tomcat 项目 spring
//////////////////
dtd约束:
    1.会和xml关联.
    2.可以通过约束写出xml文件
        按f2或者alt+/
        ? * + | () ,
注意:
    一个xml只能出现一个dtd约束
////////////////////////
SCHEMA:
    一个xml文件中可以出现多个schema约束
    通过名称空间将约束添加的
        xmlns="名称空间"
        xmlns:别名="名称空间"
/////////////////////////
xml-解析
    dom:一次性将整个xml文件加载到内存.可以curd操作
    sax:逐行解析  只能进行查询操作
dom4j技术查询xml
    1.导入jar包
    2.获取document树
        Document doc=new SAXReader().read(xml文件路径);
    3.获取根节点
        Element root= doc.getRootElement();
    4.通过根节点获取其他节点
        获取属性节点 
            String value=root.attributeValue("属性名");
        获取所有的子元素
            List<Element> list=root.elements();
        获取一个元素的子元素的标签体
            String text=ele.elementText("子元素");
    Xpath:扩展:
        selectNodes("") 获取多个
        selectSingleNode("") 获取一个
/////////////////////////////////
反射:
    1.获取class对象
        方式3:
            Class clazz=Class.forName("全限定名");// 包名+类名   com.mysql.jdbc.Driver
    2.通过class对象创建一个实例对象
        clazz.newInstance();//相当于调用此类的无参构造

    3.获取方法(public修饰的方法)
        Method m=clazz.getMethod("方法名称",Class ... 参数类型);
    4.执行方法
        m.invoke(实例对象,参数...);//相当于   实力对象.m(参数...)
/////////////////////////////
web的概念
    web:网页
    web资源:
        动态和静态
    web开发技术
    常见的服务器
    tomcat:★
        下载 安装 启动  退出  配置 目录
    web项目的目录结构★
    web项目发布:
        方式1:放在tomcat/webapps下
    eclipse和tomcat整合
    在eclipse发布项目

day09-servlet

http:超文本传输协议
    请求:
    响应:
servlet:★
    本质上就是一个类,运行在服务器端的一个java小程序,生成动态web内容处理业务逻辑.
编写servlet:
    1.编写一个类 继承了HttpServlet 重写了doGet()或者doPost()
    2.编写配置文件 
        注册servlet  
            <servlet>
                <servlet-name>给servlet起个名字 名字唯一</servlet-name>
                <servlet-class>servlet的全限定名</servlet-class>
            </servlet>
        绑定路径
            <serlvet-mapping>
                <servlet-name>给servlet起个名字 名字唯一</servlet-name>
                <url-pattern>访问路径 目前都是以"/"开始</url-pattern>
            </serlvet-mapping>
    3.访问路径:
        http://主机:端口号/项目名/路径
servlet的体系结构:
    所有的servlet应该继承HttpServlet 间接的实现了Servlet接口
httpServlet中的方法:
    service(ServletRequest request,ServletResponse response):在这个方法中 将两个参数强转,调用了重载service方法
        service(HttpServletRequest request,HttpServletResponse response):获取请求的方式,根据请求方式的不同调用相应doXxx方法
    doGet和doPost方法:用来处理我们自己业务逻辑

servlet的生命周期 ★★★

url-pattern的配置:
    完全匹配>目录匹配>后缀名匹配

load-on-startup:修改servlet的初始化时机

若我们自己的项目处理不了请求,服务器上有一个默认的servlet会帮我们处理

/////////////////////////////
servletConfig:
    servlet的配置对象:
    获取servlet名称 初始化参数
    获取全局管理者★ getServletContext()
////////////////
servletContext:
    上下文
    作用:
        1.获取全局的初始化参数    
            getInitParameter("key")
        2.共享资源(域对象)
            xxxAttribute()
        3.获取资源
            getRealPath("/1.txt"):获取项目发布到服务器上位置的根目录
            getResourceAsStream("/1.txt"):以流的形式返回一个文件
        4.获取文件mime类型
            getMimeType(文件名称)
域对象:
    servletcontext
    创建:
    销毁:

day10-response&request

response:
    操作响应行
        状态码
        常用方法:
            setStatus(int code)  针对的1xx 2xx 3xx
    操作响应头:
        setHeader(String key,String value):设置
        addHeader(String key,String value):添加

        常用的响应头:
            location:重定向:
                response.sendRedirect("跳转路径");
            refresh:定时刷新
                response.setHeader("refresh","秒数;url=路径");//java
                meta标签//html代码
            content-type:设置文件的mimeType,及设置响应流的编码并且通知浏览器用什么编码打开
                response.setContentType("text/html;charset=utf-8");
            content-disposition:设置文件下载
                response.setHeader("content-disposition","attachment;filename="+文件名称);
    操作响应体
        getWriter():
        getOutputStream():
        注意:俩流互斥,服务器帮我们关闭此流
    响应的中文乱码:
        response.setContentType("text/html;charset=utf-8");
////////////////////////////////
文件下载:
    1.超链接下载
    2.编码下载(两个头一个流)
        设置文件的mimetype
        设置下载头信息
        对拷流
    扩展:
        文件名称中文问题:
            方法1:
                firefox :base64
                其他:utf-8
            方法2:(八九成可以使用)
                new String(filename.getBytes("gbk"),"iso8859-1");
////////////////////////////////
request:请求 获取浏览器发送过来的数据
    操作请求行
        getMethod():请求方式
        getContextPath():获取项目名称
        getRemoteAddr():获取请求的ip地址

    操作请求头
        String getHeader(String key)
        常见的头信息:
            user-agent:获取浏览器内核
            referer:页面从那里跳转过来的
    操作请求参数
        String getParameter(String key):
        String[] getParameterValues(String key):
        Map<String ,String[]> getParameterMap();

    请求的中文乱码:
        对于get请求:参数追加到地址栏,会使用utf-8编码,服务器(tomcat7)接受到请求之后,使用iso-8859-1解码,所以会出现乱码
        对于post请求,参数是放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码

        通用的方法:
            new String(参数.getBytes("iso-8859-1"),"utf-8");
        针对于post请求来说:只需要将请求流的编码设置成utf-8即可
            request.setCharacterEncoding("utf-8");
    域对象:request
        请求转发:
            request.getRequestDispatcher("内部路径").forward(request,response);
        request生命周期:
            一次请求
////////////////
扩展:封装数据:
    apache的BeanUtils
        1.导入两个jar包
        2.调用 BeanUtils.populate(Object bean,map);

day11-cookie和session

jsp:
    java 服务器页面
    就是在html代码嵌套java代码,
    本质上就是一个servlet,运行在服务器,接受请求,处理业务逻辑,生成动态内容
    jsp三个脚本:
        <%...%> java片段 
            生成在jsp的service方法中
        <%=...%> 输出表达式
            生成service方法中
            不能";"结尾
        <%!...%> 声明成员
cookie:浏览器端会话技术
    由服务器生成,key=value格式,通过响应头(set-cookie)写回浏览器
    保存在浏览器端,当浏览器下一次访问的时候,根据一定的规则携带不同的cookie,通过请求头(cookie)携带
常用方法:
    构造:
        new Cookie(String key,String value);
    写回浏览器:
        response.addCookie(Cookie c)
    获取:
        Cookie[] request.getCookies();
    cookie的api:
        getName():获取cookie的名称
        getValue():获取cookie的值

        setMaxAge(int 秒):设置cookie在浏览器的存活时间
            若设置为0:删除cookie(前提必须路径保持一致)
        setPath(String path):设置cookie的路径  /day1101/
            若访问的路径中包含cookie的path,则携带过去
    注意:
        cookie不能跨浏览器
        cookie中不支持中文
///
session:
    服务器端会话技术:
    依赖于cookie
        浏览器访问服务器,服务器获取jsessionid
            若获取不到
                创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器
            若获取到
                拿着该jsessionid去session池中查找有无该session
                    若查找到:
                        直接拿过来使用,将jsessionid写回浏览器
                    若查找不到
                        创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器

    常用方法:
        获取session:
            HttpSession request.getSession():

    域对象:
        session
        生命周期
            创建:java代码中可以认为 第一次使用request.getSession创建
            销毁:
                服务器关闭
                session超时
                    默认超时
                    手动设置超时
                ★手动干掉session 
                    session.invalidate()

day12-jsp&el&jstl

jsp:
    作用:
        将内容的生成和信息的展示相分离
    jsp脚本:
    jsp的指令:
        作用:声明jsp页面的一些属性或者动作
        格式:
            <%@指令名 属性=值 属性=值%>
        page:
            重要属性:
                import
                pageEncoding:
                contentType:

            了解:
                isErrorPage:一旦值为true 可以使用jsp的一个内置对象 exception
        include:静态包含,就是将被包含页面或者servlet的所有内容复制过来一起编译运行,只生成一个java文件
        taglib:导入标签库
    jsp的内置对象:
        out
        request
        response
        session

        exception

        page
        config
        application

        pageContext
    jsp的域对象:
        pageContext
        request
        session
        application

        pageContext的使用:
            1.域对象 xxxAttribute()
            2.操作其他域对象 xxxAttribute(..,int scope)
            3.获取其他的内置对象 getXxx()
            4.便捷查找  findAttribute(String key):依次从小到大
    jsp的动作标签
        jsp:forward 请求转发
        jsp:include 动态包含 是将被包含页面或者servlet运行的结果包含进来

el: jsp内置的表达式语言
    用来替代 <%=...%>
    作用:
        注意:
            若属性名中出现一些特殊符号 "."等等
                必须使用:${Scope["属性名"]}
        1.获取域中的数据
            获取简单数据
                ${Scope.属性名}
                ${域中的属性名}:依次从小到大

            获取复杂数据
                数组和list
                    ${域中的容器名称[index]}
                map
                    ${域中的容器名称.键名}
            javabean导航
                ${域中的bean名称.bean属性}
        2.执行运算
            注意:
                +:加法运算
                empty:判断一个容器的长度是否为0,还能判断一个对象是否为空
                    ${empty 域中的对象}
                    ${not empty 域中的对象}
                三元运算符
        3.获取常见的web对象
        4.调用java的方法
    ///////////////////
    el内置对象(11个)
        cookie:
            ${cookie.cookie的key.value}
        pageContext
            ${pageContext.request.contextPath}://动态获取项目名

day13-事务&mvc&反射补充

jsp的设计模式
    model1:jsp+javabean(了解)
    model2:jsp+servlet+javabean
        jsp:展示数据
        servlet:接受请求,处理业务逻辑
        javabean:封装数据,封装对数据的访问
MVC:
    将业务逻辑 代码 显示相分离
    M:model 模型  封装数据,封装对数据的访问
    V:view  视图  展示数据,目前jsp担任
    C:ctrl  控制  接受请求
三层架构:
    web:
        作用:
            展示数据

            接受请求
            调用service
            页面跳转,信息的生成
    service
        作用:
            处理业务逻辑
            调用dao
    dao
        作用:
            对数据库的curd操作
///////////////////////
反射:
    1.获取class对象
    2.通过class获取构造器
    3.通过class获取字段
    4.通过class获取指定的方法
    5.可以执行方法
/////////////////////////
事务: 
    就是一件完整的事情,可以包含多个操作单元,这些单元要么全部成功,要么全部失败
mysql中的事务(了解)
    默认自动提交. 
    控制事务:
        1.关闭自动事务
        2.手动打开一个事务
            start transaction;
            commit():事务提交
            rollback():事务回滚
java中事务:(★)
    Connection的api
        setAutoCommit(false):手动开启事务
        commit():事务提交
        rollback():事务回滚
/////////////////////////////////
如何使用同一个connection
    1.向下传递
    2.将连接绑定到当前线程
        ThreadLocal
            set(Object value)
            Object get()
            remove()
//////////////////////////
DBUtils中事务控制
    QueryRunner:
        构造:
            new QueryRunner(Datasource ds)://自动事务.调用方法的不需要传入connection,资源不用我们释放.
            new QueryRunner()://手动事务.调用方法的必须传入connection,需要手动提交事务或者回滚事务.必须手动释放资源
/////////////////////////
事务的特性 ★★★
    ACID
    原子性 一致性 隔离性 持久性
不考虑隔离性会出现的读问题★★
    脏读  不可重复度 虚读
数据库的隔离级别
    read uncommitted 读未提交 不能避免任何问题
    ★read committed     读已提交 避免脏读
    ★repeatable read 可重复度 避免脏读和不可重复读的发生
    serializable 串行化 避免所有的问题

/////////////////////////
servlet
    会创建一个servlet
    会更改web.xml
    servletContext:
        全局管理者 上下文
            资源共享(域对象)
            获取资源文件
                getRealPath()
                getResourceAsStream()
            获取mimetype
                getMimeType()
    面试题:
        serlvet的生命周期
rr
    response:往浏览器写东西
        重定向:response.sendRedirect(绝对路径)
        定时刷新:refresh
            setHeader("refresh","秒数;url=跳转路径")
            meta
        getWriter():字符流
        getOutputStream():字节流
        文件下载:
            setContentType(mime类型)
            setHeader("content-disposition","attachment;filename="+文件名);

    request:获取浏览器发送过来的数据
        获取参数:3个
        中文乱码:
            通用的方式
                new String(名字.getBytes("iso-8859-1"),"utf-8");
            针对post请求
                request.setCharacterEncoding("utf-8");
        请求转发(域对象)
            request.getRequestDispatcher(内部路径).forward(..);

cookie和session
    cookie:浏览器端会话技术
        常用方法:
            new Cookie(String key,String value);
            写回浏览器
                response.addCookie(Cookie c)
            获取cookie
                request.getCookies()
            cookie的api
                getName()
                getValue()

                setMaxAge(int 秒)
                setPath(String path)
    session:服务器端的会话技术
        常用方法:
            获取session
                request.getSession
        域对象:私有的数据
            创建:
            销毁:
                服务器非正常关闭
                session超时
                手动删除:
                    session.invalidate()

jsp el jstl
    jsp的指令 include taglib
    jsp的内置对象 面试题
    jsp:forward
    jsp:include

    el:全部
        获取数据
        执行运算

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值