JavaWeb

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
    • 它无法和数据库交互(数据无法持久化,用户无法交互)

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

网站是如何访问的

  1. 输入一个域名:回车
  2. 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射;
    1. 有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
    2. 没有:去DNS访问(全世界的域名都在这里管理),找到的话就返回

网站的基本机构

  • webapps:Tomcat服务器的web目录
    • ROOT
    • On1on:网站的目录名
      • WEB-INF
        • classes:java程序
        • lib:web应用所依赖的jar包
        • web.xml:网站的配置文件
      • index.html:默认的首页
      • static
        • css
          • style.css
        • js
        • img
      • ···········

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.常见应用

    1. 向浏览器输出信息
    2. 下载文件
      1. 要获取下载文件的路径
      2. 下载的文件名是啥? (使用subString从"/"的下一位开始截取)
      3. 设置让浏览器能够支持下载我们需要的东西(URLEncoder.encode中文名编码)
      4. 获取下载文件的输入流
      5. 创建缓冲区
      6. 获取OutputStream对象
      7. 将FileOutputStream流写入到buffer缓冲区
      8. 使用OutPutStream将缓冲区中的数据输出到客户端
    3. 实现下载文件
      1. String realPath = this.getServletContext().getRealPath("/1.png");
      2. String fileName = realPath.substring(realPath.lastIndexOf("//") + 1);
      3. response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));
      4. FileInputStream in = new FileInputStream(realPath);
      5. int len = 0; byte[] buffer = new byte[1024];
      6. ServletOutputStream out = response.getOutputStream();
      7. while((len=in.read(buffer))>0){out.write(buffer,0,len)};
      8. in.close();     out.close();

      4.实现验证码功能

        

 

      5.实现重定向

      

      B一个web资源收到客户端A请求后,B他会通知A客户端去访问另一个web资源C,这个过程叫做重定向

      常见场景:

      • 用户登录
      •  重定向和转发的区别

      • 相同点
        • 页面都会跳转

         不同点

        • 重定向的时候,url地址栏会发生变化
        • 请求转发的时候,url不会发生变化 

           

 

 

 

 6.7 HttpServletRequest

 HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息;

 

 

1.获取参数及请求转发

 

 

      • 相同点
        • 页面都会跳转

         不同点

        • 重定向的时候,url地址栏会发生变化
        • 请求转发的时候,url不会发生变化 

7.Cookie、Session

7.1会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话:(打开浏览器到关闭浏览器这一整个过程)

有状态会话:

如何证明你去过超市

    你            超市

1.发票      超市开发票

2.学校登记  超市监控

如何证明你访问过该网站

   客户端                                   服务端

1.服务端给客户端一个信件   客户端下次访问服务端带上信件就可以了      cookie

2.服务器登记你来过了          下次你来的时候我来匹配你

7.2、保存会话的两种技术

cookie

  • 客户端技术(响应,请求)

session

  • 服务器技术,利用这个技术,我们可以把信息或者数据放在session中(保存会话)

  常见功能:网站登录后,你下次不用再登录了

7.3、Cookie

  1. 从请求中拿到cookie信息
  2. 服务器响应给客户端cookie

   Cookie[] cookies = req.getCookies;  //获得cookie

   cookie.getName();   //获得cookie中的key;

   cookie.getValue();   //获得cookie中的value

   new Cookie("lastLoginTime",System.currentTimeMillis()+"");   //创建一个cookie

   cookie.setMaxAge(24*60*60);    //设置cookie的有效期

   resp.addCookie(cookie);     //响应给客户端一个cookie

 

  cookie:一般会保存再本地的用户目录下appdata

一个网站cookie是否存在上限值

  • 一个Cookie只能保存一个信息;
  • 一个web站点可以给浏览器发送多个cookie,最多存放200个cookie
  • Cookie大小有限制4kb
  • 300个cookie浏览器上限

删除Cookie

  • 不设置有效期,关闭浏览器,自动失效;
  • 设置有效期为0,cookie不存在

tip:编码问题   

  编码:URLEncoder.encode("中文","utf-8");      解码:URLEncoder.decode("中文","utf-8");

7,4、Session(重点)

什么是session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象
  • 一个session独占一个浏览器,只要浏览器没有关闭,这个session就一直存在
  • 用户登录后,整个网站它都可以访问

Session和Cookie的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存
  • Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息,减少服务器的负担)
  • Session对象由服务创建

使用场景:

  • 保存一个登录用户的信息
  • 购物车信息
  • 再整个网站中经常使用的数据

 

使用Session:

会话自动过期:web.xml配置

 

posted @ 2023-02-01 21:41  On1on  阅读(12)  评论(0)    收藏  举报