黑马程序员技术交流社区
标题: 【成都校区】周记八 [打印本页]
作者: qq563879497 时间: 2018-6-9 09:39
标题: 【成都校区】周记八
第八周day141. 案例:记录用户浏览商品的记录
(1) 步骤分析
① 在登录完成后,显示商品列表页面.
② 为商品列表页面做一些准备工作.
③ 点击某个商品,将商品ID传递一个Servlet.
④ 在Servlet中:判断是否是第一次浏览商品
⑤ 如果是第一次:将商品的ID存入到Cookie中即可.
⑥ 如果不是第一次:判断该商品是否已经浏览了.
⑦ 如果浏览器过.删除之前元素,将该元素添加到最前面.
⑧ 如果没有浏览过该商品.判断最大长度,没有超过限制,直接加到最前,如果已经超过限制,删除最后一个,将其插入到最前.
(2) 需要用到的方法
① request.getCookies()——获得从浏览器提交到服务器所有cookie
② response.addCookie(Cookie cookie)——向浏览器设置cookie
③ getValue();——获得cookie中的值
④ new LinkedList<E>(Arrays.asList(数组))——把数组转换成双链集合(arraylist是单链集合)
day151. session域对象
(1) 创建:服务器端第一次调用getSession()创建session
(2) 销毁
① session过期,默认30分钟,
1) 在Tomcat/conf/web.xml可以修改
2) 在项目下的web.xml可以修改
3) 在代码中session.setMaxInactiveInternal(秒);可以修改
② 非正常关闭服务器(断电或手动点击terminate按钮),如果正常关闭session序列化到硬盘
③ 手动调用session.invalidate();
(3) 作用范围:多次请求,一次会话
2. JSP
(1) 什么是jsp:
① Java Server Pages(Java服务器端的页面)
(2) 为什么要学习:
① Servlet自身有缺陷,没有办法与ASP,PHP进行竞争,推出了动态网页开发技术
(3) 使用
① jsp=HTML+Java+jsp本身的东西
(4) 执行过程
① jsp翻译成Servlet,编译这个Servlet的类,生成class文件
(5) jsp的脚本
① <%! %>:翻译成Servlet中的成员内容,定义变量,方法和类——不建议使用
② <% %>:翻译成Servlet中service方法内部的内容,定义类,变量
③ <%= %>:翻译成Servlet中service方法中out.print();
(6) page指令
① page指令
1) <%@ page %>——用来设置jsp
2) contentType:设置浏览器打开这个jsp的时候采用的默认字符集编码
3) pageEncoding:设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码
4) import:在jsp中引入类对象,但是import可以出现多次
5) extends:设置jsp翻译成Servlet后继承的类
6) autoFlush:设置jsp的缓存自动刷出true自动刷出
7) buffer:设置jsp的缓冲区的大小,默认8kb
8) isELIgnored:设置在jsp中是否忽略EL表达式。默认不忽略
9) * 设置全局的错误友好页面:
a. * 在web.xml中设置:
b. <error-page>
c. <error-code>404</error-code>
d. <location>/404.jsp</location>
e. </error-page>
f. <error-page>
g. <error-code>500</error-code>
h. <location>/500.jsp</location>
i. </error-page>
② include指令
1) 可以包含其他页面
a. <%@ include file=”相对路径”%>
③ taglib指令
(7) jsp的内置对象
① 概念:在jsp中可以直接使用的对象
② 九大内置对象
1) request
2) response
3) session
4) application
5) page:真是对象是object,就是jsp翻译成Servlet后的类的引用
6) pageContext
7) config
8) out:
a. out和response.getWriter是不是同一个对象?区别是什么?
a) out真是对象是JspWriter
9) exception
3. PageContext
(1) 作用范围:仅限当前页面
(2) 作用:
① 域对象里面存取值,setAttribute getAttribute
② 获取其他8大内置对象:
1) 主要在编写框架,通用性很高的代码中
③ 可以往其他三大域里存取值:
1) jsp的四个域范围:
a. pagescope:当前页面有效 pageContext
b. requestscope:一次请求范围 request
c. sessionscope:一次会话范围 session
d. applicationscope:应用范围 application
敲浏览记录和购物车案例day161. EL
(1) 概述:表达式语言,只能在jsp页面使用
(2) 基本语法:${el表达式}
(3) 功能:
① 获取数据:(jsp的四个域)
1) 举例:
a. ${pageScope.name}
a) pageScope是域范围
b) name是key
b. ${name}
a) 先从page里面找有没有name,没有的话再找request,再找session,再找application(就近原则)
c. 如果有没name,就会返回一个””(空字符串)
d. ${str[0]}
a) 获取数组的元素,集合同理
e. ${map.key}
a) map是map集合
b) key是map里的建
c) 如果key有特殊字符(如.),就需要加[]——${map.[key.key]}
f. ${list[0].name}
a) list里面存的是JavaBean(普通类,实现类),name是这个JavaBean的属性,这个el表达式获取的是这个JavaBean的name的值
② 执行运算:
1) 算数运算
a. 1+”2”=3
2) 比较运算
3) 逻辑运算
4) 三元运算
5) 特殊字符empty:判断域对象中的值是否为null
a. ${empty key}
③ 操作web开发的常用的对象:
1) 获取请求头的信息
a. ${header[“User-Agent”]}
2) 获取cookie中的值
a. ${cookie.键.value}
④ 调用Java中的方法:(不常用)
2. JSTL
(1) 概述:
① JSP标准标签库
② 作用:与el结合减少<%%>的使用
(2) jsp怎么使用
① 引入jar包(两个)
1) jar:jstl.jar
2) standard.jar
② 在页面中引入标签库<%@ taglib uri=”路径” prefix=”标签库的前缀”%>
(3) 常用标签
① 定义变量:
1) <c:set var=”变量名” value=”值” scope=”存入的域对象”></c:set>
② 输出值:
1) <c:out value=””></c:out>
2) <c:out value=”${a}” default=”b”></c:out>:如果变量a没有值就输出b
③ 判断:
1) <c:if test=”判断”>如果成立就执行这里</c:if>
2) <c:if test=”判断” var=”变量名” scope=”存入的域对象”>如果成立就执行这里</c:if>
④ 遍历:
1) <c:forEach var=”元素” items=”${域对象名称}”> ${元素} </c:forEach>
2) <c:forEach var=”元素” begin=”0” end=”10” step=”每次增加” varStatus=””> ${元素} </c:forEach>
(4) 函数库
① 需要另外引入jar包
3. MVC(model view beanUtils)
(1) jsp+ Servlet+ JavaBean
(2) M——model:对应JavaBianca技术,作用封装和处理数据
(3) V——view:视图,对应jsp和html等技术,作用展示数据给用户看
(4) C——controller:控制对应Servlet,Struts,SprinMVC等技术,作用接收浏览器请求,然后响应
day171. 反射
(1) 目的
① 操作某个类的属性或方法
(2) 与反射有关的对象
① Class字节码对象
1) 获得方法
a. Class.forName(“全类名”)——推荐
b. 类名.class
c. 类的对象.getClass()
② Field对象(属性)
1) 获取属性:getDeclaredField(String name)
2) 设置访问权限:setAccessible(Boolean flag)
③ Method对象(方法)
1) 获取一个方法:getMethod(方法名,该方法参数的字节码对象);
2) 获取所有方法:getMethods();
3) 执行方法:invoke(当前方法的实例化对象,方法里的参数);
④ Constructor构造器对象
2. JavaEE三层架构和MVC的区别
(1) Java
① web层:控制层——处理浏览器发送的请求,然后响应
② service层:业务层——处理业务逻辑(处理事务)
③ dao层:数据库持久层——操作数据库
(2) MVC
① M:model模型层,JavaBean技术,封装和处理数据
② V:view视图层,jsp和html等,展示数据给用户看的
③ C:Controller控制层,Servlet,Struts,spring等技术,作用处理浏览器的请求,然后响应
3. 事务(了解)
(1) 概述
① 一组不可分割的单元,这个单元的操作要不一起成功,要不一起失败(转账案例)。
(2) 特点
① 原子性:强调事务的不可分割
② 一致性:强调的是事务的执行的前后,数据的完整性要保持一致
③ 隔离性:一个事务的执行不应该受到其他事务的干扰
1) 如果不考虑事务的隔离性,引发一些安全性问题(读问题/写问题)
④ 持久性:事务一旦结束(提交/回滚)数据就持久保存到了数据库
(3) 三大读问题
① 脏读:一个事务读到另一个事务还没有提交的数据
② 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在当前事务中多次查询结果不一致
③ 虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致
(4) 四大隔离级别(性能与级别成反比)
① read uncommited:未提交读——脏读,不可重复读和虚读都可能发生
② read committed:已提交读——避免脏读(Oracle默认)
③ repeatable read:可重复读——避免脏读和不可重复读(MySQL默认)
④ serializable:串行化读——避免三大读
(5) MySQL的事务管理两种方式(默认自动提交)
① 手动开启事务
1) start transaction——开启事务
2) 多条sql
3) commit/rollback;
② 设置一个自动提交参数
1) set autocommit=0;——将autocommit设置成off
a. show variables like ‘%commit%’——查看与commit相关参数
(6) JDBC的事务管理
① 常用方法
1) void setAutoCommit(boolean autoCommit)——设置是否自动提交
2) void commit()——提交
3) void rollback()——回滚
② 第一种思路
1) 通过参数传递的方式,把connection在service层传递到dao
③ 第二种思路
1) 通过把connection绑定到当前线程,用TreadLocal()
a. 在JDBCUtils中创建TreadLocal
b. 在开启事务方法中获取新的连接,开启之后把连接存入线程
c. 在commit/rollback中,从线程中获取连接,提交/回滚后close关闭连接后,要把连接从线程中移除,以免重复开启
day181. 案例:商品管理
(1) 需求分析:
① 添加商品
② 修改商品
③ 删除商品
④ 查看商品
1) 单个查询
2) 多个查询
3) 条件查询
⑤ 分页显示
(2) 概要设计:根据需求分析文档,设计功能里面需要用的表和具体的功能实现的流程图
day191. ajax(异步的JavaScript And XML)
(1) 什么是ajax:局部刷新页面(同步是整个刷新)
(2) 功能:不中断用户体验
(3) 概念:异步请求技术,依赖异步XMLHTTP
(4) XMLHttpRequest
① 属性
1) onredystatechange:异步请求对象的状态发生改变,会触发时间,发送异步请求
2) 异步请求对象的状态属性
a. 请求的状态:readyState==4,表示浏览器向服务器发送请求成功
b. 响应的状态:status==200,表示服务器向浏览器响应成功
3) 接收服务器响应数据的属性
a. 服务器向浏览器响应的字符串:responseText
b. 服务器形影浏览器响应xml数据:responseXML;
② 方法
1) open(请求方式,请求路径,是否异步):异步去想服务器发送请求
2) send(请求参数):发送请求
3) setRequestHeader(头信息,头的值):处理post请求方式的中文问题
(5) 通过ajax
① 创建异步请求对象(粘贴)
② 发送异步请求(建立连接)
③ 发送请求的参数(如果是post请求方式需要设置请求头,get方式不需要)
④ 监听异步请求过程的状态(这个步骤可以放在2,3前面)
1) 判断请求是否发送成功
2) 判断响应是否成功
3) 接收服务器响应的数据
2. jQuery
(1) ajax部分的方法
① jq对象.load(路径,提交的参数,回调函数);
② $.get(路径,提交的参数,回调函数,服务器响应的数据类型)——常用
1) 响应的数据类型:文本,json,xml,jsp,html,等等
③ $.post(路径,提交的参数,回调函数,服务器响应的数据类型)——常用
④ $.ajax();——用的不多
⑤ serialize();——jq的ajax传递参数的时候需要使用的方法
(2) 其他常用方法
① html()
1) 如果不带参数,结果就是获取标签内的内容
2) 如果带参数,结果就是给标签内添加参数
② attr()
1) 带一个参数,获取该属性的value
2) 带两个采纳数,给该参数设置值
day201. jQuery案例:省市联动
(1) 用xml作为传输数据的格式
① 需要用一个 XStream()对象 调方法toXML()把数据转换成xml格式
② 需要设置传输时的格式response.setContentType(“text/xml;charset=utf-8”);
(2) 用json作为传输数据的格式
① 什么是json
1) 一种数据交换的格式,更加轻量级,解析非常简单
② JsonConfig fig = new JsonConfig();//创建json工具
③ fig.setExcludes(new String[]{"pid"});//排除pid
④ JSONArray.fromObject(list,fig);//把list转换成json格式
⑤ 也需要设置传输格式response.setContentType(“application/json;charset=utf-8”);
(3) 用json转换单个对象
① JsonObject jo=jsonObject.fromObject(user);
2. listener(监听器)了解
(1) 什么是监听器
① 就是一个Java类,用来监听其他的Java的状态的变化
(2) web开发中的三类监听器
① 生命周期监听器
1) request:访问服务器就创建,响应结束就销毁
2) session:第一次请求服务器,调用getSession就创建
a. 销毁:默认30分钟销毁
b. 非正常关闭
c. 手动调用销毁方法invalidate()
3) 注意:ServletContextListener监听器:在服务器启动时,加载spring的配置文件
4) ServletContext:在服务器启动时创建,服务器关闭销毁
② 域对象属性值的变化的监听器(设置值,替换之,移除值)
③ session的钝化和活化,绑定和解绑定的监听器
day211. Filter(过滤器)重要
(1) 概述
① 什么是过滤器
1) 可以过滤从客户端向服务器发送的请求
② 应用场景
1) 基本的校验操作:用户没有登录,不允许操作
2) 全站的乱码问题处理
3) 自动登录
4) ......
③ 过滤器生命周期(了解)
1) 创建:服务器启动的时候
2) 销毁:服务器关闭的时候或者移除项目的时候
3) init方法,启动服务器时调用一次
4) destroy方法,关闭服务器时调用一次
5) doFilter方法,请求一次,执行一次
(2) 入门案例
① 直接新建filter文件(跟Servlet一样,配置xml)
(3) 路径配置
① 完全目录匹配:/jsp/jsp.jsp
② 目录匹配
1) 拦截所有请求:/*
2) 拦截jsp下的所有请求:/jsp/*
③ 扩展名匹配:*.do或者*.action(不能写/*.do)
(4) 过滤器链的概述
① 一个项目可以有多个Filter,多个Filter组成一个过滤器链
② 执行顺序根据xml配置来排序
(5) 拦截方式<dispatcher></dispatcher>
① REQUEST 默认拦截方式,拦截的请求
② FORWRAD 拦截转发
③
(6) 案例:过滤器,自动登录
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |