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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq563879497 中级黑马   /  2018-6-9 09:39  /  742 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第八周day14
1. 案例:记录用户浏览商品的记录
(1) 步骤分析
在登录完成后,显示商品列表页面.
为商品列表页面做一些准备工作.
点击某个商品,将商品ID传递一个Servlet.
Servlet:判断是否是第一次浏览商品
如果是第一次:将商品的ID存入到Cookie中即可.
如果不是第一次:判断该商品是否已经浏览了.
如果浏览器过.删除之前元素,将该元素添加到最前面.
如果没有浏览过该商品.判断最大长度,没有超过限制,直接加到最前,如果已经超过限制,删除最后一个,将其插入到最前.
(2) 需要用到的方法
① request.getCookies()——获得从浏览器提交到服务器所有cookie
② response.addCookie(Cookie cookie)——向浏览器设置cookie
③ getValue();——获得cookie中的值
④ new LinkedList<E>(Arrays.asList(数组))——把数组转换成双链集合(arraylist是单链集合)
day15
1. 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 PagesJava服务器端的页面)
(2) 为什么要学习:
① Servlet自身有缺陷,没有办法与ASP,PHP进行竞争,推出了动态网页开发技术
(3) 使用
① jsp=HTML+Java+jsp本身的东西
(4) 执行过程
① jsp翻译成Servlet,编译这个Servlet的类,生成class文件
(5) jsp的脚本
① <%!         %>:翻译成Servlet中的成员内容,定义变量,方法和类——不建议使用
② <%                 %>:翻译成Servletservice方法内部的内容,定义类,变量
③ <%=         %>:翻译成Servletservice方法中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. outresponse.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
敲浏览记录和购物车案例day16
1. EL
(1) 概述:表达式语言,只能在jsp页面使用
(2) 基本语法:${el表达式}
(3) 功能:
获取数据:(jsp的四个域)
1) 举例:
a. ${pageScope.name}
a) pageScope是域范围
b) namekey
b. ${name}
a) 先从page里面找有没有name,没有的话再找request,再找session,再找application(就近原则)
c. 如果有没name,就会返回一个””(空字符串)
d. ${str[0]}
a) 获取数组的元素,集合同理
e. ${map.key}
a) mapmap集合
b) keymap里的建
c) 如果key有特殊字符(如.),就需要加[]——${map.[key.key]}
f. ${list[0].name}
a) list里面存的是JavaBean(普通类,实现类),name是这个JavaBean的属性,这个el表达式获取的是这个JavaBeanname的值
② 执行运算:
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. MVCmodel view beanUtils
(1) jsp+ Servlet+ JavaBean
(2) M——model:对应JavaBianca技术,作用封装和处理数据
(3) V——view:视图,对应jsphtml等技术,作用展示数据给用户看
(4) C——controller:控制对应ServletStrutsSprinMVC等技术,作用接收浏览器请求,然后响应
day17
1. 反射
(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
① Mmodel模型层,JavaBean技术,封装和处理数据
② Vview视图层,jsphtml等,展示数据给用户看的
③ CController控制层,ServletStrutsspring等技术,作用处理浏览器的请求,然后响应
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) 通过参数传递的方式,把connectionservice层传递到dao
③ 第二种思路
1) 通过把connection绑定到当前线程,用TreadLocal()
a. JDBCUtils中创建TreadLocal
b. 在开启事务方法中获取新的连接,开启之后把连接存入线程
c. commit/rollback中,从线程中获取连接,提交/回滚后close关闭连接后,要把连接从线程中移除,以免重复开启
day18
1. 案例:商品管理
(1) 需求分析:
① 添加商品
② 修改商品
③ 删除商品
④ 查看商品
1) 单个查询
2) 多个查询
3) 条件查询
⑤ 分页显示
(2) 概要设计:根据需求分析文档,设计功能里面需要用的表和具体的功能实现的流程图
day19
1. 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) 响应的数据类型:文本,jsonxmljsphtml,等等
③ $.post(路径,提交的参数,回调函数,服务器响应的数据类型)——常用
④ $.ajax();——用的不多
⑤ serialize();——jqajax传递参数的时候需要使用的方法
(2) 其他常用方法
① html()
1) 如果不带参数,结果就是获取标签内的内容
2) 如果带参数,结果就是给标签内添加参数
② attr()
1) 带一个参数,获取该属性的value
2) 带两个采纳数,给该参数设置值
day20
1. 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的钝化和活化,绑定和解绑定的监听器
day21
1. 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) 案例:过滤器,自动登录

0 个回复

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