JavaWeb 开发 01 —— 基本概念、Web服务器、HTTP、Maven

系列文章

JavaWeb 开发 01 —— 基本概念、Web服务器、HTTP、Maven

JavaWeb 开发 02 —— ServletContext、读取资源、下载文件、重定向和请求转发

JavaWeb 开发 03 —— Cookie 和 Session

JavaWeb 开发 04 —— JSP(原理、语法、指令、内置对象、JSP标签、JSTP标签)、JavaBean、MVC

JavaWeb 开发 05 —— 过滤器、监听器

JavaWeb 开发 06 —— smbms项目实践

1、基本概念

1.1、前言

  • web是网页的意思,例如www.baidu.com

  • 静态web:提供给所有人看的数据始终不会变化!包括HTML、CSS

  • 动态web:提供给所有人看的数据会发生变化,每个人在不同时间、地点看到的信息不同。例如淘宝,京东。技术栈:Servlet/JSP、ASP、PHP。

    在Java中,动态web资源开发的技术统称为JavaWeb

 

1.2、静态Web

例如我们访问百度首页,我们的客户端(浏览器)会向服务器发送请求,请求会发送到Web Service,而Web Service会去找服务器中的index.html之类的文件,如果找到了就会把结果通过Web Service响应给客户端。

1612490562274

静态Web的缺点:

  • Web页面无法动态更新,所有用户看到的都是同一个页面
    • 通过轮播图、点击特效设置的伪动态,一般通过JavaScript。
  • 它无法和数据库交互

 

1.3、动态Web

优点:

  • Web页面可以动态更新,所有用户看到的都不是同一个页面。
  • 它可以和数据库交互,实现数据持久化。

缺点:假如服务器的动他Web资源出现了错误,我们需要重新编写后台程序,从而停机维护。

img

 

2、Web服务器

2.1、几种技术

ASP:

  • 由微软使用,是国内最早流行的。
  • 在HTML中嵌入了VB的脚本,使用的是ASP+COM
  • 在ASP开发中,基本一个页面都有几千行的业务代码,维护成本高!

PHP:

  • PHP开发速度很快,功能很强,跨平台,代码也很简单!(70%用WP)
  • 但无法承载大访问量的情况(局限性)

JSP/Servelet:

  • 是sun公司主推的B/S架构(浏览器和服务器,C/S是客户端和服务器)

  • 基于Java语言(所有的大公司或者一些开源组件都是用Java)

  • 可以承载三高问题(高并发、高可用、高性能)带来的影响!

  • 语法像ASP,因此ASP转JSP比较容易。

 

2.2、Tomcat服务器

服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。

Tomcat是Apache 软件基金会的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个JavaWeb初学者来说,它是最佳选择!

下载并解压Tomcat:

  • 我用的是版本: 64-bit Windows zip

  • 官网链接:https://tomcat.apache.org/download-90.cgi

1612493247982

然后启动Tomcat:点击bin下面的startup.bat

1612493743890

启动后的日志是乱码,因为Windows上默认是用GBK,Tomcat是UTF-8。因此需修改conf—logging.properties中代码。将其中 ConsoleHandler.encoding = UTF-8 的UTF-8改为GBK即可

然后在浏览器输入localhost:8080,看见下面页面则表明成功启动。

1612493641491

**tomcat配置文件:**均在conf文件下的server.xml中修改

  1. 配置启动时的端口号:tomcat默认8080(MySQL:3306、http:80、https:443)

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
  2. 配置主机名称以及放网站的文件

    <Host name="localhost"  appBase="webapps"
          unpackWARs="true" autoDeploy="true">
    

    注意不要修改错了,这里是Host标签,而Engine标签是服务器引擎的。

    <Engine name="Catalina" defaultHost="localhost">
    

    高难度面试题:网站是如何进行访问的?

    1. 浏览器输入域名(例如www.baidu.com),回车。
    2. 客户端(浏览器)检查本地的C:\Windows\System32\drivers\etc\hosts文件配置,查看里面是否有域名映射。
      • 有:直接返回对应的IP地址,在这个地址中有我们需要访问的Web应用程序就能直接访问。
      • 没有:去DNS服务器(这个是要先联网)找,找到就返回,找不到就显示网页丢失!
1612495422497

例如,下面我通过www.123456.com:8081来访问刚刚的tomcat页面:

  1. 修改tomcat配置文件:

    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />      
    <Host name="www.123456.com"  appBase="webapps"
          unpackWARs="true" autoDeploy="true">
    
  2. 修改C:\Windows\System32\drivers\etc\hosts文件:

1612495741423
  1. 启动tomcat,浏览器输入www.123456.com:8081,可以发现,即便没买域名一样访问。

    1612495870832
  2. 记得恢复刚刚的操作。

2.4、发布Web网站

网站的结构(放tomcat中的项目):

-- webapps:Tomcat服务器的web目录
    - ROOT
    - projectName:自己项目名
    		- WEB-INF
			- classes:放Java程序
			- lib:web应用所依赖的jar包
			- web.xml:网站配置文件
		- index.html:默认的首页
		- static 放静态资源
            - css
            	- style.css
            - js
            - img
		- ...

下面将一个简单的网站放到服务器(Tomcat)中的web应用文件夹(默认webapps)进行发布。

1、webapps/myProject/WEB-INF/web.xml

<?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>

2、webapps/myProject/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>myProject</title>
</head>
<body>
	<h1>
        我发布的第一个网站
    </h1>
</body>
</html>

3、启动tomcat,在浏览器输入localhost:8080/myProject(网站默认访问index.html)

1612497216901

 

3、HTTP

3.1、HTTP基本常识

超文本传输协议( Hypertext Transfer Protocol,HTTP ),它是一个简单的请求—响应协议,通常运行在TCP之上。这里的超文本包括图片、音乐、视频、地图…

而HTTPS则是在HTTP基础上通过传输加密和身份认证来保证了传输过程的安全性。(增加了SSL)

HTTP/1.0:客户端和服务器连接后,只能获取一个Web资源,然后就断开连接。(早期)

HTTP/1.1:客户端和服务器连接后,可以获得多个Web资源。

 

3.2、HTTP的请求和响应

拿百度举例,当我们访问百度首页时,通过开发者模式的Network查看请求和响应。这里挑出其中比较重要的。

1612508714364

General 通用信息:

Request URL:https://www.baidu.com		请求地址
Requset Method:GET					 	请求方式get/post
Status Code:200 OK						状态码
Remote(远程) Address:14.215.177.38:443	真实IP地址

1、请求行

  • 请求行中的请求方式:GET
  • 请求方式包括Get,Post,HEAD,Delete,Put…
    • get:携带的参数少且大小有限制,还会在浏览器显示数据内容,但高效。
    • post:携带的参数没有限制,不会在浏览器显示内容,安全但不高效。

2、消息头

Accept:text/html							告诉浏览器支持的数据类型
Accept-Encoding: gzip, deflate, br			支持哪种编码格式
Accept-Language: zh-CN,zh;q=0.9				告诉浏览器语言环境
Cache-Control:max-age=0						缓存控制
Connection: keep-alive						告诉浏览器请求完成后保持连接

Response 响应

Bdpagetype: 1
Bdqid: 0xdd7d3325000166e8
Cache-Control: private
Connection: keep-alive
Content-Type: text/html;charset=utf-8

1、响应体

Accept:text/html							告诉浏览器支持的数据类型
Accept-Encoding: gzip, deflate, br			支持哪种编码格式
Accept-Language: zh-CN,zh;q=0.9				告诉浏览器语言环境
Cache-Control:max-age=0						缓存控制
Connection: keep-alive						告诉浏览器请求完成后保持连接
HOST:主机
Refresh:告诉客户端多久刷新一次
Location:让网页重新定位

2、状态码

200:响应成功(200)

3xx:请求重定向

4xx:找不到资源(404)

5xx:服务器代码错误(500)

常见面试题:在浏览器输入地址并回车直到页面展示,经历了些什么?

 

4、Maven

Maven 公共仓库提供了对 maven central、jcenter、google、spring 等常用的 Maven 仓库的镜像功能。用户可以通过页面浏览仓库内容、检索和下载制品。在构建时使用 Maven 个公共仓库地址下载制品速度更快,更稳定。Maven仓库,通俗的理解就是管理我们在开发项目的时候使用的架包仓库。

我的maven相关博客:IDEA创建Maven —— 阿里云镜像、目录结构不完整、Tomcat启动后404
 

4.1、安装和环境变量

下载链接:https://archive.apache.org/dist/maven/maven-3/

我这里maven 3.3.9+idea 2019.2,之前尝试过maven 3.6.3+idea 2021.3,然鹅失败了。选择降低版本,下面是亲测可用的!如果有什么问题欢迎讨论,被maven折磨了3天终于成功了QAQ

配置系统环境变量:

  1. MAVEN_HOME:指向maven下的bin目录
20210211110010119
  1. 在系统的path中配置MAVEN_HOME:增加%MAVEN_HOME%(如果显示没有mvn命令,可以把Path中%MAVEN_HOME%换为bin绝对路径)
1612683270868
  1. 在CMD中用 mvn -v测试
    在这里插入图片描述

 

4.2、Maven配置以及在IDEA中使用

1、修改maven目录下conf中的setting.xml,改变本地仓库(默认在C盘),并添加阿里云镜像。
在这里插入图片描述

<!-- 这里指定自己仓库 -->  
<localRepository>F:\Environment\repository</localRepository>

在这里插入图片描述

<!-- 注意这个内容是在<mirrors>标签内的 -->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

2、IDEA创建JavaWeb项目

新建项目,选择创建简单的javaweb模板
在这里插入图片描述
1612684306036

1612684357014

错误解决:

如果创建项目时出现下面8个error,基本是镜像那出现了的问题,例如最新的要求使用https而不是http。

Cannot resolve plugin org.apache.maven.plugins:maven-clean-plugin:2.5
Cannot resolve plugin org.apache.maven.plugins:maven-resources-plugin:2.6
Cannot resolve plugin org.apache.maven.plugins:maven-jar-plugin:2.4
Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.1
Cannot resolve plugin org.apache.maven.plugins:maven-surefire-plugin:2.12.4
Cannot resolve plugin org.apache.maven.plugins:maven-install-plugin:2.4
Cannot resolve plugin org.apache.maven.plugins:maven-deploy-plugin:2.7
Cannot resolve plugin org.apache.maven.plugins:maven-site-plugin:3.3

首先保证用的自己的maven
在这里插入图片描述

其次,我用的解决方案是跳过安全检查,在setting-maven-import中添加下面语句。【只在maven 3.3.9+idea 2019.2 成立了,最新的maven 3.6.3+idea 2021.3依然报错】
在这里插入图片描述

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

然后重新导入项目,检查是否还有报红。

在这里插入图片描述

接着,建议通过cmd 输入mvn help:system再检查一次,看是否还缺少东西。
在这里插入图片描述
在这里插入图片描述

如果缺少,它会自动下载,最后会显示成功,如果下载直接失败,可能原因还是镜像问题,可以换一个试试。

如果还有问题,这里有一个Maven问题汇总博客:https://blog.csdn.net/jwcxs_m/article/details/80076909

3、如果创建好的项目结构中不完整,没有webapp、WEB-INF、src等文件,参考这个:创建一个web项目却没有src,java,resources以及webapp等文件目录结构

 

4.3、IDEA中配置Tomcat

1、创建Tomcat服务器:点击右上角 Add Configuration,然后点击加号。

Tomcat1

2、如果报错:检查下面是否正确。
在这里插入图片描述

在这里插入图片描述
 

4.4、pom文件

下面通过添加dependency标签,就可以自动导入某个jar包,而maven的高级之处在于,它能自动帮我们导入某个jar包所依赖的其他jar包。

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 这里是刚刚创建项目的G A V(首字母)  -->
    <groupId>com.zcy</groupId>
    <artifactId>javaweb-02-servlet</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <!-- 项目的默认构建编码,如果没有这个后面模块的target文件会不完整  -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <!-- 这个标签表明当前pom是父模块的pom,它的子模块是servlet_01
    <modules>
        <module>servlet_01</module>
    </modules>
	-->
    <!-- dependencies包含所有依赖-->
    <dependencies>
	<!--下面三个dependency是后面Servlet需要的依赖-->
      <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    <build>
        <!-- 这里是关于maven项目构建要用的东西,可以没有-->
	</build>
</project>

maven由于它的约定大于配置,我们之后可能会遇到我们写的配置文件,无法被导出或者生效的问题,可以通过添加resource标签解决。(这个目前用不到,留下记录,大概在MyRedis会用到)

<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
    <resources>
        <resource>
            <directory>${basedir}/src/main/webapp</directory>
        </resource>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
        </resource>
        <resource>
            <directory>${basedir}/src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老板来碗小面加蛋~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值