javaweb

狂神视频

1、基本概念

1.1、前言

在这里插入图片描述

1.2、web应用程序

在这里插入图片描述
web应用程序编写完毕之后,若想提供给外界访问:需要一个服务器来统一管理

1.3、静态web

在这里插入图片描述
在这里插入图片描述

1.4、动态web

页面会动态展示:“web的页面展示的效果因人而异”
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、web服务器

2.1、技术讲解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2、Web服务器

在这里插入图片描述
在这里插入图片描述

3、Tomcat

3.1、Tomcat安装

tomcat官网

在这里插入图片描述
在这里插入图片描述

3.2、Tomcat配置文件

文件夹作用:
在这里插入图片描述
启动关闭Tomcat
在这里插入图片描述
访问测试

在这里插入图片描述

3.3、配置

在这里插入图片描述

在这里插入图片描述
这里修改主机名的时候还要去本地的system->drivers->etc下的host.xml文件修改主机对应的名称localhost修改成需要修改的名称。
在这里插入图片描述

在这里插入图片描述

高难度面试题

在这里插入图片描述
在这里插入图片描述

3.4、发布一个web网站

在这里插入图片描述
http协议:面试
Maven:构建工具

  • Maven安装包

Servlet入门

  • HelloWorld
  • Servlet配置
  • 原理

4、Http

4.1、什么是Http

http百度百科
在这里插入图片描述

4.2、两个时代

http1.0是短连接
http1.1是长连接
在这里插入图片描述

4.3、Http请求

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1、请求行

在这里插入图片描述

2、消息头

在这里插入图片描述

4.4、Http响应

在这里插入图片描述

1、响应体

在这里插入图片描述

2、响应状态码(重点)

在这里插入图片描述

常见面试题

当你的浏览器地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?

5、Maven

在这里插入图片描述

5.1、Maven项目架构管理工具

在这里插入图片描述

5.2、下载安装Maven

Maven官网
在这里插入图片描述
在这里插入图片描述
比如我下载包后解压到对应目录:D:\Java soft\apache-maven-3.6.3或者D:\teacher wang\apache-maven-3.6.3

5.3、配置Maven环境变量

右键 “计算机”,选择 “属性”,之后点击 “高级系统设置”,点击"环境变量",来设置环境变量,有以下系统变量需要配置:
新建系统变量 Maven_Home,变量值:D:\Java soft\apache-maven-3.6.3
在这里插入图片描述
编辑系统变量 Path,添加变量值:%Maven_Home%\bin;

在这里插入图片描述
注意:多个值之间需要有分号隔开,然后点击确定。

测试Maven是否安装成功,保证必须配置完毕
在这里插入图片描述

5.4、阿里云镜像

Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。
第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:

<mirrors> 
	<mirror> 
 		<id>alimaven</id>
	    <name>aliyun maven</name>
	    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		 <mirrorOf>central</mirrorOf> 
	 </mirror> 
 </mirrors>

在这里插入图片描述

在这里插入图片描述

5.5、本地仓库

  • 在 Maven 的术语中,仓库是一个位置(place)。
  • Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
  • 在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
  • Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
  • Maven 仓库有三种类型:本地(local)、中央(central)、远程(remote)

本地仓库

  • Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
  • 运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
  • 默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为.m2/respository/ 的仓库目录。
  • Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
<localRepository>
D:/techer wang/repomaven
</localRepository>
 </settings>
  • 当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。

注意:文件中的路径和Windows下的路径不一样,拷贝过来后要将\替换为/,而且不能包含中文。

5.6、中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
中央仓库的关键概念:

  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。

5.7、远程仓库

如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
举例说明,使用下面的 pom.xml,Maven 将从远程仓库中下载该 pom.xml 中声明的所依赖的(在中央仓库中获取不到的)文件。

<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> 
<version>1.0</version> 
<dependencies> 
<dependency> 
<groupId>com.companyname.common-lib</groupId> 
<artifactId>common-lib</artifactId> 
<version>1.0.0</version> </dependency> 
<dependencies> <repositories> <repository> 
<id>companyname.lib1</id> 
<url>http://download.companyname.org/maven2/lib1</url> 
</repository> <repository> 
<id>companyname.lib2</id> 
<url>http://download.companyname.org/maven2/lib2</url>
 </repository>
 </repositories> 
 </project>

5.8、Maven依赖搜索顺序

Maven依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:

  • 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
  • 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
  • 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
  • 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

5.6、IDEA中使用Maven

  1. 启动IDEA

  2. 创建一个Maven web项目
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 等待项目初始化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 观察maven仓库中多了什么东西?

  5. IDEA中Maven设置
    注意:IDEA项目创建成功后,看一眼Maven的设置
    在这里插入图片描述
    在这里插入图片描述

  6. 到这里,Maven在IDEA中的配置和使用就OK了

5.7、创建一个普通的Maven项目

在这里插入图片描述
在这里插入图片描述

5.8、标记文件夹功能

在这里插入图片描述
新建java、resources包然后要给他们标记功能
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.9、在IDEA中配置Tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决警告问题
必须要配置: 为什么会有这个问题:我们访问一个网站,需要指定一个文件夹名字,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.10、pom文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- Maven版本和头文件 -->
<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>
<!-- 这里是我们刚才配置的GAV -->
  <groupId>cn.dxj1016</groupId>
  <artifactId>javaweb-01-maven01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- package:项目的打包方式
  jar:java应用
  war:javaweb应用
  -->
  <packaging>war</packaging>

<!-- 配置 -->
  <properties>
    <!-- 项目的默认构建编码 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- 编码版本 -->
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
  
<!--项目依赖-->
  <dependencies>
    <!--具体依赖的jar包配置文件-->
    <!--Maven的高级之处在于:他会帮你导入这个jar包所依赖的其它jar-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!--项目构建用的东西-->
  <build>
    <finalName>javaweb-01-maven01</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

在这里插入图片描述

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、解决遇到的问题

  1. Maven 3.6.3
    在这里插入图片描述
    创建maven项目之后出现以上错误,打开日志文件查看错误信息,可以看到错误信息如下:
    在这里插入图片描述
    解决方法:降级为3.6.3版本。
    JDK和Maven不兼容的情况下,可以降级Maven或者升级JDK

  2. Tomcat闪退
    参考网站

  3. IDEA中每次都要重复配置Maven
    在IDEA中的全局默认配置中配置,Configure–>Settings
    在这里插入图片描述
    如果之前的maven版本修改了,没有修改全局配置这里的maven就会出错
    在这里插入图片描述

  4. Maven项目中Tomcat无法配置

  5. maven默认web项目中的web.xml版本问题
    在这里插入图片描述
    替换为webapp4.0版本和tomcat一致
    在这里插入图片描述

5.12、Maven仓库的使用

maven仓库

6、Servlet

6.1、Servlet简介

在这里插入图片描述

6.2、HelloServlet

在这里插入图片描述

在这里插入图片描述

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

Servlet、GenericServlet、HttpServlet和我们自己写的类之间关系:
在这里插入图片描述
servlet接口源码:

public interface Servlet {
//初始化
    void init(ServletConfig var1) throws ServletException;
//获得Servlet配置
    ServletConfig getServletConfig();
//Service
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
//获得Servlet信息
    String getServletInfo();
//销毁
    void destroy();
}

GenericServlet的源码:
发现实现了Servlet接口但是没有对接口的service方法做处理。

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
    public void destroy() {
    }
    public ServletConfig getServletConfig() {
        return this.config;
    }
     public String getServletInfo() {
        return "";
    }
     public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }
    public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

}

HttpServlet的源码:

public abstract class HttpServlet extends GenericServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getMethod();
        long lastModified;
        if (method.equals("GET")) {
            lastModified = this.getLastModified(req);
            if (lastModified == -1L) {
                this.doGet(req, resp);
            } else {
                long ifModifiedSince = req.getDateHeader("If-Modified-Since");
                if (ifModifiedSince < lastModified) {
                    this.maybeSetLastModified(resp, lastModified);
                    this.doGet(req, resp);
                } else {
                    resp.setStatus(304);
                }
            }
        } else if (method.equals("HEAD")) {
            lastModified = this.getLastModified(req);
            this.maybeSetLastModified(resp, lastModified);
            this.doHead(req, resp);
        } else if (method.equals("POST")) {
            this.doPost(req, resp);
        } else if (method.equals("PUT")) {
            this.doPut(req, resp);
        } else if (method.equals("DELETE")) {
            this.doDelete(req, resp);
        } else if (method.equals("OPTIONS")) {
            this.doOptions(req, resp);
        } else if (method.equals("TRACE")) {
            this.doTrace(req, resp);
        } else {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object[] errArgs = new Object[]{method};
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }

    }

}
  1. 编写一个Servlet程序
    编写一个普通类;
    实现Servlet接口,这里我们直接继承HttpServlet
package cn.dxj1016.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 {
        PrintWriter writer = resp.getWriter();
        writer.print("Hello,Servlet");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          doGet(req,resp);
    }
}

  1. 编写Servlet的映射

在这里插入图片描述

<!--注册Servlet-->
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>cn.dxj1016.servlet.HelloServlet</servlet-class>
    </servlet>
    <!--servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
</web-app>
  1. 配置Tomcat
    点击锤子那里的edit,然后点击+,选择tomcat–>local然后点击第二个,选择+artfact
    在这里插入图片描述
  2. 启动测试

6.3、Servlet原理

在这里插入图片描述
在这里插入图片描述

6.4、mapping问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.5、ServletContext

1、共享数据

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、获取初始化参数

web.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、请求转发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、读取资源文件

如果在java和resources下都新建了properties,但是classes中没有java中的,那么就在pom文件总加入build;这个也是上面讲到的使用build解决可能无法导入文件的问题。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.6、HttpServletResponse

在这里插入图片描述

1、简单分类

在这里插入图片描述
在这里插入图片描述

2、下载文件

在这里插入图片描述
在这里插入图片描述

3、验证码功能

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、实现重定向

在这里插入图片描述
在这里插入图片描述

面试题:请你聊聊重定向和转发的区别
  • 相同点
  1. 页面都会实现跳转
  • 不同点
  1. 请求转发的时候,url不会发生变化 端口为307
  2. 重定向的时候,url地址栏会发生变化 端口为302

在这里插入图片描述
实践
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

6.7、HttpServletRequest

在这里插入图片描述

获取前端传递的参数、请求转发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7、Cookie、Session

cookie相当于一个饼干,第一次访问的时候拦截你,然后我分了你一个饼干后,当你有了这个饼干就相当于有了一个令牌,下次再次访问的时候就不拦截你了。

7.1、会话

在这里插入图片描述

7.2、保存会话的两种技术

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
页面乱码问题:

  • 加上resp.setContentType(“text/html”);
  • 编码修改成GBK
  • 加上resp.setHeader(“Content-Type”,“text/html;charset=utf-8”);

跳转不到第一次访问的页面:换个浏览器,或者将cookie清除。

7.3、Cookie

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
URLEncoder.encode(“ddd”,“utf-8”);设置编码
URLEncoder.decode(cookie.getValue(),“utf-8”);解析编码

在这里插入图片描述

7.4、Session(重点)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注销session:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
加上ServletContext
如果有两个用户访问服务器,如果没有加上ServletContext,那么两个用户要想共享资源,由于session针对每个客户端开辟的一块存储空间,所以客户端彼此不通,加上一层就可以实现。
在这里插入图片描述

10、三次架构

什么是MVC:Model view Controller 模型、视图、控制器

10.1、早些年

在这里插入图片描述
在这里插入图片描述

10.2、MVC三层架构

在这里插入图片描述
在这里插入图片描述

11、Filter(重点)

在这里插入图片描述

7.1、Filter步骤

  1. 创建maven项目,导入依赖
    在这里插入图片描述
  2. 编写过滤器
    1. 导包不要错
      在这里插入图片描述

    2. 过滤器类,实现Filter接口,重写对应的方法即可
      在这里插入图片描述

    3. web.xml中配置Filter
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

12、监听器


实现一个监听器的接口(有N种)

  1. 编写一个监听器,实现监听器接口
    在这里插入图片描述
    在这里插入图片描述
  2. web.xml中注册监听器
    在这里插入图片描述
  3. 在jsp中获取
    在这里插入图片描述
    要销毁session的话可以在web.xml配置文件中配置session的过期时间,也可以直接在实现类中调用销毁方法。

13、过滤器、监听器常见应用

监听器:GUI经常用到
用户登录,成功进入主页,主页有注销,注销后进入登录页面,不成功进入错误页面,错误页面也有返回登录页面

在这里插入图片描述

14、JDBC复习

什么是JDBC:java连接数据库
在这里插入图片描述
在这里插入图片描述

  1. 建数据库表
    在这里插入图片描述
  2. 导入依赖
    在这里插入图片描述
  3. 连接数据库
    在这里插入图片描述
    在这里插入图片描述
    事务
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值