JavaWeb(一)
您的导航
一、基本概念
1.1 概述
关键词 java
、web
顾名思义,用Java开发Web。
web就是网页的意思,又分为静态web和动态web
-
静态web
- html,css
- 提供给用户看的数据不会发生变化
-
动态web
- 几乎所有的网站都是动态web
- 提供给用户看的数据始终会发生变化,在不同时刻,不同地点看到的信息不同。
- 技术栈:Servlet/JSP、ASP、PHP
-
javaweb
Internet上供外界访问的Web资源分为:静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。静态web资源开发技术:HTML、CSS。动态web资源开发技术:JavaScript、JSP/Servlet、ASP、PHP等。在Java中,动态web资源开发技术统称为Java Web。
-
web应用程序
web应用程序就是可以提供浏览器访问的程序,是B/S架构,之前写的小黑窗运行的是C/S架构。
1.2 静态 web
很久以前,都是静态web。
静态网站是指全部由HTML代码格式页面组成的网站,所有的内容包含在网页文件中。网页上也可以出现各种视觉动态效果,如GIF动画、FLASH动画、滚动字幕等,而网站主要是静态化的页面和代码组成,一般文件名均以htm、html、shtml等为后缀。
- 静态网页一经发布到服务器上,无论是否被访问,都是一个独立存在的文件
- 静态网页的内容相对稳定,不含特殊代码,因此容易被搜索引擎检索,html更加适合SEO搜索引擎优化。
- 静态网站没有数据库的支持,在网站制作和维护方面工作量较大。
- 由于不需通过数据库工作,所以静态网页的访问速度比较快。
静态web最大的缺点就是无法和数据交互(数据无法持久化,用户无法交互)。
- 伪动态:
- 可以用JavaScript实现伪动态,轮播图、点击特效等。
1.3 动态web
所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。
二、Web服务器
2.1 几种技术
-
ASP:
- 由微软开发的服务器端脚本环境。
- 在HTML中嵌入VB脚本,ASP+COM
- ASP开发中,代码量大,页面混乱
- 维护成本高
- 主要用C#
-
PHP:
- PHP开发速度很快,功能很强大,跨平台,代码简单(适合中小型网站开发)
- 但是有个缺点,无法承载大访问量情况(局限性)
-
JSP/Servlet:
- sun公司主推的B/S架构
- 基于Java语言的
- 可以承载三高(高并发,高可用,高性能)问题带来的影响
2.2 Web服务器
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache、 Nginx 、IIS。
三、Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。
omcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。
3.1 目录
- bin:启动、关闭的脚本文件
- conf:配置文件
- lib:依赖的jar包
- logs:日志
- temp:临时文件
- webapps:存放网站
- work:工作目录
3.2 启动关闭Tomcat
启动:bin目录下的startup
关闭:直接叉掉或者bin目录下的shutdown文件
检查是否启动成功:访问本地的8080端口。
若是启动闪退 是因为 JAVA_HOME环境变量没配
乱码是因为配置文件编码和cmd编码不一致,不改编码,改了可能会出问题。
3.3 配置
配置启动端口号:
-
Tomcat默认端口号 8080
可通过修改 conf 目录下的server文件中的Connector标签中的port的值来修改启动端口号。
配置主机名称:
-
默认主机名为localhost (127.0.0.1)
可通过修改conf目录下server文件中的Host标签的name的值来修改主机名。
默认网站应用存放位置:webapps。
可配置环境变量,也可以不配。
3.4 发布一个web网站
- 将自己写的网站,放到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问了
结构:
--webapps :Tomcat服务器的web目录
-ROOT
-Web_ysf : 网站目录名
-WEB-INF
-classes : java程序
-lib : web应用所依赖的jar包
-web.xml : 网站配置文件
-index.html : 默认的首页
-static : 静态资源
-css
-style.css
-js
-img
-……
四、HTTP
4.1 HTTP概述
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
超文本:图片、视频、声音、定位等
4.2 发展
HTTP 0.9
- 很早之前,只能传输文本,只是一个交换信息的无序协议。
HTTP 1.0
- 1.0时期,该协议对每一次请求/响应建立并拆除一次连接,每次只能获得一个web资源
HTTP -1.1
- 双方规定了连接方式和连接类型,可获得多个web资源。
HTTP 2.0
- 是下一代HTTP协议
4.3 工作原理
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
4.4 HTTP请求
客户端 -> 发请求(request)-> 服务器
Request URL: https://www.baidu.com/ (请求地址)
Request Method: GET (请求方法)
Status Code: 200 OK (状态码)
Remote(远程) Address: 163.177.151.110:443
GET / HTTP/1.1 (请求方式,协议类型)
Host: www.baidu.com (请求地址)
Connection: keep-alive (连接方式)
Cache-Control: max-age=0 (缓存控制)
HTTP请求组成
HTTP请求由三部分组成
-
请求行:包含了请求方法,请求URL,HTTP协议版本。
-
请求头:是HTTP的报文头,包含若干个属性,格式为"属性名:属性值",服务端根据此获取客户端信息。
-
请求体:是HTTP报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
4.5 HTTP响应
服务器 -> 响应(response)-> 客户端
HTTP/1.1 200 OK (协议以及状态码)
Cache-Control: private (缓存控制)
Connection: keep-alive (连接方式)
Content-Encoding: gzip (编码)
Content-Type: text/html;charset=utf-8 (编码类型)
HTTP响应组成
HTTP响应也由三部分组成
- 响应行:报文协议以及状态码。
- 响应头:和请求头一样,由很多属性组成。
- 响应体:是服务器返回给客户端的文本信息。
4.6 状态码
1xx 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误
具体参考
百度百科HTTP状态码
五、Maven
5.1 Maven概述
在开发过程中,需要使用大量的jar包,费时费力,如何让我们轻松的管理jar包?
maven应运而生。
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
maven的核心思想:约定大于配置!
maven会规定好我们该如何去编写我们的Java代码,必须按照这个规范来。
5.2 目录
bin:一些执行文件
boot:一些启动选项
lib:一些依赖jar包
conf:配置文件
5.3 配置
-
配置环境变量
- M2_HOME maven目录下的bin目录
- MAVEN_HOME maven目录
- 在Path中配置%MAVEN_HOME%\bin
- 测试:cmd中输入:
mvn -version
测试是否安装成功。
-
配置镜像站
我选择阿里云镜像站
-
找到conf下setting.xml文件,找到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>
-
-
建立本地仓库
-
在maven的安装目录下创建一个maven-repo目录
-
找到conf\setting.xml文件中的
<localRepository>
标签 , 按照格式把刚刚创建的maven-repo路径按照格式录进去。如<localRepository>E:\apache-maven-3.6.1-bin\apache-maven-3.6.1\maven-repo</localRepository>
-
到这里基本的配置就完成了。
5.4 idea中使用maven
5.4.1 新建maven项目
-
新建maven项目
-
设置项目名称等
-
找到设置中,构建工具下的maven,设置一下路径。
-
删掉src目录
-
新建maven模块
-
选择webapp模板
-
设置名称等
-
设置maven路径为刚才的路径,然后完成,等待初始化。
-
刷新一下maven,然后该建的东西都建起来,完成后目录是这样子
5.4.2 导入依赖
-
找到项目中的pom.xml文件
-
在dependencies标签下创建子节点导入依赖
例如我要导入servlet:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
只需要将servlet的坐标插入在dependencies标签里,如果没有dependencies标签,就自己建一个:
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>
之后要导入依赖都放在dependencies标签下。
依赖项的坐标可以去mvnrepository.com里面去找
更多maven知识,请看Maven基础(含手工制作maven项目以及idea创建maven项目)(图文)
maven还有很多功能,在之后的开发中慢慢了解。
javaweb开发前需要的一些配置,我们就完成了,下一步,就要开始敲代码了。