学习视频来源:【狂神说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,这些都是网页的后缀,如果服务器上一直存放着这些文件,那么我们就可以通过网络读取
-
静态web存在的缺点
-
Web页面无法动态更新,所有用户看到的都是同一个页面,做不到登录、交互等功能
-
轮播图,点击特效:伪动态
-
Javascript(实际开发中用的最多)
-
VBScript
-
-
它无法和数据库交互(数据无法持久化,用户无法交互)
-
以百度为例,可以看到
动态web
页面会动态展示:“Web的页面展示的效果会因人而异”;
动态web存在的缺点
-
加入服务器的动态web资源出现了错误,需要我们重新编写我们的后台程序,重新发布,这也就意味着需要停机维护
动态web存在的优点
-
web页面可以动态更新,根据用户情况提供不同的页面
-
它可以与数据库交互(动态web资源部分是用java写的,可以使用JDBC连接到数据库)这样就可以做数据持久化:用户进行注册,商品信息,用户信息...
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
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安装
直接下载解压到自己的环境中就好
启动、关闭tomcat
在bin目录下双击
startup.bat 启动
shutdown.bat 关闭
注意,关闭启动后的窗口也会导致关闭
测试启动:
可能遇到的问题:
-
Java环境变量没有设置
-
闪退问题:需要配置兼容性
-
乱码问题:配置文件中设置(尽量不去改)
配置
其中是各种连接之类的配置
-
可以配置启动的端口号
-
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网页
但是在hosts文件进行修改之后却能够访问
测试如下:
在网址栏中输入www.wangyuanzhuo.com:8080,可以打开tomcat
此时我并没有购买域名。
由此引出一个问题:
网站是如何进行访问的?
-
输入一个域名
-
检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名的映射;
-
如果有:直接返回映射对应的ip地址
例如在上例中:
127.0.0.1 www.wangyuanzhuo.top
可以直接映射到127.0.0.1
-
如果没有:就去DNS中找,找到就返回,找不到就返回找不到
-
发布一个网站
可以在中进行查看示例
-
将自己写的网站,放到服务器(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)是一个简单的请求-响应协议,它通常运行在之上。
它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以形式给出。
两个时代
-
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
为什么要学习这个技术?
-
在javaweb开发中,需要使用大量的jar包,我们需要手动去导入
-
如何能够让一个东西自动帮我们导入和配置jar包
由此maven诞生了
maven就是一个项目架构管理工具,可以用来管理整个一个项目
核心思想:约定大于配置
-
有约束,不要去违反
maven会规定好该如何去编写Java代码,必须按照这个规范来
下载:
下载解压即可。
配置环境变量
如下配置
-
M2_HOME maven目录下的bin目录
-
MAVEN_HOME maven的目录
-
在系统的path中配置 %MAVEN_HOME%\bin
在命令行中检验是否安装成功
修改配置文件,使用阿里云镜像
为了加速下载配置一下镜像
<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目录下新建一个文件夹
再在conf目录下的setting文件进行修改:
此时本地仓库地址指向到我们设置的位置
在idea中使用maven
-
注意新版的IDEA与老版本的IDEA有些不同,我使用的是IDEA2022.3版本
-
启动IDEA
-
创建一个Maven项目
进入项目之后打开settings修改:
Maven home path:自己安装的maven的位置
User setting file:用来配置去哪儿下载依赖的jar包的setting.xml文件
Local repository:自己下载的jar包存放的本地仓库路径
IDEA安装有自己的maven,但是可以做的事比较少,使用我们自己安装的maven可以自己操纵
-
等待项目构建完成
在项目构建的日志文件中下载完依赖之后,出现
[INFO] BUILD SUCCESS
(手残把这个给叉掉了emmm...)
-
查看下载的jar包
-
IDEA中的maven设置
也就是在创建第二步那儿的创建。
ps:2022以前的版本常常会出现这样的问题:
IDEA中配置Maven,经常在项目创建完成之后idea的settings中又默认用idea自带的maven,如果出现该问题,在settings处修改回来即可
不建议自动导入文档,文件比较大会比较慢
-
此时Maven在IDEA中的配置和使用就OK了
创建一个普通的Maven项目
一个干净的maven项目结构如下所示
此处只有在web应用下才有(也就是之前创建的那个)
标记文件夹
在maven项目中由于缺少一些目录(和第二个普通的maven项目作比较),可以将新建的目录设置为相应的目录。
在Project Struture中也可以进行相应设置。
在IDEA中配置Tomcat
edit configure中没有找到tomcat server(由于重装了系统),在设置中安装Smart Tomcat插件然后重启即可。
老版本的tomcat server配置相对于smart tomcat来说麻烦许多。
然后在tomcat server进行设置就可以正常进行下一步了。
-
我们访问一个网站,需要指定一个文件夹的名字,在此处Deployment Directory自动选择了webapp目录
-
Context Path可写可不写,不写的情况下默认访问路径是localhost:8080,写成如下图所示,默认访问路径是localhost:8080/javaweb-01-maven
这个过程叫做:虚拟路径映射
配置好后启动即可,如下图所示
打开网页查看
验证是虚拟路径,只需要修改一下之前配置的Context Patn,如下图所示:
Pom文件
pom.xml是Maven的核心配置文件
maven操作栏
项目依赖中是一个个的jar包
遇到没有找到target的问题
在其中发现项目目录下没有找到target目录,因此查找了一下问题
将排除的文件叉掉后,然后点击apply,然后按照下图重新加载项目
安装maven
此时就有了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管理栏中对应关系
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仓库的使用
官网
搜索需要的依赖,查看使用人数,其中的包是否符合我们需要的要求。
如下图所示,尽量选择使用人数比较多的版本。点击版本号进入下一步操作
可以下载jar包,也可以复制maven的那个依赖代码
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://wangyuanzhuo.top/javaweb%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0-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
king putin
There is evidently a lot to realize about this. I consider you made certain nice points in features also. Oscar Piersiak
Loveme
Great article. I am experiencing some of these issues as well.. Hobert Woodfolk
bitcoin
Really informative blog article. Thanks Again. Really Great. Jerrod Bambaci
Loveme
As usual liberals are flaming hypocrites always playing political games;;these anarchists should be rounded up and sent to GITMO. Don Holsomback
bahis oyna
I see something truly interesting about your site so I bookmarked . Jarred Giarrusso