标签:web 浏览器 JavaWeb Tomcat Maven 服务器 Servlet
Java Web
1.基本概念
1.1、前言
- Web开发
- web,网页的意思
- 静态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
- .htm、 .html,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取,需要网络
- 静态web存在的缺点
- Web页面无法更新,所有用户看到的都是同一个页面
- 轮播图,点击特效:伪动态
- JavaScript(实际开发中使用的最多)
- VBscript
- 它无法和数据库交互(数据无法持久化,用户无法交互)
- Web页面无法更新,所有用户看到的都是同一个页面
1.4、动态Web
- 页面会动态展示:Web的页面展示的效果会因人而异
- 缺点
- 加入服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布;
- 停机维护
-优点 - Web页面可以更新,所有用户看到的都不是同一个页面
- 它可以和数据库交互(数据持久化:注册,商品信息,用户信息)
新手村: —>魔鬼训练(分析原理,看源码)–>PK场
2、web服务器
2.1、技术详解
- ASP:
- 微软:国内最早流行的就是ASP;
- 在HTML中嵌入了VB脚本,ASP+COM;
- 在ASP开发中,基本一个页面都有几千行的业务代码,页面及其混乱
- 维护成本高!
- C#
- IIS服务器
- PHP
- PHP开发速度很快,功能强大,可跨平台,代码很简单(70%,WP)
- 无法承载大访问的情况(局限性)
- JSP/Servlet
- B/S:浏览器和服务器
- C/S:客户端和服务器
- sun公司主推的B/S架构
- 基于Java语言的(所有的大公司,或者一些开源的组件,都用Java写的)
- 可以承载三高问题带来的影响
- 语法像ASP,ASP–>JSP,加强市场强度
2.2、web服务器
服务器是一种被动服务的操作,用来处理一些请求和给用户一些响应信息
-
IIS
- 微软的;ASP…Windows中自带的
-
面向百度编程
-
Tomcat
- Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
- Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,它是最佳选择。
- Tomcat 实际上运行JSP 页面和Servlet,Tomcat最新版本为9.0.41
-
下载Tomcat:
- 安装 or 解压
- 了解配置文件及目录结构
- 这个东西的作用
3.Tomcat详解
3.1、安装Tomcat
- Tomcat官网:https://tomcat.apache.org/
3.2Tomcat启动和配置
- 文件夹作用
- 启动、关闭Tomcat
- 访问测试:http://localhost:8080/
- 可能遇到的问题:
- Java环境变量没有配置
- 闪退问题:需要配置兼容性
- 乱码问题:配置文件中设置
3.3、配置
- 可以配置启动的端口号
- tomcat的默认端口号为:8080
- mysql:3306
- http:80
- https:443
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- 可以配置主机名称
- 默认的主机名为localhost–>127.0.0.1
- 默认网站应用存放的位置为:webapps
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
- 高难度面试题:
- 请你谈谈网站是如何进行访问的!
- 输入一个域名;回车
- 检查本机的 C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射;
- 有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
- 没有:去DNS服务器上找,找到的话就返回,找不到就返回找不到;
- 请你谈谈网站是如何进行访问的!
- tomcat配置环境变量(可选项)
3.4、发布一个web网站
- 不会就模仿(chao)
- 将自己写的网站,放到服务器中的指定文件夹下,就可以访问了
- 网站应该有的结构
--webapps:Tomcat服务器的web目录
-ROOT
-leostudy:网站的目录名
-WEB-INF
-classes:java程序
-lib:web应用所需要的的依赖的jar包
-web.xml
-index.html 默认的首页
-static
-css
-style.css
-js
-img
-......
- HTTP协议:面试
- Maven:构建工具
- Maven安装包
- Servlet入门
- HelloWorld!
- Servlet配置
- 原理
4.HTTP
4.1、什么是HTTP
- 超文本传输协议(Hypertext Transfer Protocol,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 OK 状态码:200
Remote(远程) Address: 14.215.177.38: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
- 请求行
- 请求行中请求的方式:GET
- 请求方式:Get,Post,HEAD,DELETE,PUT,TRACT…
- get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但是高效
- post :请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但是不高效
- 请求头
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312 ISO8853-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是连接
HOST:主机
4.4、Http响应
- 服务器—响应—客户端
- 百度
Cache-Control: private 缓存控制
Connection: keep-alive 连接:
Content-Encoding: gzip 编码
Content-Type: text/html;charset=utf-8 类型
- 响应体
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312 ISO8853-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是连接
HOST:主机
Refrush:告诉客户端,多久刷新一次;
Location:让网页重新定位
- 响应状态码
- 200 :请求响应成功
- 3xx:请求重定向
- 重定向:你重新到我给你的新位置去
- 4xx:找不到资源 404
- 资源不存在;
- 5xx:服务器代码错误 500
- 502:网关错误
- 常见面试题:
- 当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
5.Maven
我为啥要学习Maven?
- 在javaweb开发中,需要使用大量的jar包,我们手动去导入;
- 如何能够让一个东西自动帮助我们导入和配置这个jar包
- 由此,Maven诞生了!
5.1、Maven项目架构管理工具
目前就是用来方便导入jar包的!
- Maven的核心思想:约定大于配置
- 有约束,不要去违反
-Maven会规定好你该如何编写我们的Java代码,必须要按照这个规范来;
- 有约束,不要去违反
5.2、下载安装Maven
- Maven官网:https://maven.apache.org/
- 下载完成后解压即可;
- 建议:电脑上的所有环境都放在一个文件夹里面
5.3、配置环境变量
- 在我们的系统环境变量中
- 配置如下配置:
- M2_HOME :maven目录下的bin目录:D:\java\apache-maven-3.6.1\bin
- MAVEN_HOME :maven目录:D:\java\apache-maven-3.6.1
- 在系统的path中配置 :%MAVEN_HOME%\bin\
- 测试Maven是否安装成功,保证必须配置完毕
5.4、修改阿里云镜像
- 镜像:mirrors
- 作用:加速我们的下载
- 国内建议使用阿里云的镜像
<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、本地仓库
- 在本地的仓库,远程仓库;
- 建立一个本地仓库
<localRepository>D:\java\apache-maven-3.6.2\maven-repo</localRepository>
5.6、在IDEA中使用Maven
- 启动IDEA
- 创建一个MavenWeb项目
- 观察maven本地仓库中多了什么东西?
- IDEAz中Maven中设置
- IDEA项目创建成功后,看一眼Maven的配置
- IDEA项目创建成功后,看一眼Maven的配置
- 到这里,Maven在IDEA中的配置和使用就OK了
5.7、创建一个普通的Maven项目
- 这是一个干净的项目
5.8、标记文件夹功能
java—>class
5.9、在IDEA中配置Tomcat
必须配置:我们访问一个网站,需要制定一个文件夹的名字
5.10、pom文件
pom.xml是Maven的核心配置文件
- maven由于他的约定大于配置,我们之后可能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<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>
5.11、一些常见的问题
- IDEA中默认产生的文件
- 替换为webapp4.0版本和tomcat版本一致
<?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>
6.Servlet
6.1、Servlet简介
- servlet就是sun公司开发的动态web的一门技术
- Sun公司在这些api中提供了一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤
- 编写一个类,实现Servlet接口
- 把开发好的java类部署到web服务器中。
- 把实现了Servlet接口的java程序叫做,Servlet
6.2、HelloServlet
1、分析
- Servlet接口有两个默认的实现类:HttpServlet、GenericServlet
- 构建一个普通的Maven项目,删掉src目录,以后我们的学习就在项目里面建立Moudel,这个空的就是我们的主工程
- 关于Maven父子工程理解
- 父项目中会有
<modules>
<module>servlet-01</module>
</modules>
- 子项目中会有
<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.leo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
- 父项目中的java子项目可以直接使用
son extends father
2、Maven环境优化
- 修改web.xml为最新的
- 将maven的结构搭建完整
3、编写一个servlet程序
- 编写一个普通类
package com.leo.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet extends HttpServlet {
//由于get和post只是请求实现的不同方式,可以相互调用,业务逻辑都一样
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//ServletOutputStream os = resp.getOutputStream();
PrintWriter writer = resp.getWriter(); //响应流
writer.print("wdnmd");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- 实现Servlet接口,这里我们直接继承HttpServlet
4、编写Servlet的映射
- 为什么需要映射:
- 我们写的是java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所有我们需要在web服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的逻辑
<!--注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.leo.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet对应的mapping-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lululu</url-pattern>
</servlet-mapping>
5、配置Tomcat
- 注意:配置项目发布的路径
6、启动测试
6.3、Servlet原理
- Servlet是又Web服务器调用,web服务器在收到浏览器请求后会 :
6.4、Mapping问题
- 一个servlet可以指定一个映射路径
- 一个servlet可以指定多个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lululu/lululu1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lululu/lululu2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lululu/lululu3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lululu/lululu4</url-pattern>
</servlet-mapping>
- 一个servlet可以指定通用映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lululu/*</url-pattern>
</servlet-mapping>
- 默认请求路径
<!--默认请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
- 指定一些后缀或者前缀
<!--可以自定义后缀实现请求映射-->
<!--注意点:*前面不能加项目映射的路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.leo</url-pattern>
</servlet-mapping>
- 优先级问题
- 指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求
6.5、ServletContext
- web容器在启动的时候,他会为每一个web程序都创建一个对应的
标签:web,浏览器,JavaWeb,Tomcat,Maven,服务器,Servlet 来源: https://blog.csdn.net/qq_42777568/article/details/115625653
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。