A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq563879497 中级黑马   /  2018-5-28 11:43  /  776 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第七周day09
1. 多表查询(通常要给表起个别名,方便调用字段)
(1) 交叉连接(结果是笛卡尔积,用的比较少)
① select * from 1 cross join 2
② select * from 1,表2
(2) 内连接
① select * from 1 inner join 2 on 条件;(显式)
② select * from 1,表2 where 条件;(隐式)
(3) 外连接
① select * from 1 left outer join 2 on 条件;(左连接,可以不写outer
1) 解释:把表2信息拼接到表1,如果表1有多余的信息,也会把表1显式完整
② select * from 1 right outer join 2 on 条件;(右连接,可以不写outer
1) 解释:把表1信息拼接到表2,如果表1有多余的信息,不会显示多余的信息
2. 内连接和外连接的区别:内连接只查询两个表的公共的信息,外连接以一个表为基准查询所有信息
dye10
1. JDBC
(1) 概念:sun公司提供的一组接口,各大数据库厂商他们来实现这组接口
(2) 作用:我们可以通过jdbc来操作数据库,因为各大厂商都实现了jdbc,所以我们不用去记很多的方法。只需要掌握jdbc,就可以去操作各大数据库
(3) 怎么使用:
① 贾琏欲执事
2. 基本步骤
(1) 加载驱动:class forname(“com.mysql.jdbc.Driver”)
(2) 获得连接:Connection con=DriverMannager.getConnection(“jdbc:mysql://数据库地址:端口:数据库”,”账户”,”密码”);
(3) 获得执行SQL语句的对象:Statement sta=con.createStatement()
(4) 编写SQL语句:String str=”select * from emp”
(5) 执行SQL语句:ResultSet rs=sta.executeQuery(str)
(6) 因为是查询语句,所以可以遍历结果rswhile(rs.next()){
System.out.print(rs.getInt(“id”));
System.out.print(rs.getString(“ename”));
...
...
}
(7) 释放资源:
① rs.close
② sta.close
③ con.close
day11
1. JDBC中的事务管理
(1) 开启事务:setAutocommitfalse);
(2) 提交事务:commit();
(3) 回滚事务:rollback();
(4) 注意:管理的是JDBC,回滚并不会操作Java里的变量
2. 连接池
(1) 概念:一个容器,用来装连接对象
(2) 用处:可以节约资源,提高运行的性能
3. 今天需要掌握
(1) 配置文件的方式获得连接池
① 德鲁伊
1) 需要一个配置文件,名字和位置可以自定义(详见教程笔记)
② c3p0
1) 需要一个配置文件,名字和位置都是固定的(详见教程笔记)
4. DBUtils进行增删改
(1) 创建QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource);
(2) qr.updata(“sql语句”,代替问号);
如何创建一个JDBCUtils工具类
思路:1.添加c3p0jar
      2.在成员变量位置创建一个私有静态的对象
      3.创建一个获取Connection的方法
      4.创建一个获取DataSource的方法(直接返回DataSource就行)
      5.最后还是要创建一个方法来释放资源
关键字:ComboPooledDataSource
        getConnection
        getDataSource
day12
1. 查询
(1) ArrayHandler
将一条记录封装到一个数组中,这个数组应该是Object[]
② QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
③ Object[] obj=queryRunner.query(select * from 表名 where id=?”,new ArrayHandler(),1)
(2) ArrayListHandler
将多条记录封装到一个装有Object[]list集合中。
用法与ArrayHandler类似,只是接收用List<Object[]>
(3) BeanHandler
前提:
1) 类名要和表中字段相同
2) 类中要有getset方法
3) 实体类中要有无参构造
② QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
自定义对象=queryRunner.query(select * from 表名 where id=?”,new BeanHandler<自定义对象>(自定义对象.class)1)
(4) BeanListHandler
与上同理,接收用自定义对象集合
(5) MapHandlerkey是列名,value是值)
① QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
② Map<String,Object> map=queryRunner.query(select * from 表名 where id=?”,new MapHandler()1)
(6) MapListHandler
原理同上
2. XML
(1) 概念:可扩展标记语言
(2) 功能
保存数据------用关系型数据库替代
传输数据------json替代
配置文件------目前还没有更好的一个替代(注解现在也在做配置)
3. XML语法
(1) 文档声明:通常出现在xml第一行第一列
(2) 写法:<?xml 属性名=”属性值” 属性名=”属性值” ?>
① 属性
1) version:必须的,使用1.0
2) encoding:字符集,是使用浏览器打开的时候采用的默认的字符集的编码
3) standalone:描述xml文档是否需要依赖其他的文件
(3) 注释
① <!-- -->html一样
(4) xml的元素
① 规则
1) 不能以数字或者标点符号开头
2) 不能以xml开始
3) 不能包含空格
4) 只能有一个根标签
(5) xml的属性
① 属性的名称规范与元素一致
② 要用双引号包起来
(6) CDATA
① <![CDATA[这里的所有东西都当成字符串]]>
4. XML的解析
(1) 通过代码获得xml文档中想要的数据
(2) 解析方式
① DOM解析:Document Object Model
1) 缺点:如果文档特别大,容易导致内存的溢出
2) 优点:对xml进行增删改的操作
② SAX解析:Simple Api for XML
1) 缺点:不能对文档进行增删改的操作
2) 优点:如果文档特别大,不会出现内存溢出的情况
③ DOMSAX的区别:dom一次性将文档加载到内存,形成树形结构进行解析,sax事件驱动方式,一行一行进行解析
5. 使用DOM4j工具解析(还有其他不同组织的工具,今天只学习DOM4j
(1) 导入jar包,dom4j-1.6.1.jar
(2) 创建解析器——
① SAXReader  reader=new SAXReader()
(3) 解析文档获得代表文档的Document对象——
① Document document=reader.read(“xml文档路径”)
(4) 获得根节点——
① Element root=document.getRootElement();
(5) 从根节点下查找其他的节点
① Element ele=root.element(“元素”)
(6) ↑↑↑这个方法不重要
6. 使用XPath
(1) dom4j支持XPathjar
(2) dom4jXPath支持的API
① document.selectNodesString xPath)返回List
② document.selectSingleNodeString XPath)返回Node
day13
1. C/S架构软件:
(1) 概念:Client/Server客户端和服务器端的软件,都是需要在pc端安装的软件,比如qq,迅雷...
(2) 优点:效果炫酷,速度快
(3) 缺点:服务器端更新,客户端需要更新(维护麻烦)
2. B/S架构软件
(1) 概念:Browser/Server浏览器端和服务器端的软件,不需要安装到pc端,只需要有一个浏览器即可,比如京东,网页版微信...
(2) 优点:服务器端更新,客户端不用更新(维护方便)
(3) 缺点:效果不是那么炫酷,所有的代码都在服务器端,导致服务器压力过大
效果:使用HTML5CSS3可以做出炫酷的效果
服务器端压力:搭建服务器的集群,而且还有AJAX技术
3. WEB资源
(1) 静态资源:
① HTML,CSS,JS,图片...
(2) 动态资源
① PHP
② ASP
③ Servlet/JSP
4. 服务器
(1) 硬件:实际就相当于配置很高的电脑
(2) 软件:必须在一台电脑上安装服务器软件,这台电脑成为web服务器
(3) 常见的web服务器
① Apache
② IIS
③ websphere
④ weblogic
⑤ TomcatApache开发,免费
⑥ Jboss
5. WEB动态资源目录结构
(1) 静态资源
(2) WEB-INF
① web.xml(必须的)
② classes(可选的)
③ lib(可选的)
6. Tomcat目录结构
(1) binTomcat的执行的文件
(2) conf:配置文件
(3) lib:放第三方jar包的
(4) logs:运行日志
(5) temp:临时文件存放的路径
(6) webapps:发布的web项目的路径
(7) work:运行jsp的时候,jsp翻译成servlet的代码存放的路径
7. 发布一个web项目到Tomcat
(1) 有三种方式
直接将工程复制到webapps
配置Tomcat虚拟路径(不推荐,容易出错)
1) Tomcat/conf/server.xml文件中进行配置
2) <host>标签下配置:
a. <Context path=”/itheima” docBase=”C:/website”/>
配置Tomcat虚拟路径(推荐)
1) tomcat/conf/Catalina/localhost/xxx.xml
2) 配置<Context docBase=”C:/websete”/>
(2) xxx作为虚拟路径名称
8. HTTP协议
(1) 概念:用来规定浏览器与服务器之间需要遵守的规则
(2) 作用:规范浏览器和服务器之间的数据传递
(3) 特点
① 基于请求和响应的模型
② 必须现有请求后有响应
③ 请求和响应成对出现
(4) 默认端口号是80
(5) 版本
① 1.0
② 1.1
9. HTTP请求部分
(1) 请求行:
① 提交方式:常见的两种
1) get提交的参数会显示到地址栏上,post不会显示
2) get一般有大小限制,post没有大小限制
3) get没有请求体,post有请求体
请求路径
③ 协议版本
(2) 请求头:
一般都是keyvalue键值对的形式,一般情况下一个key对应一个value,也有一些事一个key对应多个value
② User-Agent:代表浏览器的类型——文件下载:下载中文文件:ie使用URLEncodor进行编码,火狐使用Base64编码
③ Referer:代表的是网页的来源——防盗链
④ If-Modified-Since:通常与响应中的头Last-Modified一起使用查找本地缓存
(3) 请求体:
就是post提交方式的提交参数
10. HTTP相应部分
(1) 响应行:
① 协议版本:
② 状态码:
1) 200:成功
2) 302:重定向
3) 304:查找本地缓存
4) 404:资源不存在
5) 500:服务器内部错误
③ 状态码描述:
(2) 响应头:
① 键值对形式
② Last-Modified:与请求中的If-Modified-Since一起使用查找本地缓存
③ Content-Dispostion:文件下载的时候使用的一个头信息
④ Location:重定向的跳转路径
⑤ Refresh:定时刷新/定时跳转
(3) 响应体:
① 显示浏览器的页面内容
11. Servlet概述
(1) 什么是Servlet
就是一个运行web服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议
② Servlet就是SUN公司提供的一个动态网页开发技术
(2) 作用
① 处理从客户端浏览器发送的请求,并且可以对请求做出响应
12. 今日遇到的问题
(1) 记忆xml的书写格式
(2) 注意不要忘记在控制台那用Servlet导入项目,要不然会导致404错误
day14
1. 三层架构
(1) 优点
① 开发人员可以值关注整个结构中的其中一次
② 可以很容易的用心的实现来替换原有的层次的实现
③ 可以降低层与层之间的依赖
④ 有利于标准化
⑤ 有利于各层逻辑的服用
⑥ 结构更加明确
⑦ 在后期维护的时候,极大地降低了维护成本和维护时间
(2) 缺点
① 降低了系统性能
2. Servlet的生命周期
(1) 概念:Servlet从创建到销毁的过程
(2) 何时创建:用户第一次访问Servlet创建Servlet的实例
(3) 何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候
(4) 描述:用户第一次访问Servlet的时候,服务器会出现一个Servlet的实例,那么Servletinit方法就会执行,任何一次请求服务器都会创建一个新的线程范文Servlet中的service的方法,在service方法内部根据请求的方式的不同调用doxxx的方法,当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行
3. url-pattem的配置
(1) Url-pattern三种配置方式
① 完全路径匹配:
1) /开始                比如:/aaa/ServletDemo
② 目录匹配
1) /开始,以*结束                比如:/aaa/bbb/*
③ 扩展名匹配
1) 不能以/开始,以*开始                比如:*.do        *.action                *.action
错误写法: /*.do
(2) 优先级
完全路径匹配>目录匹配>扩展名匹配
day15(薄弱点加强复习)
1. web项目下读取文件常用的方法
(1) getResourceAsStream(String path)
方法说明:根据提供的文件路径(String path)读取文件,然后返回这个文件的输入流(inputStream类型)
② 应用思路:
1) 获得ServletContext对象:ServletContext context=this.getServletContext();
2) 用上面的对象调用方法:InputStream is=context.getReasourceAsStream(“/WEB-INF/classes/目标文件.扩展名”);
a. 注意:由于开始路径已经固定,所以此方法传入的文件路径前面是固定的。
3) 利用propertiesload方法:Properties pro=new Properties();
  pro.load(is);
4) 读取valueString s=pro.getProperty(“key”);
(2) getRealPath(String path)
方法说明:根据提供的路径(String path),返回一个相对于磁盘的绝对路径(String类型),比如:D:\百度网盘。
② 应用思路:
1) 获得ServletContext对象:同上
2) 调用方法:String s=context.getRealPath(“/WEB-INF/classes/目标文件.扩展名”);
a. 注意:这里传入的路径与上面的方法相同。
3) 然后就可以利用inputStream传入绝对路径s获取该目标文件的了
(3) 小结:以上两个方法都是ServletContext的方法所有都要先用Servlet获取ServletContext对象
(4) 类的加载器
① 为什么要这样用:有时候需要在工具类里面读取这个文件
② 思路
1) 创建工具类:ReadFileUtils
2) 然后固定用法:ReadFileUtils.Class.getClassLoader().getResourceAsStram(“目标文件.扩展名”);
3) 利用propertiesload方法加载
4) 获取到数据该输出输出,该调用调用
2. ServletContext的功能
(1) 获取全局参数
用处:一般一个web项目下可以有多个Servlet,但是每个Servlet之间的参数是不能互相调用的,配置了全局参数之后,每个Servlet都可以用这个全局参数。
配置方法:在web.xml里面配置,可以配置多个
<context-param>
<param-name>自定义</ param-name>
<param-value>自定义</ param-value>
</ context-param>
获取方法1
1) 获取对象——ServletContext
2) 调用方法——getInitParameter(String 自定义)
3) 链式调用——String str=this.getServletContext().getInitParameter(“自定义”);
获取方法2(获取所有name的值)
1) 链式调用——Enumeration<自定义类型> e=this.getServletContext().getInitParameterNames();
a. 注意接收类型
2) 需要遍历
a. while(e.hansMoreElements()){
String name=e.nextElements();
String value=this.getServletContext().getInitParameter(name)
syso(name+”  ”+value)
}
(2) 获取文件的MIHE类型
用处:下载/上传文件的时候可能会用到
方法:getMimetype(String 文件名)
③ 注意:传入的文件名可以不存在,只要有后缀名就可以获取
3. response的常用API
(1) 响应行
① status:设置状态码
1) 就是404302那些,可以设置重定向那些
(2) 响应头
① addDataHeader()
② addHeader()
③ addIntHeader()
以上针对一个key对多个value
⑤ setDataHeader()
⑥ setHeader()
⑦ setIntHeader()
以上针对一个key对一个value
(3) 响应体
① getOutputStream():可以用来下载文件
② getWriter():可以用来下载文本
4. 文件下载的方式
(1) 超链接:就是<a></ a>,不好用,如果浏览器支持文件格式,浏览器就会直接把文件打开
(2) 手动编写代码
技巧:设置两个头(setHeader()),一个流
1) 第一个头:Content-Type:文件的MIME的类型
2) 第二个头:Content-Disposition:以下载的形式打开文件
3) 一个流:InputStream:文件输入流
5. 中文乱码问题
(1) response
① 字节流向浏览器输出中文乱码
1) 思路
a. 把中文转成字节流时候的编码与浏览器编码设置成一样的
2) 实现:
a. 设置浏览器默认打开时候采用的字符集编码
a) response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
b. 设置中文转成字节时候的编码
a) “中文”.getBytes(“UTF-8”)
② 字符流向浏览器输出中文乱码
1) 思路:设置字符缓冲区的编码
2) 实现:
a. 设置浏览器默认打开时候采用的字符编码集(与上面一样)
a) response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
b. 设置字符缓冲区的编码
a) response.setCharacterEncoding(“UTF-8”);
3) 另外一种简单的方法
a. response.setContentType(“text/html;charset=UTF-8”);
a) 这个方法直接包含了上面两段
(2) request接收中文参数的乱码
① get方式提交
1) 思路:
a. String的构造方法,先把接收的数据(request.getParameter(“name”))用ISO-8859-1解码,再用UTF-8编码
2) String tr=new String(request.getParameter(“name”).bytes(“ISO-8859-1”),”UTF-8”);
② post方式提交
1) request.setCharacterEncoding(“UTF-8”);
6. Request的常用API
(1) 获得客户机信息
获取请求方式:getMethod();
② 获取请求路径:
1) getRequestURI();——以项目开头的
2) getRequsetURL;——以http开头的
获取主机地址:getRemoteAddr();
获取工程名:getContextPath();
(2) 获得从页面提交的数据
① getParameter();
② getParameterMap();
③ getParameterNames();
④ getParameterValues();
(3) 作为域对象存取数据
① removeAttribute();
② setAttribute();
③ getAttribute();
7. 重定向和转发
(1) 重定向:response.sendRedirect(“以工程名开头的路径”);
(2) 转发:request.getRequestDispatcher(“不以工程名开头的路径”);
(3) 区别:
① 重定向的地址栏会发生变化,转发的地址栏不会发生变化
② 重定向两次请求两次响应,转发一次请求一次响应
③ 重定向的路径需要加工程名,转发的路径不需要加工程名
④ 重定向可以跳转到任意网站,转发只能挑战到服务器内部网站

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马