Web常识
上网浏览的内容:资源
静态资源
无论何时何地何种身份都不会发生改变的:图片,音频,视频,js,css
动态资源
随着时间,地点或者人物的不同,看到的内容是不一样的:Servlet,jsp
软件架构
C/S架构
客户端与服务端:用户本地客户端程序,远程服务器端程序,QQ,微信
B/S结构
浏览器和服务端:用户通过输入地址URL,可以访问不同的服务器,CSDN,B站
Web资源
URL:统一资源定位符,可以在网络中定义唯一资源
协议:http:// HTTP协议或者HTTPS协议
主机:localhost 发布资源电脑(服务器)ip地址
端口:8080 应用程序入口,每台电脑每个端口号,只能启动一个
URI:/mywebapp/dzz.html 三部分: 应用发布名称 / 资源目录名称 / 资源名称
应用中定位唯一资源
物理服务器
电脑:安装的系统(Linux)占用资源小
应用服务器
软件:tomcat
浏览器 → 服务器:请求 浏览器 ← 服务器:响应
Tomcat安装
·官网:tomcat.apache.org
压缩
压缩到熟悉路径:例D:\LearningSoftware
启动命令窗口
①输入自己Tomcat的bin目录:例CD D:\LearningSoftware\apache-tomcat-8.5.31\bin
②输入:例D:
③输入:startup.bat(可按Tab补全)
浏览器输入
localhost:8080 或者 127.0.0.1:8080
可以显示成功,即完成tomcat安装
TomcatURL默认设置
Tomcat8.5.31
默认端口号
conf→server.xml 69行-71行
①端口被占用可以修改此处端口号
②HTTP协议的默认端口号是:80 当把tomcat端口号改成80时,浏览器会省略
默认资源
conf→web.xml 最后位置
访问以下资源时,可以不写资源名称
默认应用
webapps→ROOT
在应用发布目录中,名称为ROOT的应用目录,当访问该应用时,应用发布名称可以不写
我们访问浏览器的网址时,就是访问的默认应用默认端口默认资源
Tomcat项目部署
Tomcat的项目下
在命令窗口启动Tomcat
上面↑(Tomat窗口需要一直执行,发布新资源需要重启Tomcat)
浏览器上发布
http://localhost:8080/mywebapp/dzz.html
IDEA集成Tomcat
idea版本2021.3.3为例:
①找设置:setting
②输入:Application Servers
点 + Tomcat
然后一直点OK,再点OK,再点Apply,再点OK完成设置
③New Project选择web骨架
④核对Maven路径
填写Name:archetypeCatalog Value:internal
⑤等待加载
最后调整骨架,完成搭建
⑥集成tomcat
记得修改应用发布名称:/
⑦发布
点Tomcat边上的启动Run或者捉虫DeBug,等待页面展示
HTTP协议
超文本传输协议,交互规则是请求-响应
客户浏览器-服务器:一请求一响应(一问一答,先问后答)
端口号:80
请求独立:无状态 HTTP协议无法记录上一次方法
HTTP请求
请求行:永远位于请求的第一行
请求的方式,请求资源的URI,使用的协议和版本
请求头:第一个空行到第二个空行结束
服务器给浏览器的暗号
请求体:从第二个空行后开始,到内容结束
浏览器给服务器的一些请求参数,目前阶段只有POST有请求体,GET提交在地址栏
HTTP响应
响应行:永远位于请求的第一行
协议和版本,响应状态码
响应头:第一个空行到第二个空行结束
服务器给浏览器的暗号,在开发者可以设置
响应体:从第二个空行后开始,到内容结束
它就是响应正文,和网页源码看到的内容都一样
响应行状态码:
200:操作成功
302:重定向
404:请求路径没有对应资源(黑:有应用没有资源 白:没有找到应用)
500:服务器错误
Servlet
Java提供的一套动态web资源开发技术
Aservlet是一个运行在Web服务器中的小型Java程序。Serlets接收并响应来自Web客户端的请求,通常是跨HTTP的,即超文本传输协议(官网API翻译)
javax.servlet.http.Httpservlet
重写service方法才能有Servlet对象,Servlet由web服务器创建,Servlet方法由web服务器调用
入门案例
执行流程
①先配置pom.xml引入servlet到maven仓库
<?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> <groupId>com.itheima </groupId> <artifactId>day03_servlet </artifactId> <version>1.0-SNAPSHOT </version> <packaging>war </packaging> <properties> <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> <dependencies> <dependency> <groupId>javax.servlet </groupId> <artifactId>javax.servlet-api </artifactId> <version>3.1.0 </version> </dependency> </dependencies> </project>②引入web.xml配置servlet信息
<?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_3_1.xsd" version= "3.1" metadata-complete= "true"> <servlet> <servlet-name>servletDemo1 </servlet-name> <servlet-class>com.itheima.web.ServletDemo1 </servlet-class> </servlet> <servlet-mapping> <servlet-name>servletDemo1 </servlet-name> <url-pattern>/hello </url-pattern> </servlet-mapping> </web-app>③编写index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Servlet </title> </head> <body> <h3>入门案例 </h3> <a href="http://localhost:8080/hello">访问第一个Servlet </a> </body> </html>④编写Servlet实现类
package com.itheima.web; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class ServletDemo1 extends HttpServlet { @Override protected void service (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println( "Servlet访问成功"); } }
servlet生命周期
出生:Servlet第一次被访问的时候,web服务器对象创建并初始化
init();,初始化只执行一次
活着:只要应用对外提供服务,对象就一直存在
service();,执行请求响应,次数不限
死亡:当应用停止对外服务,或者tomcat关闭(宕机),对象就消亡了
destroy();,只释放一次实例,Java垃圾回收
单例模式运行,同一个时间只能有一个
servlet初始化参数
<init-param> <param-name>参数的名称 </param-name> <param-value>参数的值 </param-value> </init-param>
@WebServlet("/servlet") public class MyServlet03 extends HttpServlet { @Override protected void service (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取Servler配置对象 ServletConfig servletConfig = getServletConfig(); //根据初始化参数的名称获取值 String valueX = servletConfig.getInitParameter( "nameX"); System.out.println( "得到的初始化参数"+valueX); //获取所有初始化参数名称的枚举 Enumeration<String> names = servletConfig.getInitParameterNames(); //遍历枚举 while (names.hasMoreElements()){ //取出参数名称 String name = names.nextElement(); //根据得到的名称取值 String value= servletConfig.getInitParameter(name); System.out.println( "通过名称取值"+name+ "对应的值是:"+value); } } }
servlet多路径映射
servlet配置url-pattern的时候,是支持使用通配符,就是 *
除了前面指定访问规则配置:直接指定访问规则名称之外,还支持以下两种配置:
路径匹配
<url-pattern>/自己指定的路径*</url-pattern>
后缀匹配
<url-pattern>*.自己指定后缀名</url-pattern>
细节:除了后缀匹配方式之外,其余配置servlet的url-pattern都必须以 / 开头
全匹配优先级最高,使用了通配符 * ,有 / 的优先级最高
@WebServlet("/demo1,/demo2")
可以匹配多个参数
urlPattern配置规则
精确匹配 /user/select
目录匹配 /*
扩展名匹配 *.do
任意匹配 / | *
优先级:精准路径 > 目录路径 > 扩展名路径 > /* > /
servlet访问说明
访问内部资源时,可以省略协议,主机和端口,直接写URI
servlet注解配置
@WebServlet
把当前类配置成为一个Servlet,写在类上
属性:
urlPatterns:和xml配置时的<url-pattern></url-pattern>标签的作用一样。指定servlet的访问规则
servlet3.1规范为了我们编写简洁,他还提供了一个和urlPatterns属性作用一样的属性:value。当给value属性配置值的时候,value可以不写
注意事项:
通常情况下,在一个项目中,servlet的配置应该选择同一种,要么都是xml,要么都是注解
如果既用xml又用注解的话,那么请把web.xml中的metadata-complete="true"改成metadata-complete="false",否则,他不读取注解
servlet默认
servlet的配置,不能使用 /。 / 就表示了访问当前应用下的任何资源,都由这个servlet来处理,就不能执行index.html了,jsp除外,在tomcat里的web.xml配置中有 / 指向默认。
转载:https://blog.csdn.net/czdzz/article/details/125644478