一、基本概念
1.1、前言
web开发:
1. web,网络的意思
2. 静态web:eg:html、css 提供给所有人的页面都不会发生变化
3. 动态web:eg:几乎所有的网站
在java中,动态web资源开发的技术统称为javaweb
1.2、web应用程序
web应用程序:可以提供浏览器的访问的程序;
- a.html、b.html。。。。多个资源,这些web资源都可以被外界访问,对外界提供服务
- 我们能访问到的任何一个页面或者资源,都存在与这个世界的某一个角落的计算机上
- 这个统一的web资源服务器都被放在同一个文件夹下,web应用程序:eg:tomcat服务器
- 一个web服务器应该由多个部分组成(静态web,动态web)
-html,css,js
-jsp,servlet
-java程序
-jar 包
-配置文件(properties)
web写完之后,若是想让外界可以访问,需要将它发布在服务器上
1.3、静态web
- .htm,.html 这些都是网页的后缀,如果服务器上一直存在这些东西,我们可以直接进行读取。
- 静态web存在的缺点
1、web页面无法动态更新,所有的用户看到的都是同一个页面
①轮播图,点击特效:伪动态
②JavaScript [实际开发中使用最多]
③VBScript 类似js
2、他无法和数据库进行交互(数据无法持久化,用户无法交互)
1、4 动态web
页面会动态展示:web的页面的展示效果会因人而异
缺点:
加入服务器的动态web资源出现了问题,我们需要重新编写后台代码,重新发布
。停机维护
优点:
1、web页面可以动态更新,所有的用户看到的都不是同一个页面
2、他可以和数据库进行交互(数据持久化,用户交互)
二、web服务器
2.1技术讲解
ASP:
-
微软:国内最早流行的就是ASP
-
在HTML中嵌入了VB的脚本 ASP + COM
-
在ASP开发中,基本一个页面就是几千行代码,页面极其混乱(在HTML中也要写业务逻辑代码)
-
维护成本高
-
C#
PHP: -
PHP开发速度快,功能强大,跨平台,代码简单
-
无法承载大访问量的情况(局限性)
JSP/Servlet
B/S:浏览器和服务器
C/S:客户端和服务器
- sun公司主推的B/S架构
- 给予java语言的(所有大公司,或者一些开源的组件,都是由java写的)
- 可以承受三高问题(高并发、高可用、高性能)
- 语法像ASP,ASP---->JSP,加强市场强度
2.2、web服务器
服务器是一种被动操作,用来处理用户的一些请求和给用户的一些响应信息
IIS
微软的:ASP…,Windows自带的
TomCat:另一篇博文中有详细记载
三、Tomcat的配置
Tomcat官网:http://tomcat.apache.org/
可以启动配置的端口号
都是可以手动修改的
- tomcat的默认端口号为:8080
- mysql的默认端口号为:3306
- http的默认端口号:80
- https的默认的端口号:443
<Connector port="8081" protocol ="HTTP/1.1"
connectionTimeout = "20000"
redirectPort = "8443"/>
较难面试题:
请你谈谈网站是如何进行访问的?
- 输入一个域名:回车
- 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下是否有这个域名映射
①有:直接返回对应的IP地址
②没有:去DNS服务器上寻找,找到就返回,没有找到就返回没有找到
四、Http
4.1、什么是HTTP
http(超文本传输协议)是一个简单的请求-响应协议,它通常运行在tcp上
- 文本:HTML,字符串,~。。。
- 超文本:图片,音乐视频,定位,地图。。。。
4.2、两个时代
- http1.0
http/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接 - http2.0
http/1.1 客户端与web连接后,可以获得多个web资源
4.3、Http请求
4.4、Http响应
五、Servlet
5.1 servlet简介
- servlet就是sun公司开发动态web的一门技术
- sun公司在API中提供一个接口叫做:Servlet:你如果想要开发一个servlet小程序,需要有以下的两个步骤:
编写一个类实现了servlet接口
把开发好的java类部署到web服务器上
把实现了servlet的程序叫做 :servlet
5.2 HelloServlet
- 构建一个普通的maven项目,删除掉里面的src目录,在里面重新建立一个Moudel,这个空项目里面进行学习
- 关于maven父子工程的理解
父项目中会有
<modules>
<module>servlet-01-hello</module>
</modules>
子项目中会有
<parent>
<artifactId>javaweb-02-maven</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
- maven优化:将maven环境改为最新的
<?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">
- 编写hello的类,使之实现servlet类,继承Httpservlet类
public class hello extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入了doGet方法");
PrintWriter writer = resp.getWriter();
writer.write("hello servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
- 编写servlet的类
为什么要映射?我们书写的是Java类,但是需要通过浏览器访问,浏览器需要访问服务器
所以我们需要给他分别注册一个服务器可以访问到的地址和浏览器可以访问到的URL地址
<!--服务器访问的注册的id-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.hello</servlet-class>
</servlet>
<!-- 浏览器访问的地址-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- 配置tomcat
配置项目发布的路径 - 发布
5.3 servlet原理
5.4 Mapping问题
- 一个Mapping可以映射一个路径
<!--服务器访问的注册的id-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.hello</servlet-class>
</servlet>
<!-- 浏览器访问的地址-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- 一个Mapping可以映射多个路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello4</url-pattern>
</servlet-mapping>
- 一个Mapping可以映射一个使用通配符的路径路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
当访问服务器的时候会默认进入使用了通配符的路径(不建议这样使用)
- Mapping中的优先级
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>