一、基本概念
1.1 概述
- Web 开发:
- web,网页的意思,如:
- 静态 Web:
- html,css;
- 数据始终不会发生变化;
- 动态 Web:
- 数据始终会发生变化,每个访问者,在不同的时间,不同的地点看到的信息各不相同;
- 技术栈:Servlet/JSP,ASP,PHP;
- Java 中,动态 web 资源,开发的技术统称为 JavaWeb。
1.2 Web 应用程序
- Web 应用程序:可以提供浏览器访问的程序;
- a.html、b.html......这些 Web 资源,可以被外界访问,对外界提供服务;
- 这些 Web 资源,都存在于这个世界的,某一个角落的计算机上;
- URL;
- Web 资源,会被放在同一个文件夹下:
- Web 应用程序 -->Tomcat:服务器;
- Web应用组成:(静态 Web,动态 Web)
- html,css,js;
- jsp,servlet;
- Java 程序;
- jar 包;
- 配置文件 (Properties);
- Web 应用程序编写完毕后,若想提供给外界访问,需要一个服务器,来统一管理。
1.3 静态 Web
- , 都是网页后缀,如果服务器上,一直存在这些资源,可以通过网络,直接进行读取;
- 静态 Web 的缺点:
- Web 页面无法动态更新,所有用户看到都是同一个页面;
- 轮播图,点击特效:伪动态;
- JavaScript(实际开发中,用的最多);
- VBScript;
- 无法和数据库交互(数据无法持久化,用户无法交互)。
- Web 页面无法动态更新,所有用户看到都是同一个页面;
1.4 动态 Web
- 页面动态展示:Web 的页面展示,内容因人而异;
- 动态 Web 的缺点:
- 加入服务器的动态 Web 资源,出现了错误,需要重新编写后台程序,重新发布;
- 停机维护;
- 优点:
- 动态更新,所有用户看到都不是同一个页面;
- 可以与数据库交互(数据持久化:注册、商品信息、用户信息...);
二、Web 服务器
2.1 实现方式
- ASP
- 微软:国内最早流行的就是 ASP;
- 在 HTML 中嵌入了 VB 的脚本,;
- 在 ASP 开发中,业务代码繁多,页面混乱;
- 维护成本高;
- IIS;
- php
- PHP 开发速度快,功能强大,跨平台,代码简单(70% , WP);
- 无法承载大的访问量(局限性);
- JSP/Servlet
- B/S:浏览器和服务器;
- C/S:客户端和服务器:
- Sun 公司主推的 B/S 架构;
- 基于 Java 语言;
- 可以承载 高并发、高可用、高性能 带来的影响;
- 语法类似 ASP;
2.2 Web 应用服务器
- 服务器是被动的操作,用来处理用户的请求,给用户响应信息;
- Web 应用服务器:
- IIS:ASP,Windows 自带;
- Tomcat:
- Apache 下 Jakarta 中的核心项目;
- 最新的 Servlet 和 JSP 规范,能在 Tomcat 中得到体现;
- 技术先进、性能稳定、免费,目前比较流行的 Web 应用服务器;
- 轻量级应用服务器,在中小型系统和并发访问,用户不是很多的场合下使用;
- 开发和调试 JSP 程序的首选;
三、Tomcat
- 相关链接
四、HTTP
4.1 HTTP 概述
- Http(超文本传输协议):简单的 协议,运行在 TCP 之上;
- 文本:html、字符串…. ;
- 超文本:图片、音乐、视频、定位、地图…;
- 端口:80;
- Https:安全的;
- 端口:443;
4.2 两个时代
- http1.0:
- HTTP/1.0:客户端可以与 web 服务器连接后,只能获得一个 web 资源,就断开连接;
- http2.0:
- HTTP/1.1:客户端可以与 web 服务器连接后,可以获得多个 web 资源;
4.3 Http 请求
- 客户端 --- > 发请求(Request)--- > 服务器;
- 百度测试:
- 请求行
- 请求行中的请求方式:GET;
- 请求方式:Get、Post、HEAD、DELETE、PUT、TRACT…;
- Get 请求:能够携带的参数比较少,大小有限制,会在浏览器的 URL 地址栏显示数据内容,不安全,但高效;
- Post 请求:能够携带的参数没有限制,大小没有限制,不会在浏览器的 URL 地址栏显示数据内容,安全,但不高效;
- 消息头
4.4 Http 响应
- 服务器 --- > 响应 --- > 客户端
- 百度测试:
- 响应体
- 响应状态码
- 200:请求响应成功 200;
- 3xx:请求重定向:
- 重定向:重新到给指定新位置去;
- 4xx:找不到资源 404;
- 资源不存在;
- 5xx:服务器代码错误 500;
- 502:网关错误;
五、Maven
- 相关链接
六、Servlet
6.1 Servlet 简介
- Servlet 是 sun 公司,开发动态 Web 的一门技术;
- Servlet 是一个 API 接口,开发 Servlet 程序,只需完成两个步骤:
- 编写类,实现 Servlet 接口;
- 把开发好的 Java 类,部署到 Web 服务器中;
- 实现了 Servlet 接口的 Java 程序叫做,Servlet;
- Serlvet 接口,有两个默认的实现类:、;
6.2 构建 ServLet
- 构建 Maven 项目
- 构建一个普通的 Maven 项目,删掉里面的 src 目录,然后在这个项目里,建立 Moudel(模块),这个空的工程就是 Maven 主工程(父工程);
- 关于 Maven 父子工程的概念:
- 父项目 中,包含子项目(模块)的名称:
- 子项目 中,包含父项目的信息:
- 或在子项目依赖中,添加父项目的依赖:
- 但父项目依赖添加 标签,子项目在显示引用时,会有问题;
- 子项目可以直接继承使用父项目内容(反之不行);
- Maven 环境配置及优化:
- 父项目 中,添加 Servlet 依赖:
- Tomcat10 是 包,而不是 ;
- 修改 Web 项目中的版本号 ;
- 版本,改为与 Tomcat 一致的;
- 修改 JDK 版本;
- 修改其它依赖的版本;
- 将 Maven 的结构搭建完整(补全相关目录);
- 编写 Servlet 程序
- 编写一个普通类:
- 实现 Servlet 接口,直接继承 :
- 中,编写 Servlet 映射:
- 注解方式,创建 Servlet 映射:建议使用注解的方式配置;
为什么需要映射:
- Servlet 是 Java 程序,如通过浏览器访问,浏览器就需要连接 Web 服务器,所以需要在 Web 服务中,要注册 Servlet 程序,并给浏览器提供能够访问的路径;
- 配置 Tomcat 测试程序
- 在 IDEA 中配置 Tomcat 服务;
- 启动测试:
- 注:访问地址为 ;
6.3 Servlet 原理
- Servlet 是由 Web 服务器调用,Web 服务器,收到浏览器请求的执行流程:
6.4 映射路径 Mapping
- 指定一个映射路径:
- 指定多个映射路径:多个路径都指向同一个 Servlet
- 指定通用映射路径: 匹配所有路径 ;
- 默认请求路径:
- 指定后缀或者前缀:
- 优先级问题:
- 指定了固有的映射路径,优先级最高,如果没有,就按默认的处理请求;
6.5 ServletContext 上下文
- Web 容器在启动时,会为每个Web 程序,都创建一个对应的 ServletContext 对象,它代表了当前的 Web 应用:
- 一个 Web 应用,对应一个 ServletContext;
- 共享数据
- 在一个 Servlet 中保存的数据,可以在另外一个 Servlet 中拿到;
- 创建存储数据的 Servlet:
- 创建读取数据的 Servlet:
- 在 中注册 Servlet:
- 获取初始化参数
- 配置信息:
- 获取信息:
- 请求转发
- 请求转发,URL 地址不会发生改变;
- 重定向,URL 地址会发生改变;
-
- 读取资源文件
- 读取 Properties 配置文件:
- 在 目录下新建 文件;
- 在 目录下新建 文件;
- 项目打包时,类和资源文件,都被打包到了 同一个路径下,这个路径称为 ;
- 用文件流,在指定的路径下读取即可;
- 注:项目打包时,资源文件有时导出失败,需要在 中做相应配置:
6.6 HttpServletResponse 响应
- Web 服务器接收到客户端的 http 请求,针对这个请求,分别创建:
- HttpServletRequest 对象:获取客户端 请求 过来的参数;
- HttpServletResponse 对象:给客户端 响应 信息;
- 简单分类
- 负责向浏览器发送数据的方法:
- 负责向浏览器,发送响应头的方法:
- 响应的状态码:
- 常用方法
方法名 说明 response.sendRedirect(URL url) 重定向 setContentType(String type) 设置输出内容(MIME)类型(text/html) setContentLength(int length) 设置响应报文的长度 getWriter( ) 获取输出字符流 addHeader( String name, String value) 添加指定的键值到响应头信息中 containsHeader(String name) 判断响应的头部是否被设置 encodeURL(String url) 编码指定的URL sendError(int sc) 使用指定状态码发送一个错误到客户端 setHeader( String name, String value) 设置指定响应头的值 setStatus(int sc) 给当前响应设置状态
- 下载文件
- 向浏览器输出消息;
- 下载文件实现过程:
- 获取下载文件的路径;
- 下载的文件名;
- 设置浏览器的下载支持;
- 获取下载文件的输入流;
- 创建缓冲区;
- 获取 OutputStream 对象;
- 将 FileOutputStream 流写入到 buffer 缓冲区;
- 使用 OutputStream,将缓冲区中的数据,输出到客户端。
- 验证码功能
- 验证码实现:
- 前端实现;
- 后端实现:需要用到 Java 的图片类,生成一个图片;
- 实现重定向
- 重定向,URL 地址会发生改变:
- Web 资源 收到客户端 请求后, 通知 去访问另一个 Web 资源 ,这个过程叫重定向;
- 常见场景:用户登录
- 重定向路径:
- 表示:http://localhost:8080,与转发的不同;
- 测试:
- 重定向和转发
- 相同点:
- 都会实现页面跳转;
- 不同点:
- 请求转发,URL 地址不会发生改变;307
- 重定向,URL 地址会发生改变;302
- 相同点:
- 简单实现登录重定向
- Tomcat 10 所需依赖:Tomcat 版本 ,
可能遇到的问题:
- JSP 中 out 内置对象红色,输入代码无提示:
- 缺少 和 ;
- JSP 中 out 内置对象红色,输入代码无提示:
- 解决方法:
- 方法 1:更换依赖版本;
- 方法 2:从 Tomcat 安装目录 lib 目录下,复制到工程库里;
- 方法 3:在 IDEA 里直接添加;
- 添加对应版本:
- 添加成功:
- 登录页面:
- servlet:
- 注册 Servlet:
- 跳转页面
6.7 HttpServletRequest 请求
- HttpServletRequest 代表客户端的请求,用户通过 HTTP 协议访问服务器,请求中的所有信息,都会被封装到 HttpServletRequest,通过这个 HttpServletRequest 的方法,获得客户端的所有信息;
- 常用方法:
方法名 含义 String getHeader(String name) 获取请求中的报头信息 Enumeration getHeaderNames() 获取请求中所有报头名的集合 String getContextPath() 获取请求上下文路径(webapp的) String getRequestURI() 获取请求中的 URI String getMethod( ) 获取 HTTP 请求方法,GET 还是 POST getRemoteAddr() 远程 IP,即客户端 IP
- 获取客户端的参数:
方法名 含义
String getParameter(String name) 获取请求(表单)中参数名为 name 的参数值
String[] getParameterValues(String name) 获取请求中(表单)中所有参数名为 name 的参数值的集合(数组) Enumeration getParameterNames( ) 获取请求中所有参数名的集合(枚举 不常用)
- 其它方法:
方法名 说明 setCharacterEncoding("utf-8") 设置请求的编码方式 getLocalAddr() 获取本地 IP,即服务器 IP getLocalName() 获取本地名称,即服务器名称 getLocalPort() 获取本地端口号,即 Tomcat 端口号 getLocale() 用户的语言环境 getProtocol() 协议,http协议 getQueryString() 查询字符串 getRemotePort() 远程端口,即客户端端口 getRemoteUser() 远程用户 getRequestedSessionId() 客户端的 Session 的 ID getRequestURI() 用户请求的 URL getScheme() 协议头,例如 http getServerName() 服务器名称 getServerPort() 服务器端口 getServletPath() Servlet 路径
HttpServletRequest 测试:获取表单信息
- 登录页面
- servlet
- 注册 servlet
getRequestDispatcher 转发的两种方式:
- :
- 可以是相对路径,或绝对路径;
- :
- 只能是绝对路径;
- 获取前端传递的参数
- :一个参数值;
- :多个参数值,数组;
七、Cookie、Session
7.1 会话
- 会话:用户打开浏览器,打开很多超链接,访问多个 Web 资源,关闭浏览器,这个过程可以称之为会话;
- 有状态会话:用户访问服务器,下次再访问时,服务器知道这个用户访问过,即有状态会话;
- 服务器如何知道客户端访问过:
- 服务端给客户端一个信件,客户端下次访问服务端,带上信件就可以; cookie
- 服务器登记客户端信息,下次客户端访问时,由服务器来匹配客户端; seesion
7.2 保存会话的两种技术
- cookie:客户端技术(响应,请求);
- session:服务器技术,把信息或者数据,放在 Session 中;
- 常见应用:网站登录后,下次不用再登录,可以直接访问;
7.3 Cookie
- 从请求中拿到 cookie 信息;
- 服务器响应给客户端 cookie;
- 测试:Cookie
- Cookie 常用方法:
- cookie:一般会保存在本地的用户目录下 appdata;
- cookie 存储上限:
- 一个 Cookie 只能保存一个信息;
- 一个 Web 站点,可以给浏览器发送多个 cookie(最多20个);
- Cookie 大小有限制 4kb;
- 浏览器上限:300 个 Cookie;
- 删除 Cookie:
- 不设置有效期,关闭浏览器,自动失效;
- 设置有效期时间为 0 ;
- Cookie 传递中文数据时乱码,解决方法:编码、解码
7.4 Session(重点)
- 什么是 Session:
- 服务器会给每一个用户(浏览器),创建一个 Seesion 对象;
- 一个 Seesion 独占一个浏览器,只要浏览器没有关闭,这个 Session 就存在;
- 用户登录之后,整个网站都可以访问;
- Session 常用方法:
方法名 说明 getCreationTime():long 返回 Session 的创建时间 getId():String 返回 Session 的唯一 ID getLastAccessedTime():long 返回 Session 的最后活跃时间 getServletContext():ServletContext 获取 Servlet 上下文(Web 服务) getMaxInactiveInterval():int 返回 Session 的超时时间,秒 setMaxInactiveInterval(int interval) 设置 Session 的超时时间,秒 getAttribute(String name):Object 返回 Session 属性 setAttribute(String name, Object value) 设置 Session 属性 getAttributeNames():Enumeration 返回 Session 中存在的属性名 removeAttribute(String name) 移除 Session 属性 invalidate() 注销 isNew():boolean 判断 Session 是否是新创建
- Session 和 Cookie 的区别:
- Cookie 是把用户的数据,写给浏览器,由 浏览器保存(可以多个);
- Session 把用户的数据,写到 用户独占 Session 中(每个浏览器一个Session),服务器端保存(保存重要的信息,减少服务器资源的浪费);
- Session 对象由 服务器创建;
- 使用场景:
- 保存一个登录用户的信息;
- 购物车信息;
- 在整个网站中,经常会使用的数据,将它保存在 Session 中;
Session 测试:
- Servlet 1:存储 Session 的数据;
- Servlet 2:获取 Session 中的数据,并响应(发送)给客户端
- Servlet 3:移除 Session 属性、注销
- 注册 Servlet:;
- 会话自动过期: 配置;
- 多用户访问:
java web 基础
八、JSP
8.1 什么是 JSP
- JSP:,java 服务器端页面,和 Servlet 一样,用于动态Web。
- 特点:
- JSP 类似 HTML;
- 区别:
- HTML 只给用户提供 静态数据;
- JSP 页面中,可以嵌入 JAVA 代码,为用户提供 动态数据;
8.2 JSP原理
分析 JSP 执行的过程:
- JSP 代码层面:查看打包后的文件,没有发生变化;
- 服务器内部分析:
- Tomcat 服务器中有 work 目录;
- IDEA 中使用 Tomcat,会在 IDEA 的 Tomcat 中生产 work 目录:
- Catalina 目录下,生成 java 文件:
结论:
- 浏览器向服务器发送请求,不管访问什么资源,其实都是在访问 Servlet;
- JSP 最终也会被转换成为一个 Java 类;
- JSP 本质上就是 Servlet;
- JSP 的三个方法:
JSP 的执行过程
- 判断请求:
- GET;
- POST;
- 内置一些对象:
- 输出页面前,增加的代码:
- 以上的对象,可以在 JSP 页面中直接使用;
- 流程图:
- JSP 页面输出格式:
- JAVA 代码就会原封不动的输出;
- HTML代码,会被转换为:
8.3 JSP 基础语法
- JSP 在 Java 的基础上,增加了扩充的语法(了解);
- JSP 表达式:
- JSP 脚本片段:
- JSP 脚本片段的再实现:
- JSP 声明:
- JSP 声明,被 编译到 JSP 生成的 Java 类中,其他代码,被生成到 方法中,在 JSP,嵌入 Java 代码即可;
- JSP 的注释: 不会在客户端显示,HTML 的注释,会显示到客户端;
8.4 JSP 指令
- 格式:
- page 指令:
- 定义网页依赖属性,比如脚本语言、error页面、缓存需求等;
- 格式:;
- 通过 配置跳转页面:
- 属性说明:
属性
描述 buffer 指定 out 对象使用缓冲区的大小 autoFlush 控制 out 对象的 缓存区 contentType 指定当前 JSP 页面的MIME类型和字符编码 errorPage 指定当 JSP 页面发生异常时需要转向的错误处理页面 isErrorPage 指定当前页面是否可以作为另一个 JSP 页面的错误处理页面 extends 指定 servlet 从哪一个类继承 import 导入要使用的 Java 类 info 定义 JSP 页面的描述信息 isThreadSafe 指定对 JSP 页面的访问是否为线程安全 language 定义 JSP 页面所用的脚本语言,默认是 Java session 指定 JSP 页面是否使用 session isELIgnored 指定是否执行 EL 表达式 isScriptingEnabled 确定脚本元素能否被使用
- Include 指令
- 静态包含(统一编译):会将两个页面以静态方式编译,合二为一;
- 格式:;
- Taglib 指令
- 用于在 JSP 页面中导入标签库(JSP 标准标签库、第三方、自定义) ;
- 格式:;
8.5 JSP 内置对象及作用域
- 9 大内置对象:
- PageContext:存东西;
- Request:存东西;
- Session 存东西;
- Application 【SerlvetContext】 存东西;
- Response;
- config 【SerlvetConfig】;
- out;
- page,不用了解 ;
- exception;
- 作用域图示:
- 测试:在对象中存值,并测试取值
- 测试:在另一个页面中,取值上个页面的值
对象作用域及应用场景:
- request:客户端向服务器发送请求,产生的数据,用户看完就没用了;
- 比如:新闻;
- session:客户端向服务器发送请求,产生的数据,用户用完一会还有用;
- 比如:购物车;
- application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用;
- 比如:聊天数据;
8.6 JSP 标签、JSTL 标签、EL 表达式
- EL 表达式:
- 获取数据;
- 执行运算;
- 获取 web 开发的常用对象;
- JSP 标签:
- JSTL 标签:
- JSTL 标签库的使用,是为了弥补 HTML 标签的不足;
- 自定义许多标签,标签的功能和 Java 代码一样
- 分类:核心标签、格式化标签、SQL标签、XML 标签;
核心标签(掌握):
- 引用核心标签库的语法:使用前,必须在页面头部引用
- 标签说明:
- JSTL 标签库使用步骤:
- 引入对应的 taglib;
- 使用其中的方法;
- 复制依赖包到 Tomcat lib 目录下,否则会报错:JSTL 解析错误;
标签库添加依赖说明:Tomcat 版本
- 在 文件中,增加依赖,导入标签库依赖;
- 依赖关系图:
- 将导入的 jar 包,复制到 Tomcat 服务器的 目录下:(避免 JSTL 解析错误)
- ;
- ;
- ;
- Tomcat 的 lib 目录:
- 标签测试:
- 标签测试: 、
- 标签测试:
可能遇到的问题
- JavaWeb 项目不生成 target 目录:
- 解决方法:查看链接
九、JavaBean
9.1 实体类
- 实例类:一般和数据中的 表结构一一对应;
- JavaBean 有特定的写法:
- 必须要有一个无参构造;
- 属性必须私有化;
- 必须有对应的 get/set 方法;
9.2 字段映射
- JavaBean 一般用来和数据库的字段做映射(ORM);
- ORM :对象关系映射:
- 表 ---> 类;
- 字段 ---> 属性;
- 行记录 ----> 对象;
- 数据表示例:people
id name age address 1 张三 20 北京 2 李四 18 上海 3 王五 22 深圳
- 测试:
十、MVC 三层架构
- MVC:
- :模型,指实体类对应数据库中的字段;
- :视图,指 JSP 页面;
- :控制器,指 Servlet,负责跳转页面;
10.1 以前的架构
- Servlet 和 JSP 都可以写 Java 代码;
- Servlet 专注于处理请求,以及控制视图跳转;
- JSP 专注于显示数据;
- 用户直接访问控制层,控制层,可以直接操作数据库;
- Servlet 的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码;
- Servlet --> CRUD --> 数据库;
- 弊端:程序臃肿,不利于维护;
- 架构:没有什么是加一层解决不了的,如果不行,再加一层;
10.2 MVC 三层架构
- 架构图:
- Model:模型
- 业务处理:业务逻辑(Service);
- 数据持久层:CRUD(Dao);
- View:视图
- 展示数据;
- 提供链接发起 Servlet 请求 (a,form,img…)
- Controller(Servlet):控制器
- 接收用户的请求:(req:请求参数、Session 信息….);
- 交给业务层处理对应的代码;
- 控制视图的跳转;
十一、Filter(重点):过滤器
11.1 Filter 概述
- Filter:过滤器,过滤网站数据;
- 应用:
- 处理中文乱码;
- 登录验证...;
11.2 Filter 开发步骤
- 导包:
- 注意:不要导错包,选 Servlet 包;
- 注意:不要导错包,选 Servlet 包;
- 编写过滤器:
- 实现 Filter 接口, 重写对应的方法;
- 在 中配置 Filter:
- 也可以通过注解方式:
十二、监听器 Listener(了解)
- 实现监听器的接口(有 N 种);
- 编写一个监听器,实现监听器的接口:
- JSP 页面获上下文属性:
- 中注册监听器:或用注解方式:
十三、过滤器、监听器常见应用
13.1 监听器在 GUI 中的应用
- GUI 基础
- 实例:监听器在 GUI 编程中使用;
13.2 Filter 实现权限拦截:
- 过滤器在用户登录中的使用;
- 用户登录后,向 Sesison 中放入用户的数据;
- 进入主页时,判断用户是否已经登录,未登录,进行页面跳转;
测试:
- JSP 页面:
- 常量类:便于后期管理
- Servlet:登录
- Servlet:注销
- 过滤器:
- 注册: 配置,或通过注解;
过滤器实现,不同用户登录不同页面
- 思路:建立不同等级用户文件夹及页面,如:VIP1、VIP2、VIP3...;
- 过滤器里设置,不同等级对应的跳转页面;
十四、JDBC
- JDBC 基础
14.1 实验环境搭建
- 创建 MySQL 数据库:相关链接
- 导入 JDBC 依赖:
- IDEA 中连接数据库:相关链接
14.2 JDBC 固定步骤
- 相关链接
- 加载驱动;
- 连接数据库,代表数据库;
- 向数据库发送 SQL 的对象 Statement : CRUD;
- 编写 SQL(根据业务,不同的 SQL);
- 执行 SQL;
- 关闭连接;
14.3 事务
- 相关链接
14.4 Junit 单元测试
- Junit 依赖:
- 使用方式:
- @Test 注解,只有在方法上有效;
- 只要加了这个注解的方法,不需要 main 方法,就可以直接运行;
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/2315.html