大数据WEB阶段总结
来源:互联网 发布:国外js特效网站 开源 编辑:程序博客网 时间:2024/06/04 17:42
一、概述
- HTTP协议
- web容器 - Tomcat
- 静态web资源 - 本质上是文件
- html css js 图片 音频 视频 flash…
- 动态web资源 - 本质上是程序
- Servelt JSP
- 数据库 - sql mysql
- JDBC
二、HTML CSS JS JQUERY
- 看的懂 基本的使用
- 略
三、WEB容器 - Tomcat
- 常见的web服务器
- Tomcat - 开发 测试 部分网站的后台
- WebLogic
- WebSphere
Tomcat
- 虚拟主机
- Tomcat中允许配置多个网站 这些网站独立运行 在外界访问者看来似乎就像运行每个网站都运行在一个独立的服务器上一样。
- 所以Tomcat中引入了虚拟主机的概念,认为每个站点都运行在一个独立的虚拟出来的主机上,这就是虚拟主机的概念。
- 简单起来一句话,tomcat中一个网站占就是一个虚拟主机
- web应用
- 一个站点内可能提供不止一种功能,每个功能相当于这台虚拟主机内部配置的一个web应用。
- 一个web应用由web资源按照一定的结构组织而成
- web应用的目录结构
- new
- |
- |-静态web资源 和 jsp
- |-WEB-INF - 这个路径下的资源无法直接访问
- |-classes - 动态资源的class文件
- |-lib - 动态资源运行时依赖的jar包
- |-web.xml - 当前web应用的配置文件
- |-其他需要保护的不应被访问的资源
- web的应用虚拟路径映射
- web应用存放在服务器的磁盘中,但是为了安全起见应用的真正磁盘路径是不应该暴露给外界访问者的,所以需要进行配置 将真实的web应用的路径 影射为一个虚拟的路径 外界访问虚拟路径 由web应用翻译位真正的磁盘路径访问资源 这个过程称之为web应用的虚拟路径映射。
!!!虚拟主机的配置
在tomcat的conf/server.xml文件中配置
<Engin> <Host name="虚拟主机名称" appBase="虚拟主机管理的目录"> ... </Host> </Engin>
- **还需要在dns服务器或本机hosts文件中 配置ip地址和主机名的映射
!!!web应用的配置
方式 1:
在tomcat的conf/server.xml文件中配置
<Engin> <Host name="虚拟主机名称" appBase="虚拟主机管理的目录"> <Context path="虚拟路径" docBase="真实路径"></Context> </Host></Engin>
- **需要重启才能生效
- 方式 2:
- 在tomcat/conf/[engin]/[hosts]下创建以应用虚拟路径位名称的xml文件 在其中配置
- **不需要明确配置虚拟路径名称 因为文件名将作为虚拟路径来使用
- 方式 3:
- 将应用本身放置到虚拟主机管理的目录下
- **tomcat/webapps目录就是tomcat中localhost虚拟主机默认管理的目录 直接放在该目录下 相当于位localhost增加 web应用
- 其他
- 监听端口指定
- tomcat默认监听8080 可以修改conf/server.xml修改
- 打war包
- 通用web.xml和context.xml
- 在tomcat的conf下有这两个文件 是通用默认的web.xml和context.xml的默认配置
- 在myeclipse下开发web应该
- 发布web应用:将web项目下WebRoot下的内容拷贝到tomcat/webapps下当前web应用名称的文件夹中 因此可以通过localhost虚拟主机访问
- 监听端口指定
- 虚拟主机
!!!!!四、HTTP协议
1.概述 HTTP是一种通用的应用层协议 定义了客户端和服务器端通信方式 底层时TCP/IP协议2.基本原则 基于请求响应模型 一次请求对应一次响应 请求只能由客户端发出 服务器端被动等待请求做出响应3.版本区别 HTTP/1.0 - 一次请求响应后底层的连接关闭 下次访问再重新创建 HTTP/1.1 - 提供了连接保持能力 当短时内多次访问服务器时 复用底层连接 效率高4.HTTP请求 一个请求行 GET /index.jsp HTTP/1.1 请求方式:一共7种 最常用的GET POST GET请求参数在地址后 POST请求参数请求的实体内容中 请求资源的虚拟路径 当前遵循的协议版本 若干请求头 Accept: text/html,image/* -- 通知服务器当前浏览器可以接受那些格式的数据 Accept-Charset: ISO-8859-1 -- 浏览器可以接受的字符集编码 Accept-Encoding: gzip,compress -- 浏览器可以接受的压缩格式 Accept-Language: en-us,zh-cn -- 浏览器接受的语言环境,和国际化相关的头 Host: www.tedu.cn:80 -- 需要访问的虚拟主机的名称 If-Modified-Since: Fri, 17 Feb 2017 18:23:51 GMT -- 这是和缓存机制相关的头 Referer: http://www.tedu.cn/index.jsp -- 这是和防盗链相关的头,对当前资源的访问来自哪个页面的超链接 User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) -- 客户端的基本信息 Cookie -- 和cookie相关的头 Connection: close/Keep-Alive -- 是否继续保持连接 Date: Fri, 17 Feb 2017 18:23:51 GMT -- 当前发送请求的时间 空行 实体内容5.HTTP响应 一个状态行 HTTP/1.1 200 OK 协议版本 状态码:200 302 304 307 404 500 描述信息 若干响应头 Location: http://www.tedu.cn/index.jsp -- 配合302使用实现请求重定向 Server:apache tomcat -- 服务器的基本信息 Content-Encoding: gzip -- 服务器发送的数据使用的压缩格式 Content-Length: 80 -- 服务器发送的数据的大小 Content-Language: zh-cn --服务器发送的数据使用的语言环境 国际化相关的头 Content-Type: text/html; charset=GB2312 -- 服务器发送的数据是什么格式的,如果是字符格式的数据,则还可以通知服务器发送的数据使用的是什么编码,浏览器会根据这个头指定的编码决定使用哪个编码来打开收到的数据 Last-Modified: Fri, 17 Feb 2017 18:24:11 GMT -- 和缓存相关的头 Refresh: 1;url=http://www.tedu.cn -- 定时刷新相关的头,通知浏览器,过几秒后自动刷新访问哪个地址 Content-Disposition: attachment;filename=aaa.zip -- 通知浏览器以附件的形式打开发送过去的数据,是和文件下载相关的头 Set-Cookie:SS=Q0=5Lb_nQ; path=/search -- 和Cookie相关的头 Expires: -1 -- 通知浏览器是否缓存 Cache-Control: no-cache -- 通知浏览器是否缓存 Pragma: no-cache -- 通知浏览器是否缓存 --之所以一个功能有三个头,是因为历史原因.所以为了网页的兼容性考虑,通常这三个头要一起使用 Connection: close/Keep-Alive -- 是否保持连接 Date: Fri, 17 Feb 2017 18:24:11 GMT -- 响应时的时间 一个空行 实体内容
!!五、Servlet
1.概述 Servlet是sun公司提供的一门用于开发动态web资源的技术。 按照这套规范写出来的Servlet可以放置到web应用中在Servlet容器中运行。2.开发步骤 写一个类实现Servlet接口 在web.xml中配置Servelt的访问路径 <servlet> <servlet-name>起一个名字</servlet-name> <servlet-class>Servlet类的全路径名称</servlet-class> </servlet> <servlet-mapping> <servlet-name>起一个名字</servlet-name> <url-pattern>对外访问虚拟路径</url-pattern> </servlet-mapping> 对外访问路径的配置: /xxx /xxx/* *.xx 哪个最像找哪个 *.后缀优先级最低3.继承结构 Servelt |-GenericServlet |-HttpServlet4.Servlet的生命周期 第一次被访问时创建 调用init方法执行初始化 创建出来后驻留在内存中为后续对该Servelt的请求服务 每次访问都触发service方法执行处理逻辑 直到web应用被销毁之前 Servlet销毁 销毁之前调用destory方法执行善后工作5.Servlet访问流程 参看图
!!六、Request Response
1.Request概述 在服务器内部代表http请求的对象2.Request继承结构 ServletRequest |-HttpServletRequest 3.Request主要功能 获取请求相关信息 getRequestURL方法 -- 返回客户端发出请求完整URL 如: http://localhost/day09/servlet/SecondServlet getRequestURI方法 -- 返回请求行中的资源名部分 如: /day09/servlet/SecondServlet getQueryString方法 -- 返回请求行中的参数部分 如: username=zhangfei&password=123 getRemoteAddr方法 -- 返回发出请求的客户机的IP地址 如: 127.0.0.1 //可能会出现0:0:0:0:0:0:0:1形式,是ipv6的表现形式。 getMethod -- 得到客户机请求方式 如: GET或POST !!getContextPath -- 获得当前web应用虚拟目录名称 如: /day09 获取请求头 getHeader(name) getHeaderNames() getIntHeader(name)方法 --- int getDateHeader(name)方法 --- long(日期对应毫秒) 获取请求参数 getParameter(String name) --- String 通过name获得值 getParameterValues(String name) --- String[] 通过name获得多值 checkbox getParameterMap() --- Map<String,String[]> key :name value: 多值 getParameterNames() --- Enumeration<String> 获得所有name 乱码: request.setCharacterEncoding(encode) -- post乱码 new String(param.getBytes("iso8859-1"),encode) -- get乱码 实现转发包含 request.getRequestDispatcher("xxx").forward(request,response); -- 服务器内部跳转 只能看到被转发的资源内容 转发前的内容会被抛弃 request.getRequestDispatcher("xxx").include(request,response); -- 服务器内部包含 两边的内容都有 作为域来使用 生命周期 请求开始时创建request对象 生命周期开始 请求结束request对象销毁 生命周期结束 作用范围 整个请求链 主要功能 在整个请求过程中共享数据4.Response概述 代表http响应的对象5.Response继承结构 ServletResponse |-HttpServletResponse6.主要功能 设置状态码 setStatus(int sc) setStatus(int sc, String sm) 设置响应头 setHeader(String name, String value) setIntHeader(String name, int value) setDateHeader(String name, long date) 获取输出流输出数据到实体内容 PrintWriter getWriter() ServletOutputStream getOutputStream(); 乱码: response.setCharacterEncoding(encode) -- 服务器将字符解析为字节时的编码 response.setContentType("text/html;charset="+encode) -- 通知浏览器解析响应时使用的编码 实现重定向 302+Location response.sendRedirect("xxx"); 实现定时刷新 response.setHeader("refresh","3;url=xxx"); 实现禁止缓存 response.setDateHeader("Expires",-1); response.setHeader("Cache-contrl","no-cache"); response.setHeader("Pragma","no-cache");
七、ServletConfig !ServletContext
1.ServletConfig概述 代表当前Servlet的配置的对象2.ServletConfig获取 this.getServletConfig(); 3.ServletConfig功能 获取Servlet的初始化参数 - 在web.xml的<servlet>标签下配置的<init-param>标签里指定的参数 可以将不像写在servlet的提取到web.xml中管理 getInitParameter() getInitparameterNames()4.ServeltContext对象 代表当前web应用5.ServletContext对象的生命周期 web应用创建时跟着创建 一直驻留在内存中 唯一的代表当前web应用 直到web应用销毁时 跟着web应用的销毁被销毁6.ServleltContext对象获取 servletConfig.getServletContext() this.getServletContext();7.ServletContext对象功能 - 获取web应用的初始化参数 可以在web应用的web.xml中<context-param>标签为当前web应用配置初始化参数 可以通过ServletContext获取该web应用初始化参数 getInitParameter getInitparameterNames8.ServletContext对象作为域对象使用 生命周期 和web应用的命一样长 作用范围 整个web应用 主要功能 在web应用范围内共享数据9.ServletContext解决路径难题 web应用中获取资源时路径怎么写都不对 如果写 相对路径 -- tomcat/bin 如果写 绝对路径 -- tomcat所在磁盘的根目录下 如果写 盘符开始的路径 -- 可以找到资源 一旦换一个发布环境 路径就错了 servletContext.getRealPath("xxx") -- 会在传入的路径前拼接当前web应用的盘符开始的路径 得到资源的盘符开始的路径 从而访问到资源 由于是动态获取的 所以即使换了发布环境也没问题 **类加载器加载资源 如果没有ServletContext可以通过类加载器加载资源 classLoader.getResource().getPath("xxx") -- 需要传入相对于类加载器加载类的路径
!!八、Cookie Session
1.会话技术概述 浏览器为了实现某一个功能 开发访问服务器 从开始访问 到结束功能 之间多次 请求响应加在一起 称之为发生了一次会话 会话最主要的问题时会话数据的保存2.cookie cookie的原理 - set-cookie响应头 和 cookie请求头 cookie的api Cookie c = new Cookie(name,value); c.setMaxAge() -- 设定cookie的保存时长 如果不设置 默认保存在浏览器的内存中 浏览器关闭则消失 如果配置过则在浏览器的临时文件夹下保存 到指定的时间 c.setPath() -- 设定浏览器在访问哪些路径时 带回这个cookie 如果不设置 默认值时 发送cookie的Servlet的父目录及其子孙目录 response.addCookie(c) request.getCookies(); 删除cookie 发送同名 同path 但是maxage为0的cookie3.session session的原理 - 在服务器内部创建浏览器对应的空间保存数据 专门为指定浏览器服务 这样每个浏览器都有对应空间 保存会话数据 - 通过一个特殊的Cookie - JSESSIONID 来识别浏览器 域对象: 生命周期 第一次调用request.getSession()方法时创建 自杀 超时 意外身亡 作用范围 整个会话范围 主要功能 在会话范围内共享数据
九、!!AJAX !!!!URL编码 三种资源跳转方式
AJAX - 异步请求 局部刷新 - 背着浏览器通过js访问服务器 获取 数据后 通过js改变页面URL编码 - HTTP协议只支持ISO8859-1 如果 想要在请求携带非iso8859-1的字符 需要进行URL编码三种资源跳转方式 转发 重定向 定时刷新
十、JSP基础
1.jsp概述 看起来像html 但是其中可以写java代码 便于开发页面 在第一次被访问时被翻译成了Servlet执行 本质上仍然是一种动态web资源开发技术2.jsp语法 模版元素 脚本表达式<%= %> 脚本片段<% %> jsp声明<%! %> jsp注释<%-- --%> jsp指令<%@ %> page指令 <%@ page %> include指令 <%@ include file=""%> taglib指令 <%@ taglib uri="" prefx="" %> !!!jsp的九大隐式对象 page request response config application session out exception pageContext PageContext 作为入口获取其他八大隐式对象 作为入口操作四大作用域 域对象 生命周期 jsp页面访问开始时创建 访问结束时销毁 作用范围 整个jsp页面 主要功能 在当前jsp页面中共享数据 便捷的转发包含
十一、JSP标签技术
jsp标签 <jsp:inclue>用来替代request.getRequestDispatcher().include() <jsp:forward>用来替代request.getRequestDispatcher().forward() <jsp:param>配合前两个标签使用,可以在包含或转发时,带一些参数过去!!el表达式 获取数据 常量数据 变量数据 集合 数组中的数据 map中的数据 javabean的属性 执行运算 算术运算 比较运算 逻辑运算 empty运算符 三元表达式 使用内置常用对象 - 11内置对象 pageContext pageScope requestScope sessionScope applicationScope param paramValues header headerValues Cookie initParam 调用java方法 jstl中fn函数库jstl标签库 c库 fn库 fmt库 sql库 xml库 <c:out> !<c:set> !<c:remove> <c:catch> !!<c:if> !!<c:foreach> <c:choose><c:when><c:otherwise> <c:fortokens> <c:fortokens> <c:url>
!!十二、JAVAEE开发模式
1.javaee开发模式的发展 Servelt JSP JSP + JavaBean Servlet + JavaBean +Jsp !!!JAVAEE的经典三层架构 - web service dao - Servlet JSP Service Dao Javabean !!!!!**MVC设计模式 !!!!!**耦合 解耦 - 高内聚低耦合 - 接口+配置文件+工厂 - 依赖注入
十三、Filter
1.filter概述 三大组件之一 拦截对资源的请求 控制是否允许通过 或在通过之前或之后做一些额外操作2.filter开发步骤 写一个类实现Filtler接口 在web.xml中进行配置3.filter的声明周期 应用启动创建 执行init 驻留在内存中工作 每次拦截执行 dofilter方法 应用销毁前销毁 调用destory方法善后4.filter的相关对象 filterConfig getInitParameter getInitparameterNames getServletContext filterChain dofilter5.filter的应用 全站乱码解决过滤器 !!!改造已有对象身上的不喜欢的方法: 继承 装饰 动态代理 Proxy.newProxyInstance 自动登录过滤器 !!!MD5加密算法 - 数据摘要算法 数据指纹算法 任意二进制算出128位二进制 原文相同密文相同 原文不同密文不同 只能由原文算成密文 密文算不回原文 数据中密码保存 文件校验 数字签名
十四、Listener
1.概述 三大组件之一 监听相关事件进行处理2.八大监听器 监听三大作用域创建和销毁的监听器 监听三大作用域中属性变化的监听器 使javabean自己敢做自己在session域中属性变化的监听器
十五、文件上传
1.文件上传表单
上传项必须有name属性
必须post提交
设置enctype为multipart/form-data
2.服务器中的处理 自己写代码处理 - 麻烦 通过commons-fileupload - 方便 ie的bug 文件存放位置 文件重名覆盖 文件夹下文件过多 - hash分目录存储
!!!!!!十六、数据库 - sql
1.mysql数据库的安装配置2.sql语言 增 删 改 查 普通查询 条件查询 where 分组查询 group by 聚合查询 count sum avg min max 排序查询 order by 分页查询 limit 子查询 连接查询(多表查询)3.多表设计 数据之间的关系 要用表之间的关系保存 1 - 1 在任意一方设计外键保存另一方的主键 1 - * 在多的一方设计外键保存另一方的主键 * - * 建立第三方关系表来保存两张表主键的对应关系4.多表查询 笛卡尔积查询 - 两张表相乘的结果 内连接查询 - 两边都有的数据才查询 外连接查询 左外连接查询 - 在内连接的基础上增加左边有右边没有的数据 右外连接查询 - 在内连接的基础上增加右边有左边没有的数据 全外连接查询 - 在内连接的基础上增加左边有右边没有的数据 和 右边有左边没有的数据
!!!!!!十七、数据库 - jdbc
1.jdbc概述 jdbc:sun提供的操作数据库的接口 数据库驱动:不同数据库厂商对jdbc接口的实现2.开发jdbc步骤 导入驱动包 注册数据库驱动 获取数据库连接 获取传输器对象 传输sql执行得到结果集 遍历结果集获取数据 关闭资源3.sql注入攻击 将用户提交的数据拼接为sql的一部分造成 当用户提交恶意参数 造成意外的sql的执行 PreparedStatement 4.批处理5.连接池 频繁的开关数据库连接 效率低下 通过数据库连接池 来管理复用连接
!!!!!!十八、数据库 - 事务
1.事务的概念 逻辑上的一组操作 要么同时完成 要么同时不完成2.控制事务 mysql默认一条语句一个事务 sql控制事务: start transaction; commit; rollback; jdbc控制事务: conn.setAutoCommit(false) conn.commit() conn.rollback() SavePoint sp = conn.setSavePoint(); conn.rollback(sp);3.事务四大特性 - ACID 原子性 一致性 隔离性 持久性4.隔离性 加锁 - 效率低 - 并不是所有场景都要严格的隔离性 - 提供了选项5.四大隔离级别 Read Uncommitted - 脏读 不可重复读 虚读(幻读) Read committed - 不可重复读 虚读(幻读) Repeatable read - 虚读(幻读) Serilizable - 没有任何问题 但是效率低 脏读:一个事务读取到另一个事务未提交的数据 不可重复读:一个事务读取到另一个事务已经提交的数据 虚读(幻读):一个事务读取全表数据 读取到另一个并发事务的新增删除记录已提交的结果 根据需求 选择能够防止想要防止的问题的基础上 性能尽可能高的隔离级别6.锁机制 两个并发读取 - 不隔离 两个并发修改 - 必须隔离 一个修改一个读取 - Serializable下隔离 其他情况下不隔离 共享锁 共享锁和共享锁共存 共享锁和排他锁不能共存 非Serializable隔离级别下查询不加所 Serializable隔离级别下查询加共享锁 排他锁 排他锁和任意锁都不能共存 任意隔离级别下增删改加排他锁 **死锁7.更新丢失 两个并发的事务基于同一个查询结果进行修改 后提交的事务忽略了先提交的事务对数据库的影响 造成的问题 案例: 重复充值 秒杀抢购 解决方案: 数据库隔离级别设置为Serializable - 效率低 悲观锁 for update 乐观锁 修改时拼接额外检查查询条件的语句 之后 判断是否修改成功 以此检测是否更新丢失 如果丢失重来 更新多查询少 悲观锁 查询多更新少 乐观锁
!!!!十九、ThreadLocal
Thread内部有map 但是外界无法直接操作通过ThreadLocal可以操作 利用线程内部的map携带数据 由程序执行的上游向下游传递数据 又由于每个Thread有各自的map可以保存各自的对象 可以防止线程安全问题的产生set(obj) - 向当前线程map中存 tl->objget() - 从当前线程map中获取 tl对应的值remove() - 从当前线程map中移除 tl键值对
阅读全文
0 0
- 大数据WEB阶段总结
- 大数据WEB阶段(三)CSS
- 大数据WEB阶段(四)JavaScript
- 大数据WEB阶段(五)jQuery
- 大数据WEB阶段(十九)Threadlocal
- 大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结
- web学习阶段总结(3)大作业小结
- 大数据WEB阶段(一)XML文件的操作
- 大数据WEB阶段 (六)MySql详解(一)
- 大数据WEB阶段(六)MySql详解(二)
- 大数据WEB阶段(九)Servlet+Request
- 大数据WEB阶段(十一)Ajax、URL编码
- 大数据WEB阶段(十四)JavaEE开发模式
- 大数据WEB阶段(十八)数据库事务
- 大数据WEB阶段(二十)更新丢失
- 大数据WEB阶段Spring框架(四)Spring-MVC
- Web开发阶段总结
- web基础阶段总结
- 空间数据库之空间索引
- putty提示Network error:Software caused connection abort
- sed -i 命令使用
- 大数据和人工智能未来发展趋势
- EditText 输入限制
- 大数据WEB阶段总结
- JAVA中super()的用法 转载自https://zhidao.baidu.com/question/275979670.html
- 软件测试 -- 比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系
- (转)在Web项目中使用LiquiBase实现数据库自动更新
- 2030年全球有8亿人被机器人取代,如何成为不被机器人取代的人?
- MyBatis Mapper.xml配置 ResultMap
- 微信开发者工具下载地址
- Android GPS ——AGPS源码分析及配置
- Python编程:从入门到实践