在正式讲解JavaWeb前,我们先来了解一下JavaWeb:
如果说网页是为了展现数据,数据库是为了存储和管理数据,那么JavaWeb就是为了进行逻辑处理
温馨提示:在学习JavaWeb前,需要先学习MYSQL,JDBC和前端三件套。
既然我们想要学习JavaWeb,那么我们就要先来进行了解:
首先我们系统的介绍一下HTTP
HTTP特点:
HTTP优缺点:
HTTP请求数据分为三部分:
常见的请求头:
GET请求和POST请求的区别:
下面给出GET和POST两个例子:
GET请求数据格式
GET/HTTP/1.1
Host:www.itcast.cn
Connection:keep-alive
Cache-Control:max-age=0 Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0Chrome/91.0.4472.106
......
POST请求数据格式
POST/HTTP/1.1
Host:www.itcast.cn
Connection:keep-alive
Cache-Control:max-age=0 Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0Chrome/91.0.4472.106
username=superbaby&password=123456
响应数据分为三部分:
常见HTTP响应头:
下面给出HTTP响应例子:
HTTP/1.1 200 OK
Server:Tengine
Content-Type:text/html
Transfer-Encoding:chunked...
<html>
<head>
<title></titile>
</head>
<body>
</body>
</html>
重要状态码:
状态码分类 | 说明 |
---|---|
1xx | 响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它 |
2xx | 成功——表示请求已经被成功接收,处理已经完成 |
3xx | 重定位——重定义到其他地方;它让客户端再发起一个请求已完成整个处理 |
4xx | 客户端错误——处理发生错误,责任在客户端,如:客户端请求一个不存在的资源 |
5xx | 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持 |
状态码 | 英文描述 | 解释 |
---|---|---|
200 | OK | 客户端请求成功,处理成功 |
404 | NOT FOUND | 请求资源不存在,通常为url错误或资源被删除 |
500 | Internal Server Error | 服务器发生不可预期的错误,服务器出现异常,可以查看日志 |
状态码大全:HTTP 状态码 | 菜鸟教程 (runoob.com)
首先我们知道Tomcat是Web服务器的一种,那么我们从头介绍:
然后我们对Tomcat做出一个简单解释:
通俗来讲,我们自制的HTML网页通常只能在自己电脑上使用 如果我们希望将该网页上传到网络上被其他人阅读,就需要书写HTTP等原本不属于该网页的制造代码 但是我们可以通过Web服务器(Tomcat等)来省略HTTP内容书写的过程,直接将该网页上传至网络被其他人阅读
Tomcat下载流程:
Tomcat关闭流程:
我们给出Tomcat的文件目录展示并解释:
我们对文件夹进行解释翻译:
Tomcat的配置主要是修改端口号:
我们在conf/server.xml中找到如下代码,修改port端口号即可
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
注意:HTTP协议默认端口号为80,如果将Tomcat端口号修改为80,则访问时不需要输入端口号
Tomcat部署项目:
将项目放在webapps目录下,即为部署成功
注意:我们的文件通常打包为war压缩包,放置在webapps下后会自动解压(加快速度)
首先我们先对Maven Web项目的整体框架进行解释:
我们对文件夹进行解释翻译:
在文件打包之后会创建一个target打包包,即为部署成功的JavaWeb项目包:
创建方法分为使用骨架和不使用骨架(骨架:项目模板)
我们如果在Tomcat的下载地址下上传网页,需要不停刷新Tomcat,所以我们希望在IDEA中使用Tomcat
我们需要在IDEA中添加配置(Add)中添加Tomcat即可
直接在pom.xml中添加Tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</build>
然后在Maven Helper插件中快速启动项目,选中项目,右键-> Run Maven ->tomcat7:run
最后我们介绍一下Servlet:
如果说Tomcat是Java网页与互联网连接的一个框架,那么Servlet就是Java网页在登陆互联网后的动态资源
下面我们通过一个简单的步骤来介绍Servlet的使用过程:
<?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>org.example</groupId>
<artifactId>web-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<!-- servlet依赖坐标 -->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- tomcat 插件 为了方便使用 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
package com.itheima.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
// service 在每次开启网页后都会启动一次(是主要代码)
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("servlet hello world~");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
@Override
public void init(ServletConfig config) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;package com.itheima.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
// 这里使用注解,后面括号内为访问路径
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("servlet hello world~");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
@Override
public void init(ServletConfig config) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
}
}
}
// /web-demo 是Web项目名称
// /demo1是配置访问路径
http://localhost:8080/web-demo/demo1
在分析执行流程前,我们先明白两个问题:
生命周期概念:
Servlet生命周期:
注意:@WebServlet(urlPatterns = “/demo1”,loadOnStartup = 1) loadOnStartup:当为负整数,表示第一次被访问时创建;当为正整数或0,表示服务器启动时创建,数字越小优先级越高
Servlet存在五种方法,我们在代码中进行介绍:
package com.itheima.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* Servlet 生命周期方法
*/
@WebServlet(urlPatterns="/demo2",loadOnStartup = 1)
public class ServletDemo2 implements Servlet {
/**
* 初始化方法
* 1. 调用时机:默认情况下,Servlet被第一次访问时,调用
* * loadOnStartup:
* 2. 调用次数:1次
* @param config
* @throws ServletException
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init...");
}
/**
* 提供服务
* 1. 调用时机:每一次Servlet被访问时,调用
* 2. 调用次数:多次
*
*
* @param req
* @param res
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("servlet hello world~");
}
/**
* 销毁方法
* 1. 调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用
* 2. 调用次数:1次
*/
@Override
public void destroy() {
System.out.println("destroy...");
}
// 用于获取Servlet的具体信息
@Override
public String getServletInfo() {
return null;
}
// 用于获取ServletConfig对象
@Override
public ServletConfig getServletConfig() {
return null;
}
}
Servlet属于最高级根接口,为了更加契合HTTP的使用
我们又以Servlet创建了GennericServlet类,再以GennericServlet类为模板创建了HTTPServlet类
在这部分我们将介绍HTTPServlet类:
HTTPServlet使用步骤:
HttpServlet原理:
我们给出一个具体实例:
package com.itheima.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {
// HTTPServlet根据其请求的GET或POST方法提供不同的返回信息
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post...");
}
}
Servlet如果想被访问,就必须要配置urlPattern信息(访问路径)
首先我们阐明一个道理:
@WebServlet(urlPattern = {"/demo1","/demo2"})
然后我们介绍Servlet的urlPattern匹配规则:
// Java源码
@WebServlet(urlPattern = "/user/select")
// 查询网站
localhost8080/web-demo/user/select
// Java源码
@WebServlet(urlPattern = "/user/*")
// 查询网站
localhost8080/web-demo/user/aaa
localhost8080/web-demo/user/bbb
// Java源码
@WebServlet(urlPattern = "*.do")
// 查询网站
localhost8080/web-demo/aaa.do
localhost8080/web-demo/bbb.do
// Java源码
@WebServlet(urlPattern = "/")
@WebServlet(urlPattern = "/*")
// 查询网站
localhost8080/web-demo/hehe
localhost8080/web-demo/haha
/*
介绍一下 / 和 /* 区别:
/*: 可以匹配任意访问路径
/: 当我们的项目中配置了"/"后,会覆盖掉tomcat中的DefaultServlet,这样就会导致你的静态内容(html)都无法被访问,所以尽量不要使用
*/
优先级:精确路径 > 目录路径 > 扩展名路径 > /* > /
Servlet在3.0版本后才可以使用注解配置(@注解)
在3.0版本之前我们需要采用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">
<!--
Servlet 全类名
-->
<servlet>
<servlet-name>demo13</servlet-name>
<servlet-class>com.itheima.web.ServletDemo13</servlet-class>
</servlet>
<!--
Servlet 访问路径
-->
<servlet-mapping>
<servlet-name>demo13</servlet-name>
<url-pattern>/demo13</url-pattern>
</servlet-mapping>
</web-app>
好的, 关于JavaWeb的第一期就到这里,具体介绍了HTTP,Tomcat和Servlet三门技术
下一期将会介绍Request和Response以及案例介绍
该文章属于学习内容,具体参考B站黑马程序员陈老师的JavaWeb课程
这里附上链接:01-Web核心介绍_哔哩哔哩_bilibili