1.基本概念
1.1 前言
web开发:
- web,网页的意思:www.baidu.com
- 静态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
- *.html,*.htm 这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取,联络。
- 静态web存在的缺点
- web页面无法动态更新,所有用户看到的都是同一个页面
- 轮播图,点击特效:伪动态
- JavaScript[实际开发中,它用的最多]
- VBScript
- 它无法和数据库交互(数据无法持久化,用户无法交互)
- web页面无法动态更新,所有用户看到的都是同一个页面
1.4 动态web
页面会动态展示:“Web页面的展示效果因人而异”;
- 动态web存在的缺点
- 假如服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布(停机维护);
- 动态web的优点
- web页面可以动态更新,所有用户看到的都不是同一个页面
- 它可以与数据库交互(数据持久化:注册)
2. web服务器
2.1 相关技术
ASP:
- 微软:国内最早流行的就是ASP;
- 在HTML中嵌入了VB脚本, ASP + COM;
- 在ASP开发中,基本一个页面都有几千行的业务代码,页面极其混乱
- 维护成本高!
- C#
- IIS服务器 (微软生态)
PHP
- PHP开发速度很快,功能很强大,跨平台,代码很简单 (国内70%都是中小型网站, WP)
- 无法承载大访问量的情况(局限性);
JSP/Servlet:
- sun公司主推的B/S架构
- B/S:浏览器和服务器
- C/S:客户端和服务器
- 基于java语言(所有的大公司,或者一些开源的组件,都是用java写的)
- 可以承载三高问题带来的影响;
- 语法像ASP(方便转换,加强市场强度)
2.2、web服务器
服务器是一种被动操作,用来处理用户的一些请求和给用户一些响应信息
IIS
- 微软相关 Windows自带
3.Tomcat
- tomcat的默认端口号为:8080
- mysql:3306
- http:80
- https:443
网站是如何访问的
- 输入一个域名:回车
- 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射;
- 有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
- 没有:去DNS访问(全世界的域名都在这里管理),找到的话就返回
网站的基本机构
- webapps:Tomcat服务器的web目录
- ROOT
- On1on:网站的目录名
- WEB-INF
- classes:java程序
- lib:web应用所依赖的jar包
- web.xml:网站的配置文件
- index.html:默认的首页
- static
- css
- style.css
- js
- img
- css
- ···········
- WEB-INF
4. HTTP
4.1 什么是HTTP
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:html,字符串
- 超文本:图片,音乐,视频,定位,地图
- 默认端口:80
HTTPS:安全的
- 默认端口:443
4.2 两个时代
- http1.0
- HHTP/1.0:客户端可以与web服务器连接,只能获得一个web资源,断开连接
- http2.0
- HTTP/1.1:客户端可以与web服务器连接,可以获得多个web资源,无需断开连接
4.3 HTTP请求
- 客户端---请求----服务器
- 1.请求行
- 请求中的请求方式:GET
- 请求方式:GET,POST,HEAD,DELETE,PUT,TRACT
- get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全但是高效
- post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器URL地址栏显示数据内容,安全但不高效
- 2.消息头
- Accept:告诉浏览器,它所支持的数据类型
- Accept-Encoding:支持的编码格式 GBK UTF-8 GB2312 ISO8859-1
- Accept-Language:告诉浏览器,它的语言环境
- Cache-Control:缓存控制
- Connection:告诉浏览器,请求完成是断开还是保持连接
- HOST:主机
4.4HTTP响应
- 服务器---响应----客户端
- 响应头
- 1.响应体
- Accept:告诉浏览器,它所支持的数据类型
- Accept-Encoding:支持的编码格式 GBK UTF-8 GB2312 ISO8859-1
- Accept-Language:告诉浏览器,它的语言环境
- Cache-Control:缓存控制
- Connection:告诉浏览器,请求完成是断开还是保持连接
- HOST:主机
- Refrush:告诉客户端,多久刷新一次
- Location:让网页重新定位
- 2.响应状态码
- 200:请求响应成功
- 3XX:请求重定向
- 重定向:你重新到我给你的新位置去
- 4XX:找不到资源 404
- 资源不存在
- 5XX:服务器代码错误 500 502:网关错误
6.Servlet
Servlet接口Sun公司有两个默认的实现类:HttpServlet,Servlet
6.1 Servlet简介
- Servlet就是sun公司开发动态web的一门技术
- Sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个步骤
- 编写一个类,实现Servlet接口
- 把开发好的Java类部署到web服务器中
6.2 HelloServlet
1.构建一个普通的Maven项目,删掉里面的src目录,以后我们学习就在这个项目里建立Moudel;这个空工程就是Maven主工程
2.关于Maven父子工程的理解:
父项目中会有
子项目中会有
3.Maven环境优化
1,修改web.xml为最新的
2,将Maven的结构构建完整
4.编写一个Servlet程序
1,编写一个普通类
2,继承HttpServlet类
5,编写Servlet的映射
为什么需要映射:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务在注册所写的Servlet,还需要给他一个浏览器能够访问的路径
6.配置Tomcat
6.3 Servlet原理
Servlet是由web服务器调用,web服务器在收到浏览器请求之后,会:
6.4 Mapping问题
1.一个Servlet可以指定一个映射路径
2.一个Servlet可以指定多个映射路径
3.一个Servlet可以指定通用映射路径
4.指定一些后缀或者前缀等等...
6.优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
6.5 ServletContext
web容器(服务器)在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;
- 共享数据
我在这个Servlet中保存的数据,可以在另一个Servlet里拿到
- 获取初始化参数
- 请求转发
- 读取资源文件
Properties
-
- 在java目录下新建properties
- 在resources目录下新建properties
发现:都被打包到了同一个路径下:classes,我们俗称这个路径为classpath;
思路:需要一个文件流;
配置一个properties配置文件,然后对其进行读取
6.6 HttpServletResponse
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;
- 如果要获取客户端请求过来的参数:找HttpServletRequest
- 如果要给客户端响应一些信息:找HttpServletResponse
1.简单分类
-
- 负责向浏览器发送数据的方法
-
-
- ServletOutputStream getOutputStream() throwS IOException
- PrintWriter getWriter() throws IOException
-
-
- 负责向浏览器发送响应头的方法
- void setCharacterEncoding(String var1);
- void setContentLength(int var1)
- void setContentLengthLong(long var1)
- void setContentLengthType(String var1)
- void setDateHeader(String var1, long var2);
- void setDateHeader(String var1, long var2);
- void setHeader(String var1, String var2);
- void addHeader(String var1, String var2);
- void setIntHeader(String var1, int var2);
- void addIntHeader(String var1, int var2);
- void setStatus(int var1);
- 负责向浏览器发送响应头的方法
2.常见应用
-
- 向浏览器输出信息
- 下载文件
- 要获取下载文件的路径
- 下载的文件名是啥? (使用subString从"/"的下一位开始截取)
- 设置让浏览器能够支持下载我们需要的东西(URLEncoder.encode中文名编码)
- 获取下载文件的输入流
- 创建缓冲区
- 获取OutputStream对象
- 将FileOutputStream流写入到buffer缓冲区
- 使用OutPutStream将缓冲区中的数据输出到客户端
- 实现下载文件
- String realPath = this.getServletContext().getRealPath("/1.png");
- String fileName = realPath.substring(realPath.lastIndexOf("//") + 1);
- response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));
- FileInputStream in = new FileInputStream(realPath);
- int len = 0; byte[] buffer = new byte[1024];
- ServletOutputStream out = response.getOutputStream();
- while((len=in.read(buffer))>0){out.write(buffer,0,len)};
- in.close(); out.close();
- 重定向
标签:web,浏览器,请求,String,服务器,Servlet,JavaWeb From: https://www.cnblogs.com/On1on/p/17077313.html