web应用程序;web服务器;访问网站过程;Tomcat;发布网站;http;Maven;servlet;MVC

1. 基本概念

静态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,这网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。
    在这里插入图片描述
    静态web存在的缺点:
  1. web页面无法动态更新,所有用户看到都是同一个页面
    *. 轮播图,点击特效:伪动态
    *. Javascript [实际开发中它用得最多]
    *. VBScript
  2. 他无法和数据交互(数据无法持久化,用户无法交互)

1.4 动态web

页面会动态展示:“Web的页面展示的效果因人而异”
在这里插入图片描述
动态Web存在的缺点:

  • 加入服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布:
    • 停机维护

动态Web存在的优点:

  • Web页面可以动态更新,所有用户看到都不是同一个页面
  • 他可以与数据库交互(数据持久化:注册,商品信息,用户信息。。)
    在这里插入图片描述

2. web服务器

2.1 技术讲解

ASP

  • 微软:国内最早流行的就是ASP
  • 在HTML中嵌入VB的脚本,ASP+COM
  • 在ASP开发中,基本一个页面都有几千行的业务代码,页面及其混乱,混有java代码
<h1>
  <h1> </h1>
   <h1>
      <h1>
      <%
      System.out.println("hello");
      %>  
      </h1>
   </h1>
</h1>
  • C#
  • IIS

php

  • PHP开发速度很快,功能很强大,跨平台,代码很简单(70%的网站,wp)
  • 无法承载大访问量的情况(局限性)

JSP/Servlet

  • sun公司主推的B/S架构
  • 基于Java语言的(所有的大公司,或者一些开源的组件,都是用java写的)
  • 可以承载三高问题带来的影响(高并发,高可用,高性能);
  • 语法像ASP,加强原有市场强度;

2.2 web服务器

服务器是一种被动的操作,用来处理用户的一些请求和给用户一些相应信息;

IIS
微软的:ASP。。。windows中自带的
Tomcat
Tomcat是Apache 软件基金会的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,是最佳选择
而Tomcat 实际上运行JSP 页面和Servlet。目前Tomcat最新版本为10.0.5。

3. Tomcat

在这里插入图片描述
在下载后的bin文件中startup.bat为启动,shutdown.bat为关闭

启动之后的访问测试:http://localhost:8080/

可能遇到的问题:

  1. java环境变量没有配置
  2. 闪退问题:需要配置兼容性
  3. 乱码问题:配置文件中设置

服务器核心配置文件:conf–>server.xml
可以配置启动的端口号:

  • tomcat的默认端口号为:8080
<Connector port="8080" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
  • mysql:3306
  • http:80
  • https:443
    可以配置主机的名称
  • 默认的主机名为:localhost->127.0.0.1
  • 默认网站应用存放的位置为:webapps
<Host name="localhost" autoDeploy="true" unpackWARs="true" appBase="webapps">

一个网站访问的过程

谈谈一个网站是如何进行访问的

  1. 输入一个域名;回车

  2. 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射

    1. 有:直接返回对应的ip地址,在这个地址中,有我们需要访问的web程序,可以直接访问
    127.0.0.1          www.hehe.com
    
    1. 没有:去DNS服务器找,找到的话就返回,找不到就返回页面找不到
      在这里插入图片描述

    在这里插入图片描述

发布一个web网站

  • 将自己写的网站,放到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问了

网站应该有的结构:

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

4.HTTP

HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。

  • 文本:html,字符串…
  • 超文本:图片,音乐,视频,定位,地图…
  • 80

Https:安全的

  • 443

两个时代

  • http/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
  • http/1.1:客户端可以与web服务器连接后,可以获得多个web资源

Http请求

  • 客户端–发请求(request)—服务器
    百度:
Request URL: https://www.baidu.com/           请求地址
Request Method: GET                                 get方法/post方法
Status Code: 200 OK                                状态码:200
Remote Address: 220.181.38.150:443            
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9     语言
Cache-Control: max-age=0
Connection: keep-alive

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:主机。。

请求报文
重点是格式和参数

行         POST  /s?ie=utf-8     HTTP/1.1      
头         Host:  lol.com                 (注意这里的格式 都是名字+:+空格+内容)
             Cookie:  name=lianmeng
             Content-type:  application/x-www-form-urlencoded
             User-Agent:  chrome  83
空行
体         username=admin&password=admin  (如果是get,这里是空的,如果是post,这里可以不为空)

Http相应

  • 服务器—相应—客户端
    百度:
Cache-Control: private               缓存控制
Connection: keep-alive                    链接
Content-Encoding: gzip                 编码
Content-Type: text/html            类型

1.相应体

Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持那种编码格式   GBK    UTF-8   GB2312  ISO8859-1
Accept-Language: 告诉浏览器,他的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求为你城市断开还是保持连接
HOST:主机。。
Refresh:告诉客户端,多久刷新一次
Location:让网页重新定位

2.相应状态码
200:请求响应成功
3xx:请求重定向

  • 重定向:你重新到我给你的新位置去

4xx:找不到资源 (如:404)

  • 资源不存在

5xx:服务器代码错误 (如:500,502(网关错误))

响应报文

行         HTTP/1.1   200  OK
头         Content-Type:  text/html;charset=utf-8
             Content-length:  2048
             Content-encoding:gzip
 空行
 体        <html>
                    <head>
                    </head>
                    <body>
                       <h1>呵呵</h1>
                    </body>
             </html>

我们平时在向服务端发送请求的时候,服务端给我们返回的结果就包含这四部分,HTML的内容会放在响应体当中,浏览器在接到结果之后,会把响应体结果提取出来,做一个解析,再进行渲染展示出来

5.Maven

1.在javaweb开发中,需要使用大量的jar包,我们手动去导入
2.如何能够让一个东西自动帮我导入和配置这个jar包
由此,maven诞生

5.1Maven项目架构管理工具

我们目前用它来就是方便导入jar包的!
Maven的核心思想:约定大于配置

  • 有约束,不要去违反

Maven会规定好你该如何编写我们的java代码,不需按照这个规范来

安装maven


更改conf->setting里的配置,新增一个maven-repo文件夹

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
  <localRepository>D:\JAVA\IDEA\IDEA anzhuang\idea_2020\idea_Maven\apache-maven-3.8.1\maven-repo</localRepository>


<mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

在idea中创建MavenWeb项目

在这里插入图片描述
。。。省略建立项目的过程

注意IDEA项目创建成功后看一眼Maven的配置
在这里插入图片描述


创建一个普通的maven项目
这里不勾选,直接next
在这里插入图片描述
在这里插入图片描述
这是简介的MAVEN项目
在这里插入图片描述
这是web应用的复杂的maven项目:
在这里插入图片描述
新增两个文件夹之后改变样式
在这里插入图片描述

pom文件

pom.xml是Maven的核心配置文件

在这里插入图片描述
搜索Maven仓库,选取要导入的jar包,点进去,复制Maven一栏的内容复制到dependencies中,然后他就会自动帮我们下载jar包

Maven的高级之处在于,他会帮你导入这个jar包所以来的其他jar包

Maven由于他的约定大于配置,我们之后可能会遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:

<build>
    .......
      <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.xml</exclude>
             </excludes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>    //让在这个目录之下可以包含。properties和。xml文件
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
    ......
</build>

6.Servlet

6.1 简介

  • servlet是sun公司开发动态web的一门技术
  • Sun在这些API中提供一个接口叫做:Servlet,如果想开发一个Servlet程序,只需要完成两个步骤:
    1. 编写一个类,实现Servlet接口
    2. 把开发好的Java类部署到web服务器中

把实现了Servlet接口的Java程序叫做Servlet
Servlet接口中Sun公司有两个默认的实现类:HttpServlet,GenericServlet

6.2 helloservlet

1.构建一个普通的Maven项目,删除多余的东西(src目录),以后就在这个项目里建立Module,这个空工程就是Maven的主工程。(将依赖导入之后,展开其他的学习由于还在主工程里建立所以就不用重复的导入了)

2.关于Maven父子工程的理解:
父项目中的pom。xml会有

<modules>
       <module>servlet-01</module>
   </modules>

子项目会有

<parent>
       <artifactId>Javaweb-02-servlet</artifactId>
       <groupId>com.bai</groupId>
       <version>1.0-SNAPSHOT</version>
   </parent>

父项目中的jar包 子项目可以直接使用
3.Maven环境优化

  1. 修改web.xml为最新的
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                     http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        version="4.0"
        metadata-complete="true">
        </web-app>
  1. 将maven的结构搭建完整

4.编写一个servlet程序
1. 编写一个普通类
2. 实现Servlet接口,这里我们直接继承HttpServlet

public class HelloServlet extends HttpServlet {

    //由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletOutputStream outputStream = resp.getOutputStream();
        PrintWriter writer = resp.getWriter(); //响应流
        writer.print("hello");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        doGet(req,resp);
    }
}

5.编写Servlet的映射
为什么要映射:我们写的事Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径
web.xml:

<!--注册Servlet-->
        <servlet>
                <servlet-name>hello</servlet-name>
                <servlet-class>com.bai.servlet.HelloServlet</servlet-class>
        </servlet>  
        <servlet-mapping>
                <servlet-name>hello</servlet-name>
                <url-pattern>hello</url-pattern>
        </servlet-mapping>

6.配置tomcat
7.启动测试

8.JSP(不全)

8.1什么是JSP

java Server Pages:java服务器端页面。也和Servlet一样,用于动态Web技术!
最大的特点:

  • 写JSP就是像在写HTML
  • 区别:
    • HTML只给用户提供静态的数据
    • JSP页面中可以嵌入JAVA代码,为用户提供动态数据;

8.2 JSP的原理

思路:JSP是怎么执行的

  • 代码层面没问题
  • 服务器内部工作
    tomcat中有一个work目录;
    IDEA中使用Tomcat的会在IDEA的tomcat中产生一个work目录

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会被转换成为Java类

JSP本质上就是一个Servlet。

10. MVC

在这里插入图片描述

什么是MVC:Model view Controller 模型、视图、控制器

Servlet和JSP都可以写Java代码;为了易于维护和使用;Servlet专注于处理请求,以及控制试图跳转,JSP专注于显示数据

10.1 早些年的架构

在这里插入图片描述
用户直接访问控制层,控制层就可以直接操作数据库

servlet--CRUD(增删改查)-->数据库
弊端:程序比较臃肿,不利于维护(servlet的代码中:处理请求、响应、试图跳转、处理JDBC、处理业务代码、处理逻辑代码,把JDBC的代码也歹写到servlet的处理请求里)

架构: 没有什么是加一层解决不了的
程序员调用---JDBC---MySQL Oracle SqlServer 。。。

10.2 MVC三层架构

在这里插入图片描述
Model

  • 业务处理:业务逻辑(Service)
  • 数据持久层:CRUD (增删改查) (dao)

View

  • 展示数据
  • 提供链接发起Servlet请求(a,from,img…)

Contorller

  • 接受用户的请求:(req:请求参数、Session信息。。。)
  • 交给业务层处理对应的代码
  • 控制视图的跳转
登录--->接受用户的登录请求--->处理用户的请求(获取用户登录的参数,username,password)--->
交给业务层处理登录业务(判断用户名密码是否正确,事物)--->Dao层查询用户名和密码是否正确-->数据库
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值