1、基本概念
1.1 前言
web开发:
- web,网页,如www.baidu.com
- 静态web(html、css;页面显示数据不会变化)
- 动态web(几乎所有网站;数据变化;技术栈:Servlet/jsp,asp,php)
动态web资源开发的技术的统称。
1.2 web应用程序
a.html 、b.html
可供浏览器访问的程序;包括:
- html、css、js
- jsp、servlet
- Java程序
- jar包
- 配置文件(Properties)
web应用程序编写完毕后需要一个服务器来统一管理给外界提供服务。
1.3 静态web
.html 、.html
服务器中存在这些页面时,可以直接读取。
静态web的缺点:无法和数据库交互、页面无法动态更新。
1.4 动态web
2、web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户响应信息。
IIS:微软,ASP。。。,Windows中自带
Tomcat:面向百度编程;轻量级服务器;实际上运行JSP页面和Servlet;
3、Tomcat
3.1 安装Tomcat
官网:https://tomcat.apache.org/download-90.cgi
选择版本下载,解压后尝试启动关闭Tomcat
解压文件路径/bin/shutdown.bat(脚本关闭)或者点击命令行关闭按钮
解压文件路径/bin/startup.bat(启动)(双击)
访问测试:浏览器输入:http://localhost:8080
3.2 Tomcat的配置和启动
conf/server.xml 为服务器核心配置文件
- 可以配置启动端口号
- 默认端口号:tomcat:8080;mysql:3306;http:80;https:443
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- 可配置主机的名称
默认的主机名为locahost-》127.0.0.1
默认网站应用存放的位置为:webapps
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
网站如何访问的?
1、输入一个域名;回车进入
2、检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射;
有:直接返回对应的ip地址,这个地址中有需要访问的web程序,可以直接访问。
127.0.0.1 http://localhost:8080
没有:则去DNS服务器中找,能找到的话就返回,找不到则反馈为找不到网页。
3.3 发布一个网站
将自己写的网站放到服务器中指定的web应用的文件夹下(webapps)就能访问了。
网站结构
---webapps:Tomcat服务器的web目录
--ROOT
--mmstudy:自己网站的目录名
-WEB-INF
-web.xml
-classes: Java程序
-lib:web应用所依赖的jar包
-index.html 默认的首页
-static
-css
-style.css
-js
-img
4、HTTP
4.1 什么是HTTP
HTTP(超文本传输协议)简单的请求-相应协议,通常运行在TCP上。
- 文本:html,字符串、~
- 超文本:图片、音乐、视屏、定位、地图、。。。
- 端口号:80
HTTPS:安全的
- 端口号:443
4.2 两个时代
- http1.0
http/1.0:客户可以与web服务器连接后,只能获得一个web资源,断开连接 - http2.0
http/1.1:客户可以与web服务器连接后,可以获得多个个web资源。
4.3 Http请求
- 客户端—发送请求(Request)—服务器
百度:
Request URL: https://www.baidu.com/ //请求地址
Request Method: GET //get方法和post方法
Status Code: 200 //状态码
Remote(远程) Address: 106.117.216.33:443
authority: dss0.bdstatic.com
:method: GET
:path: /5aV1bjqh_Q23odCf/static/superman/img/searchbox/nicon-2x-6258e1cf13.png
:scheme: https
accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9 //语言
referer: https://www.baidu.com/
sec-fetch-dest: image
sec-fetch-mode: no-cors
sec-fetch-site: cross-site
user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1
1、请求行
- 请求行中的请求方式:GET
- 请求方式:Get 、POST、HEAD、DELETE、PUT。。。
get:请求能够携带的参数比较少、大小有限制、会在浏览器的URL地址栏显示数据内容,不安全但高效。
post:请求能够携带的参数没有限制、大小没有限制、不会在浏览器的URL地址栏显示数据内容,安全但不高效。
2、消息头
Accept: 告诉浏览器,他所支持的数据类型
Accept—Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-language:告诉浏览器,他的语言环境
Cache-Control:缓存控制
Connection:告诉服务器,请求完成是断开还是保持连接
Host:主机
4.4Http响应
- 服务器-响应-客户端
百度
cache-control: max-age=2592000 //缓存控制
content-length: 5264
content-type: image/png //类型
date: Sun, 07 Mar 2021 15:15:11 GMT
etag: "5ea8e535-1490"
expires: Tue, 30 Mar 2021 01:40:45 GMT
last-modified: Wed, 29 Apr 2020 02:23:49 GMT
ohc-cache-hit: ts2ct56 [4], nb2ctcache56 [4]
ohc-response-time: 1 0 0 0 0 0
server: JSP3/2.0.14
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(网关错误)
思考问题;
当你的浏览器中地址栏输入地址并回车的一瞬间页面能够展示回来,经历了什么?
5、Maven
5.1 Maven项目架构管理工具
目的:方便导入jar包
Maven核心思想:约定大于配置
- 有约束的不要违反
Maven会规定好如何编写java代码,必须按照这个规范来。
5.2 下载安装Maven
官网:http://maven.apache.org/
下载地址(Windows系统):Binary zip archive:apache-maven-版本号-bin.zip
5.3 环境配置变量
在系统环境变量中做如下配置:
- M2_HOME maven目录下的bin目录
- MAVEN_HOME maven的目录
- 在系统的path中配置MAVEN_HOME:%MAVEN_HOME%\bin
配置完后在命令行输入 mvn -version,显示版本号,测试是否安装成功,保证配置正确。
5.4 阿里云镜像
- 镜像:mirror
作用:加速下载 - 国内建议用阿里云的镜像
<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>
5.5 本地仓库
在本地的仓库,远程仓库;
本地仓库:在maven目录下新建一个文件夹命名为:maven-repo
建立一个本地仓库:
在conf文件夹下找到setting.xml打开找到localRepository,添加本地仓库
<localRespository>maven的maven-repo文件的路径</localRespository>
5.6 在IDEA中使用maven
1、启动IDEA
2、创建一个maven项目
3、创建成功
4、观察maven仓库中多了什么东西
5、IDEA中的MAVEN如何设置
注意:经常在IDEA中会出现一个问题,就是项目自动创建完成之后,Maven home会使用IDEA默认的,如果发现这个问题,需要手动改为本地的(IDEA项目创建成功后,需要注意Maven的配置)
5.7 创建一个没有模板的Maven项目
以下配置只有在web应用下才会有
5.8 标记文件夹功能
另一种设置方法:
Flie----》Project Settings
5.9 在IDEA中配置Tomcat
1、
2、
3、
4、
解决警告问题:
访问一个网站,需要指定一个文件夹名字
5、
点击ok完成配置
5.10 pom文件
pom.xml文件是Maven的核心配置文件
5.11 资源导出问题解决办法
Maven的核心是约定大约配置,可能会出现资源导出配置失败的问题,解决方法:
5.12 项目结构
5.13 解决遇到的问题
1、Unable to import maven project: See logs for details
解决办法:降级maven版本
2、Tomcat闪退
3、IDEA中每次都要重复配资和Maven
解决办法:在IDEA中的默认配置中去配置
6、Servlet
6.1 Servlet简介
- Servlet是在孙公司开发动态web的一门技术
- Sun在这些API中提供一个接口叫做:Servlet,如果想开发一个Servlet程序,需要一下两步:
编写一个类,实现Servlet接口
把开发好的Java部署到Web服务器中
把实现了Servlet接口的Java程序叫做,Servlet
6.2 HelloServlet
Servlet在Sun公司有两个默认的实现类:HttpServlet,GenericServlet
1、构建一个普通的Maven项目,删除src文件,以后在此项目中建立moudel;这个空档工程就是Maven的主工程
2、关于Maven父子工程的理解
父项目中有:
<modules>
<module>servlet-01</module>
</modules>
子项目中有:
<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.kuang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
父项目中耳朵Java子项目可以直接使用
son extends father
3、Maven环境优化
- 修改web.xml为最新的
- 将maven的结构搭建完整
4、编写一个Servlet程序
- 编写一个普通类;
- 实现Servlet接口,这里直接继承HttpServlet
package com.kuang.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//由于get或post只是请求实现的不同的方式,可以相互调用,业务逻辑一样;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet (HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{
//super.doGet(req,resp);
ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer = resp.getWriter();//响应流
writer.print("Hello,Mr.Wang!");
}
@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{
doGet(req,resp);
}
}
5、编写Servlet的映射
为什么需要映射:Java程序,需要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要再web服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径。
注册一个Servlet,配置一个访问路径。
6、配置Tomcat
配置项目发布的路径即可。
(/s配置的是index页用来访问这个webapp的index页,/s/hello在去请求那个Servlet)
7、启动测试
- HTTP 404 状态码的出现意味着链接指向的网页不存在,即原始网页的URL失效。查看URL配置是否有问题。