狂神说JavaWeb详细笔记

目录

  • 概念
    • 前言
    • WEB应用程序
    • 动态WEB的访问过程
  • WEB服务器
    • 技术讲解
  • Tomcat
    • 安装tomcat
    • 配置
    • 发布一个WEB网站
  • HTTP
    • 什么是HTTP
    • HTTP的两个时代
    • HTTP请求
    • HTTP请求
  • Maven
    • Maven项目架构管理工具
    • 在IDEA里面使用Maven
    • 创建一个普通的Maven项目
    • 标记文件夹功能
    • 解决遇到的问题
  • Servlet简介
    • HelloServlet
    • Maven环境优化
    • Servlet原理
    • Mapping的问题
    • ServletContext
      • 共享数据
      • 获取初始化参数
      • 请求转发
      • 读取资源文件
    • HttpServletResponse
      • 简单分类
      • 下载文件
      • 实现重定向
      • 简单实现登录重定向
    • HttpServletRequest 获取参数,请求转发
    • Cookie、Session
    • 会话
    • 保存会话的两种技术
    • Cookie
  • JSP
    • 什么是JSP
    • JSP原理
    • JSP基础语法
    • JSP指令
    • 九大内置对象
    • JSP标签、JSTL标签、EL表达式
  • JavaBean
  • MVC三层架构
    • MVC三层架构
  • Filter(重点)
  • 监听器

概念

前言

静态Web:

. 提供给所有人看数据不会发生变化!
. HTML,CSS

动态Web:

.有数据交互,登录账号密码,网站访问人数等

. 技术栈:Servlet/JSP,ASP,PHP

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

WEB应用程序

Web 应用程序:可以提供浏览器访问的程序;

这个统一的web资源会被放在同一个文件夹下,Web 应用程序 —> Tomcat:服务器
一个 Web 应用由多部分组成(静态Web、动态Web)

HTML,CSS,JavaScript
JSP,Servlet
Java 程序
jar 包
配置文件 (Properties)

Web 应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理;

动态WEB的访问过程

狂神说JavaWeb详细笔记_第1张图片
浏览器发送 HTTP 请求,服务器 Tomcat 接收请求,Servlet 容器从磁盘加载 Servlet 程序处理请求 request ,处理结束返回 response。

WEB服务器

技术讲解

PHP:

作为开发速度很快,功能很强大,跨平台
无法承载大访问量的情况

JSP/Servlet:

基于 Java 语言

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目。

Tomcat 技术先进、性能稳定,而且免费。

Tomcat

安装tomcat

安装的地址:
http://tomcat.apache.org/
狂神说JavaWeb详细笔记_第2张图片
狂神说JavaWeb详细笔记_第3张图片## tomcat的启动和配置
狂神说JavaWeb详细笔记_第4张图片启动和关闭tomcat
狂神说JavaWeb详细笔记_第5张图片注意:
1.Java 环境变量没有配置导致闪退。
2.乱码问题,可在配置文件中配置。

配置

servlet的核心配置配置如下:
狂神说JavaWeb详细笔记_第6张图片可以配置启动的端口号
tomcat的默认端口号为:8080
mysql:3306
http:80
https:443

<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

可配置主机名称

默认的主机名为:localhost->127.0.0.1
默认网站应用存放的位置为:webapps

  <Host name="www.zty.com"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

往年面试题:请你谈谈网站是如何进行访问的!
在浏览器输入一个域名,回车;

本机查看 C:\Windows\System32\drivers\etc\hosts 配置文件是否有相应域名的映射。

case1: 若有,则直接映射到对应的 IP 地址,进行访问。

case2: 若无,则去 DNS 服务器上查找对应的 IP ,找到就返回相应的 IP,找不到就不返回。

狂神说JavaWeb详细笔记_第7张图片

狂神说JavaWeb详细笔记_第8张图片

发布一个WEB网站

网站程序的结构:

--webapps :Tomcat服务器的web目录
	-ROOT
	-study :网站的目录名
		- WEB-INF
			-classes : java程序
			-lib:web应用所依赖的jar包
			-web.xml :网站配置文件
		- index.html 默认的首页
		- static 
            -css
            	-style.css
            -js
            -img
         -.....

HTTP

什么是HTTP

HTTP(hypertext transport protocol) 超文本传输协议。

文本 :HTML,字符串…
超文本:图片,音乐,视频,定位,地图…
80 端口

HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer):是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL。

443 端口

HTTP的两个时代

HTTP 1.0:

HTTP/1.0:客户端与 Web 服务器连接后,只能获得一个Wen 资源,然后就断开连接,加入某个页面有多个图片资源需要加载,那么需要连接多次,影响服务器和客户端的性能。

HTTP 2.0:

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

HTTP请求

客户端 -> 发送请求(Request)->服务器

Request URL:https://www.baidu.com/   请求地址
Request Method:GET    get方法/post方法
Status Code:200 OK    状态码:200
Remote(远程) Address:14.215.177.39:443
1234
Accept:text/html  
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9    语言
Cache-Control:max-age=0
Connection:keep-alive

请求行

请求行中的请求方式:GET
请求方式:Get,Post,HEAD,DELETE,PUT,TRACT…

get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效

post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。

消息头:

Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.

HTTP请求

服务器 -> 响应(response) ->客户端

Cache-Control:private    缓存控制
Connection:Keep-Alive    连接
Content-Encoding:gzip    编码
Content-Type:text/html   类型

响应体

Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
Refresh:告诉客户端,多久刷新一次;
Location:让网页重新定位;

响应状态码

200:请求响应成功 200

3xx:请求重定向

重定向:你重新到我给你新位置去;

4xx:找不到资源 404

5xx:服务器代码错误 500 502:网关错误

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

Maven

在 JavaWeb 开发中,需要使用大量的 jar 包,我们手动去导入;
如何能够让一个东西自动帮我导入和配置这个jar包。
由此,Maven诞生了!

Maven项目架构管理工具

Maven 的核心思想:约定大于配置

有约束,不要去违反。
Maven 会规定好你该如何去编写我们的 Java 代码,必须要按照这个规范来;

在IDEA里面使用Maven

1、启动 IDEA
2、 创建一个 MavenWeb 项目
3、等待项目初始化完毕
4、观察 maven 仓库中多了什么东西?
5、 IDEA 中的 Maven 设置
注意:IDEA 项目创建成功后,看一眼 Maven 的配置
狂神说JavaWeb详细笔记_第9张图片

狂神说JavaWeb详细笔记_第10张图片
狂神说JavaWeb详细笔记_第11张图片
狂神说JavaWeb详细笔记_第12张图片
狂神说JavaWeb详细笔记_第13张图片
狂神说JavaWeb详细笔记_第14张图片
狂神说JavaWeb详细笔记_第15张图片
狂神说JavaWeb详细笔记_第16张图片

创建一个普通的Maven项目

狂神说JavaWeb详细笔记_第17张图片
狂神说JavaWeb详细笔记_第18张图片
狂神说JavaWeb详细笔记_第19张图片

标记文件夹功能

狂神说JavaWeb详细笔记_第20张图片
狂神说JavaWeb详细笔记_第21张图片
狂神说JavaWeb详细笔记_第22张图片
狂神说JavaWeb详细笔记_第23张图片
在IDEA中配置tomcat
狂神说JavaWeb详细笔记_第24张图片
狂神说JavaWeb详细笔记_第25张图片
狂神说JavaWeb详细笔记_第26张图片
狂神说JavaWeb详细笔记_第27张图片
狂神说JavaWeb详细笔记_第28张图片
狂神说JavaWeb详细笔记_第29张图片
狂神说JavaWeb详细笔记_第30张图片
Maven 由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:

<!--在build中配置resources,来防止我们资源导出失败的问题--><build>   
 <resources>  
       <resource>          
         <directory>src/main/resources</directory>            <includes>                <include>**/*.properties                **/*.xml</include>         
            </includes>            <filtering>true</filtering>  
                  </resource> 
                         <resource>            <directory>src/main/java</directory>            <includes>  
                                       <include>**/*.properties 
                                                      **/*.xml</include>   
                          
                                  
                               </includes>            <filtering>true</filtering>    
                                      </resource>    </resources>
                                      </build>

狂神说JavaWeb详细笔记_第31张图片狂神说JavaWeb详细笔记_第32张图片

解决遇到的问题

Maven 3.6.2
解决方法:降级为 3.6.1
Tomcat 闪退
IDEA中每次都要重复配置Maven
在IDEA中的全局默认配置中去配置
狂神说JavaWeb详细笔记_第33张图片
狂神说JavaWeb详细笔记_第34张图片
Maven 默认 Web 项目中的 web.xml 版本问题
狂神说JavaWeb详细笔记_第35张图片
替换为 webapp4.0 版本和 Tomcat 一致

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

Servlet简介

Servlet 就是 Sun 公司开发动态 Web 的一门技术

Sun 在这些 API (Application Programming Interface,应用程序接口)中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:

编写一个类,实现Servlet接口。
把开发好的Java类部署到web服务器中。

把实现了 Servlet 接口的 Java 程序叫做,Servlet

HelloServlet

Serlvet 接口 Sun 公司有两个默认的实现类:HttpServlet,GenericServlet

构建一个普通的Maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立Moudel;这个空的工程就是Maven主工程(建一个WebApp Maven项目,勾选模板);

关于Maven父子工程的理解:

父项目中会有:

    <modules>
        <module>servlet-01</module>
    </modules>

子项目会有:

    <parent>
        <artifactId>javaweb-02-servlet</artifactId>
        <groupId>com.lt</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

父项目的java子项目也可以用

 son extends father

Maven环境优化

修改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>

编写一个Servlet程序
狂神说JavaWeb详细笔记_第36张图片编写一个不同的类 继承HttpServelt

public class HelloServlet extends HttpServlet {
   
    //由于get或者post只是请求实现的方式不同,可以相互调用,业务逻辑都一样!
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        //ServletOutputStream outputStream = response.getOutputStream();
        PrintWriter writer = response.getWriter();//响应流
        writer.println("Hello Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        doGet(request, response);
    }
}


编写Servlet映射:
为什么需要映射:我们写的是 Java 程序,但是要通过浏览器访问,而浏览器需要连接 Web 服务器,所以我们需要在Web 服务中注册我们写的 Servlet,还需给他一个浏览器能够访问的路径;

<!--注册Servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.lt.servlet.HelloServlet</servlet-class>
    </servlet>
    <!--Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

Servlet原理

Servlet 是由 Web 服务器调用,Web 服务器在收到浏览器请求之后,
狂神说JavaWeb详细笔记_第37张图片

Mapping的问题

一个Servlet可以指定一个映射路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    <

你可能感兴趣的:(javaweb,tomcat,tomcat,java,intellij-idea)