JavaWeb学习笔记 1

桌桌 2022-8-16 259 8/16

学习视频来源:【狂神说Java】JavaWeb入门到实战

1 基本概念

web开发
  • 静态web:

    • html,css

    • 提供给所有人看的数据始终不会发生变化

  • 动态web:

    • 几乎所有的网页都是动态网页

  • 提供给所有人看的数据始终会发生变化,每个人在不同时间不同地点看到的信息各不相同

    • 技术栈:Servlet/JSP,ASP,PHP

在Java中,动态web资源开发的技术统称为JavaWeb;

web应用程序:可以提供浏览器访问的服务
  • a.html、b.html......多个web资源,可以被外界访问,对外界提供服务;

  • 能访问到的任何一个资源都是存在于某个计算机上

  • URL,统一资源定位符

  • 这些统一的web资源会被放在同一个文件夹下,web应用程序-->依赖于一个tomcat:服务器

  • 一个web应用由多个部分组成(静态web,动态web)

    • html,css,js

    • jsp,servlet

    • java程序

    • jar包

    • 配置文件(properties)

web应用程序编写完毕后,如果想要提供给外界访问,则需要一个服务器来进行统一管理;

静态web
  • *.htm,*.html,这些都是网页的后缀,如果服务器上一直存放着这些文件,那么我们就可以通过网络读取

JavaWeb学习笔记 1

  • 静态web存在的缺点

    • Web页面无法动态更新,所有用户看到的都是同一个页面,做不到登录、交互等功能

      • 轮播图,点击特效:伪动态

      • Javascript(实际开发中用的最多)

      • VBScript

    • 它无法和数据库交互(数据无法持久化,用户无法交互)

以百度为例,可以看到

JavaWeb学习笔记 1

动态web

页面会动态展示:“Web的页面展示的效果会因人而异”;

JavaWeb学习笔记 1

动态web存在的缺点

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

动态web存在的优点

  • web页面可以动态更新,根据用户情况提供不同的页面

  • 它可以与数据库交互(动态web资源部分是用java写的,可以使用JDBC连接到数据库)这样就可以做数据持久化:用户进行注册,商品信息,用户信息...

JavaWeb学习笔记 1

2 web服务器

相关技术

ASP:

  • 微软做的,国内流行的最早的就是ASP

  • 在HTML中嵌入了VB脚本,ASP+COM

  • 在ASP的开发中,基本一个页面中html文件中还会嵌入java代码,而且一个页面中都有几千行的代码,页面及其混乱

  • 维护成本高,重构成本高

  • 主要使用的是C#语言

  • 使用的是IIS服务器

PHP:

  • PHP开发速度很快,功能很强大,能够跨平台,代码很简单(大部分网站使用PHP网站)

  • 但是无法承载大访问量的情况(局限性)

JSP/Sevlet:

  • sun公司主推的B/S架构

  • 基于Java语言的(所有的大公司,或者一些开源的组件,都是用java写的)

  • 可以承载三高问题(高并发、高可用、高性能)带来的影响

  • 语法像ASP,加强了市场的通用度

web服务器

是一种被动的操作,用来处理用户的一些请求和给用户一些响应的信息

IIS

微软的,ASP...windows中自带的

Tomcat

JavaWeb学习笔记 1

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。Tomcat最新版本为10.0.14

3 tomcat

tomcat安装

JavaWeb学习笔记 1

直接下载解压到自己的环境中就好

JavaWeb学习笔记 1

启动、关闭tomcat

在bin目录下双击

startup.bat 启动

shutdown.bat 关闭

注意,关闭启动后的窗口也会导致关闭

测试启动:

JavaWeb学习笔记 1

可能遇到的问题:

  • Java环境变量没有设置

  • 闪退问题:需要配置兼容性

  • 乱码问题:配置文件中设置(尽量不去改)

配置

JavaWeb学习笔记 1

其中是各种连接之类的配置

  • 可以配置启动的端口号

    • tomcat默认为:8080

    • mysql:3306

    • http:80

    • https:443

    ...
    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

  • 可以配置主机的名称

    • 默认的主机名为:localhost也就是127.0.0.1

    • tomcat的默认网站存放位置为:webapps

    ...
   <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
       ...

如果将其中的localhost改成www.wangyuanzhuo.top,使用www.wangyuanzhuo.top网址将无法访问到本机的tomcat网页

JavaWeb学习笔记 1

但是在hosts文件进行修改之后却能够访问

JavaWeb学习笔记 1

测试如下:

在网址栏中输入www.wangyuanzhuo.com:8080,可以打开tomcat

JavaWeb学习笔记 1

此时我并没有购买域名。

由此引出一个问题:

网站是如何进行访问的?

  1. 输入一个域名

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

    • 如果有:直接返回映射对应的ip地址

      例如在上例中:

      127.0.0.1               www.wangyuanzhuo.top

      可以直接映射到127.0.0.1

    • 如果没有:就去DNS中找,找到就返回,找不到就返回找不到

JavaWeb学习笔记 1

发布一个网站

可以在Apache Tomcat Examples中进行查看示例

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

网站应有的结构

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

4 Http

什么是http

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

它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出。

两个时代
  • http/1.0:客户端可以与web服务器连接后,只能获得一个资源

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

http请求
  • 客户端---发请求(Request)---服务器

    请求 URL: https://www.baidu.com/      请求地址
    请求方法: GET           get/post方法
    状态代码: 200 OK        状态码200
    远程地址: 183.232.231.174:443
    引用站点策略: origin-when-cross-origin

    请求行中的请求方式:GET

    请求方式Get,Post,HEAD,DELETE,PUT...

    • get:一次请求可以携带的参数比较少,大小有限制,会在浏览器中的URL地址栏中显示数据内容,不安全,但是高效

    • post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器中的URL地址栏中显示数据内容,安全,但是不高效

  • 消息头

    Accept: 告诉浏览器所支持的数据类型
    Accept-Encoding: 支持的编码格式    GBK UTF-8 GB2312    
    Accept-Language: 浏览器的语言环境
    Cache-Control: 缓存控制
    Connection: 告诉浏览器请求完后是断开还是保持连接
    HOST:主机

    在百度中这些信息如下所示

    Accept: text/html
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
    Cache-Control: max-age=0
    Connection: keep-alive
    Host: www.baidu.com

http响应
  • 服务器---响应---客户端

    Bdpagetype: 1
    Bdqid: 0x81da415200058c8a
    Cache-Control: private      缓存控制
    Connection: keep-alive      连接
    Content-Encoding: gzip      编码
    Content-Type: text/html;charset=utf-8   类型
    Date: Sat, 13 Aug 2022 05:16:30 GMT
    Expires: Sat, 13 Aug 2022 05:16:07 GMT
    Server: BWS/1.1
    Set-Cookie: BDSVRTM=0; path=/
    Set-Cookie: BD_HOME=1; path=/
    Set-Cookie: H_PS_PSSID=36556_36466_36642_37112_36413_36954_34813_36917_36919_36570_37078_37161_37136_37055_26350_22158; path=/; domain=.baidu.com
    Strict-Transport-Security: max-age=172800
    Traceid: 166036779005734059629356862996259114122
    Transfer-Encoding: chunked
    X-Frame-Options: sameorigin
    X-Ua-Compatible: IE=Edge,chrome=1
  • 响应体

    Accept: 告诉浏览器所支持的数据类型
    Accept-Encoding: 支持的编码格式	GBK UTF-8 GB2312	
    Accept-Language: 浏览器的语言环境
    Cache-Control: 缓存控制
    Connection: 告诉浏览器请求完后是断开还是保持连接
    HOST:主机
    Refresh:告诉客户端,多久刷新一次
    Location:让网页重新定位
  • 响应状态码

    200:请求响应成功

    3xx:请求重定向

    • 重定向:重新到一个新的位置

    4xx:资源不存在 404

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

常见面试题:

当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?

5 maven

为什么要学习这个技术?

  1. 在javaweb开发中,需要使用大量的jar包,我们需要手动去导入

  2. 如何能够让一个东西自动帮我们导入和配置jar包

    由此maven诞生了

maven就是一个项目架构管理工具,可以用来管理整个一个项目

核心思想:约定大于配置

  • 有约束,不要去违反

maven会规定好该如何去编写Java代码,必须按照这个规范来

下载:

JavaWeb学习笔记 1

下载解压即可。

配置环境变量

如下配置

  • M2_HOME maven目录下的bin目录

  • MAVEN_HOME maven的目录

  • 在系统的path中配置 %MAVEN_HOME%\bin

在命令行中检验是否安装成功

JavaWeb学习笔记 1

修改配置文件,使用阿里云镜像

为了加速下载配置一下镜像

JavaWeb学习笔记 1

	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
		<name>Nexus Aliyun</name>
		<url>https://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
本地仓库

建立一个本地仓库:localRepository

先在maven目录下新建一个文件夹

JavaWeb学习笔记 1

再在conf目录下的setting文件进行修改:

JavaWeb学习笔记 1

此时本地仓库地址指向到我们设置的位置

在idea中使用maven
  • 注意新版的IDEA与老版本的IDEA有些不同,我使用的是IDEA2022.3版本

  1. 启动IDEA

  2. 创建一个Maven项目

JavaWeb学习笔记 1

进入项目之后打开settings修改:

JavaWeb学习笔记 1

Maven home path:自己安装的maven的位置

User setting file:用来配置去哪儿下载依赖的jar包的setting.xml文件

Local repository:自己下载的jar包存放的本地仓库路径

IDEA安装有自己的maven,但是可以做的事比较少,使用我们自己安装的maven可以自己操纵

  1. 等待项目构建完成

在项目构建的日志文件中下载完依赖之后,出现

[INFO] BUILD SUCCESS

(手残把这个给叉掉了emmm...)

JavaWeb学习笔记 1

  1. 查看下载的jar包

JavaWeb学习笔记 1

  1. IDEA中的maven设置

也就是在创建第二步那儿的创建。

ps:2022以前的版本常常会出现这样的问题:

IDEA中配置Maven,经常在项目创建完成之后idea的settings中又默认用idea自带的maven,如果出现该问题,在settings处修改回来即可


不建议自动导入文档,文件比较大会比较慢

JavaWeb学习笔记 1

  1. 此时Maven在IDEA中的配置和使用就OK了

创建一个普通的Maven项目

JavaWeb学习笔记 1

一个干净的maven项目结构如下所示

JavaWeb学习笔记 1

此处只有在web应用下才有(也就是之前创建的那个)

JavaWeb学习笔记 1

标记文件夹

在maven项目中由于缺少一些目录(和第二个普通的maven项目作比较),可以将新建的目录设置为相应的目录。

JavaWeb学习笔记 1

在Project Struture中也可以进行相应设置。

在IDEA中配置Tomcat

edit configure中没有找到tomcat server(由于重装了系统),在设置中安装Smart Tomcat插件然后重启即可。

老版本的tomcat server配置相对于smart tomcat来说麻烦许多。

JavaWeb学习笔记 1

然后在tomcat server进行设置就可以正常进行下一步了。

JavaWeb学习笔记 1

  • 我们访问一个网站,需要指定一个文件夹的名字,在此处Deployment Directory自动选择了webapp目录

  • Context Path可写可不写,不写的情况下默认访问路径是localhost:8080,写成如下图所示,默认访问路径是localhost:8080/javaweb-01-maven

    这个过程叫做:虚拟路径映射

JavaWeb学习笔记 1

配置好后启动即可,如下图所示

JavaWeb学习笔记 1

打开网页查看

JavaWeb学习笔记 1

验证是虚拟路径,只需要修改一下之前配置的Context Patn,如下图所示:

JavaWeb学习笔记 1

Pom文件

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

maven操作栏

JavaWeb学习笔记 1

项目依赖中是一个个的jar包


遇到没有找到target的问题

在其中发现项目目录下没有找到target目录,因此查找了一下问题

JavaWeb学习笔记 1

将排除的文件叉掉后,然后点击apply,然后按照下图重新加载项目

JavaWeb学习笔记 1

安装maven

JavaWeb学习笔记 1

此时就有了target文件夹。


以下是pom.xml文件的内容

<!--Maven版本和头文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
<!--  这里就是我们刚才配置的GAV-->
  <groupId>org.zhuozhuo</groupId>
  <artifactId>javaweb-01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--Package:项目的打包方式
  jar:java应用
  war:JavaWeb应用
  -->
  <packaging>war</packaging>
  
  <name>javaweb-01-maven Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
<!--  项目依赖-->
  <dependencies>
<!--    具体依赖的jar包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
<!--  项目构建用的东西,插件等-->
  <build>
    <finalName>javaweb-01-maven</finalName>
  </build>
</project>

与maven管理栏中对应关系

JavaWeb学习笔记 1

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

在bulid下加一个resource

<!--    在build中配置resource,来防止我们资源导出失败的问题-->
    <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>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

    </build>
maven仓库的使用

官网 Maven Repository: Search/Browse/Explore (mvnrepository.com)

搜索需要的依赖,查看使用人数,其中的包是否符合我们需要的要求。

JavaWeb学习笔记 1

如下图所示,尽量选择使用人数比较多的版本。点击版本号进入下一步操作

JavaWeb学习笔记 1

可以下载jar包,也可以复制maven的那个依赖代码

- THE END -

桌桌

8月16日15:45

最后修改:2022年8月16日
0

非特殊说明,本博所有文章均为博主原创。

共有 6 条评论

  1. bitcoin

    Anyone from any system, any age, and budgetary standing can take an intrigue, if the said host or event facilitator see their capacity. Damien Moock

  2. king putin

    There is evidently a lot to realize about this. I consider you made certain nice points in features also. Oscar Piersiak

  3. Loveme

    Great article. I am experiencing some of these issues as well.. Hobert Woodfolk

  4. bitcoin

    Really informative blog article. Thanks Again. Really Great. Jerrod Bambaci

  5. Loveme

    As usual liberals are flaming hypocrites always playing political games;;these anarchists should be rounded up and sent to GITMO. Don Holsomback

  6. bahis oyna

    I see something truly interesting about your site so I bookmarked . Jarred Giarrusso