狂神讲解Java Web技术要点是什么?

2026-05-23 23:431阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计4472个文字,预计阅读时间需要18分钟。

狂神讲解Java Web技术要点是什么?

JavaWeb简介:

1.基本概念:Web开发,包括静态Web和动态Web,如淘宝等。

2.技术栈:Servlet/JSP、ASP、PHP等。

3.Web应用程序:提供浏览器访问的程序,如世界各地的网页。

javaweb

1、基本概念

web开发:

  • web
  • 静态web
  • 动态web
  • 淘宝,
  • 不断变化
  • 技术栈:Servlet/JSP ASP PHP

1.2、web应用程序

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

  • 能访问的任何页面都存在于世界的某个角落
  • URL
  • 这些同意的web资源会被放到同一个文件夹 Tomcat
  • 一个web 组成
  • html css js
  • jsp servlet
  • java程序
  • jar包
  • 配置文件(Properties)

外部访问需要服务器统一管理

1.3、静态web

2、web服务器

ASP:

  • 微软:
  • HTML中嵌入VB脚本

PHP

  • PHP开发速度快,功能强大,跨平台,代码简单
  • 无法承载大访问量的情况

JSP/Servlet

B/S

C/S

  • sun公司主推的B/S
  • 基于Java
  • 承载三高带来的影响
  • 语法像ASP

2.2、web服务器

一种被动的操作 处理用户强求和信息

IIS

微软的 ASP window自带

Tomcat

百度百科

手写Tomcat

3、Tomcat

启动关闭

Tomcat:8080

mysql:3306

hTTP:80

HTTPS:443

可以配置主机的名称

  • 默认主机名为:
  • 默认网站

高难度面试题

请你谈谈网站是如何进行访问的!

  • 输入域名,回车
  • 检查本机C:\Windows\System32\deivews\ect\hosts配置文件下有没有这个映射
  • 有:直接返回对应的IP地址,在这个地址中,有我们需要访问的web程序 直接访问
  • 127.0.0.1 www.mink.com
  • 没有:去DNS服务器上找,找到的话就返回,找不到返回找不到
  • 3.4、发布一个web网站

    先模仿

    • 将自己写的网站,放到Tomcat的webapps(应用的文件夹)下

    网站应该有的结构

    --webapps:Tomcat服务器的web目录 -ROOT -kuangstudy:网站的目录名 -WEB-INF -calsses:Java程序 -lib.xml :网站配置文件 -index.html 默认的首页 -static -css -style.css -js -img -.......

    4、HTTP

    4.1、什么是HTTP

    HTTP 简单的请求响应协议,通常运行在TCP之上

    • 文本
    • 超文本

    www.baidu.com/ 请求地址Request Method: GET 请求方式/POSTStatus Code: 200 OK 状态码:200Remote(远程) Address: 110.242.68.3:443Referrer Policy: strict-origin-when-cross-originAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cache-Control: max-age=0Connection: keep-aliveCookie: PSTM=1642766731; BAIDUID=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_UPN=12314753; BIDUPSID=09E509314F3EB3812F3612BCD6996E78; __yjs_duid=1_87aeb27da8e0a5310018c003dc9c8a141642819771266; BDSFRCVID_BFESS=vM4OJexroG0RE6oHNZuLhC45X-mPxN5TDYLEOwXPsp3LGJLVgaSTEG0PtfppquI-2ZlgogKKBeOTHn0F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=JJkO_D_atKvDqTrP-trf5DCShUFsKnolB2Q-XPoO3KJCsDQvyMTEbfAJLN8tXIrLLTbw_xbgylRp8P3y0bb2DUA1y4vpK-ogQgTxoUJ25tJ2qt5Vqj5Ah--ebPRi3tQ9QgbXopQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MC09j6KhDTPVKgTa54cbb4o2WbCQQ-Jd8pcN2b5oQT8wQHjyBU605G635K-ayT6VV-n8jqOUWfAkXpJvQnJjt2JxaqRC5bj6Sh5jDh3MbR8QKqoAe6jzaIvy0hvc0J5cShnkDMjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQhjGtOtjDttb32WnTJ25rHDbTw5tI_-P4DeUTWBxRZ56bHWh0MLqK-Dpn8MtoBMMJ3jJAL2lOOBJTnKUT1366OMCblK-RGQj-d3xJKQh343bRTLnQM-PjhOjC4W4vJhP-UyP5-Wh37aJRlMKoaMp78jR093JO4y4Ldj4oxJpOJ5JbMopCafDDbbD0xj6LBePtjMfbWetoQ265tWjrJabC3EfTJXU6qLT5X5tn8bxQqWgo0aPcS0K-hoKoOjTOTyl0njxQyWt7EtTRlanvy2DQGDbOCjMonDh8n3H7MJUntKHcAoj6O5hvvER5O3M7_DMKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQXH_Etj-OJJutoKvt-5rDHJTg5DTjhPrM54FJWMT-MTryKKJ43CQoOhrL5fvsLT30W2cLQnvwJGnRhlRNB-3iV-OxDUvnyxAZbUQgLUQxtNRJ0tJM-45zKDoLh-JobUPULxo9LUvXtgcdot5yBbc8eIna5hjkbfJBQttjQn3hfIkj2CKLK-oj-DK6DTu53q; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_HOME=1; H_PS_PSSID=35839_35104_31254_34584_35491_35872_35541_35796_35315_26350_35743; BA_HECTOR=018h01808lala5855p1h0m9ok0qHost: www.baidu.comsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36

    1、请求行
    • 请求行中的请求方式:GET
    • 请求方式:GET,POST,HEAD,DELETE,PUT,TRACT...
    • get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL显示内容,不安全,但高效
    • post:相反
    2、消息头
    Accept:告诉浏览器,他所支持的数据类型Cache-Control:缓存控制 Connection:告诉浏览器断开还是连接

    4.4、HTTP响应

    • 服务器--响应--客户端

    百度

    Bdqid: 0xe82971940005867b 缓存控制Connection: keep-alive 连接:保持连接Content-Encoding: gzip 编码Content-Type: text/html;charset=utf-8 类型
    1.响应体
    Accept:告诉浏览器,它所支持的数据类型Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 IS08859-1Accept-Language:告诉浏览器,它的语言环境Cache-Control:缓存控制Connection:告诉浏览器,请求完成是断开还是保持连接HOST: 主机..../.Refresh:告诉客户端,多久刷新1次;Location:让网页重新定位;
    2、响应状态码(重点)

    200:成功 200

    3**:请求重定向

    • 重定向:重新到新位置去302

    4**:找不到资源404

    • 资源不存在

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

    常见面试:

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

    5、Maven

    我为什么要学习这个技术?
  • 在Javaweb中需要导入大量jar包,需要手动导入
  • 如何能让一个东西自动帮我导入和配置jar包所以有了maven
  • 5.1、Maven项目架构管理工具

    就是方便导入jar包的

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

    • 有约束,不要去违反

    Maven会规定好应该如何写Java

    5.2、下载安装Maven

    官网

    下载完解压即可:

    狂神建议:电脑上的所有环境都放在哟个文件夹下

    5.3、环境变量配置

    在我们的系统环境变量配置中配置如下配置:

    • M2_HOME maven目录下的bin目录
    • MAVEN_HOME maven的目录
    • 在系统的path中配置%MAVEN_HOME%\bin

    5.4、阿里云镜像

    • 镜像:mirrors
    • 作用加速
    • 在setttins.xml文件中找到<mirrors></mirrors>标签对,进行修改:
    <mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf> <name>Nexus aliyun</name> <url>maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>

    5.5、本地仓库

    在本地的仓库,远程仓库;

    建立一个本地仓库:

    <localRepository>D:\Java_IDE\apache-maven-3.8.4\maven-repo</localRepository>

    5.6、在IDEA中使用Maven

  • 启动idea‘
  • 创建一个Maven项目
  • 等待初始化完毕
  • 观察仓库的变化,多了什么东西?
  • IDEA中的maven设置
  • 注意更改默认位置
  • over
  • 5.7、创建一个普通的maven项目

    这个只有在web下才有

    5.8、在idea中标记

    配置Tomcat

    解决警告问题 为什么会有这个问题:我们访问一一个网站,需要指定一个文件夹名字;****

    5.10、POM文件

    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.12、IDEA操作

    目录树

    5.13、解决遇到的问题

  • Maven 3.6.2
  • 解决方法:退
  • Tomcat闪退
  • Idea中每次都要重复配置Maven
  • 在IDEA的全局默认配置去配
  • Maven项目中Tomcat中不能配置
  • .乱码:
  • resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8");
  • .
  • Maven仓库的使用

    官网:​​mvnrepository.com/​​

    6、什么是servlet

    6.1、servlet简介

    • sun开发动态web的一门技术
    • sun在这些api中提供了一个接口叫servlet,开发的两个步骤
    • 编写一个类,实现servlet接口
    • 把开发好的java类部署到web服务器中

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

    6.2、HelloServlet

    servlet接口在sun公司有两个默认的的实现类:

    HttpServlet,GenericServlet

  • 构建一个普通的maven项目,删掉里面的里面的scr目录,以后就在这里面建立model,这个空的工程就是文件的主工程
  • 关于maven父子工程的理解:
  • 父项目中会有
  • <modules> <module>servlet-01</module> </modules>
  • 子项目中会有
  • 没了<parent> <artifactId>javaweb-02-servlet</artifactId> <groupId>com.mink</groupId> <version>1.0-SNAPSHOT</version></parent>

    继承差不多

    Maven环境优化
  • 修改web.xml为最新 (与tomcat匹配)
  • <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> </web-app>
  • 将整个maven的架构搭建完整
  • 编写一个servlet程序
  • 编写一个普通类
  • 实现servlet接口,这里我们直接继承HttpServlet
  • public class HelloServlet extends HttpServlet { //由于get或者post知识请求的实现的不同方式,可以相互调用 public HelloServlet() { } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.println("你好,mink"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); }}
  • 编写servlet的映射
  • 为何什么要映射?我写的是Java,但是要通过浏览器访问,浏览器需要连接web服务器,所以我们需要在web服务器中注册我写的servlet,还需要给他一个浏览器访问的路径
  • <!-- 注册servlet--><servlet> <servlet-name>hello</servlet-name> <servlet-class>com.mink.servlet.HelloServlet</servlet-class></servlet><!-- servlet请求路径--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
  • 配置tomcat
  • 启动测试 ok
  • 6.3、servlet原理

    servlet是由web服务器调用,web服务器在收到浏览器请求之后会:

    狂神讲解Java Web技术要点是什么?

    6.4、mapping问题

  • 一个servlet可以指定一个映射路径
  • 一个servlet可以指定多个映射路径
  • <!-- 注册servlet--> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.mink.servlet.HelloServlet</servlet-class> </servlet><!-- servlet请求路径--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/1</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/2</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/3</url-pattern> </servlet-mapping>
  • 一个servlet可以指定通用映射路径
  • <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
  • 请求默认路径
  • <!--默认请求路径 下面这个能把首页干掉--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
  • 指定后缀或前缀等
  • <!--默认请求路径 下面这个能把首页干掉--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
  • 优先级问题 指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
  • <servlet> <servlet-name>error</servlet-name> <servlet-class>com.mink.servlet.ErrorServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>error</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>

    6.5、ServletContext

    web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象, 它代表了当前 的web应用;

    1、共享数据
    • 在这个servlet保存的数据可以在另一个拿到
    public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //this. getInitParameter() 初始化参数 //this. getServletConfig() Servlet配置 //this. getServLetContext() Servlet上下文 ServletContext context = this.getServletContext(); String name="韩明"; context.setAttribute("name",name);//将一个数据保存在context中 resp.getWriter().print("hello"); System.out.println("hello"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}public class GetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); ServletContext context = this.getServletContext(); String name = (String) context.getAttribute("name"); resp.getWriter().print(("名字"+name)); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"><display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.mink.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet> <servlet-name>getc</servlet-name> <servlet-class>com.mink.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>getc</servlet-name> <url-pattern>/getc</url-pattern> </servlet-mapping></web-app>
    2、获取初始化参数
    <!-- 设置一些web应用初始化参数--> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql//localhost:3306/mybatis</param-value> </context-param>public class ServletDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); ServletContext context = this.getServletContext(); String url = context.getInitParameter("url"); resp.getWriter().print(url); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}
    3、请求转发
    public class ServletDemo04 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); System.out.println("进去了04"); ServletContext context = this.getServletContext(); context.getRequestDispatcher("/gp").forward(req,resp);// RequestDispatcher gp = context.getRequestDispatcher("gp");// gp.forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}<servlet> <servlet-name>sd3</servlet-name> <servlet-class>com.mink.servlet.ServletDemo03</servlet-class> </servlet> <servlet-mapping> <servlet-name>sd3</servlet-name> <url-pattern>/gp</url-pattern> </servlet-mapping> <servlet> <servlet-name>sd4</servlet-name> <servlet-class>com.mink.servlet.ServletDemo04</servlet-class> </servlet> <servlet-mapping> <servlet-name>sd4</servlet-name> <url-pattern>/sd4</url-pattern> </servlet-mapping>

    4、读取资源文件

    Properties

    • 在java目录下新建properties
    • 在resources下新建properties

    两个都被打包到理同意路径下:classes,我们俗称这个路径为classpath

    思路:需要一个文件流

    public class ServletDemo05 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties prop = new Properties(); prop.load(is); String uname = prop.getProperty("username"); String pwd = prop.getProperty("password"); resp.getWriter().print(uname+":"+pwd); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}

    访问测试即可ok!!!

    6.6、HttpResponse

    web服务器接收到客户端的localhost: 8080/jsptag. jsp?name-kuangshen&age=12--%><jsp :forward page="/jsptag2.jsp"><jsp :paramname="name"value="kuangshen"></jsp :param><jsp :param name="age" value="12"></jsp :param></jsp : forward>

    JSTL表达式

    弥补html的不足

    核心标签(掌握部分)
    <%@ taglib prefix="c" uri="java.sun.com/jsp/jstl/core" %>

    使用步骤

    • 引入队应的taglib
    格式化标签
    SQL标签
    XML标签

    9、JavaBean

    实体类

    实体类 JavaBean有特定的写法: ●必须要有一个无参构造 ●属性必须私有化 ●必须有对应的get/set方法;

    一般用来和数据库的字段做映射 ORM;

    ORM:对象关系映射

    • 表-->类
    • 字段-->属性
    • 行记录-->对象

    id

    name

    age

    address

    1

    秦将1号

    3

    2

    秦将2号

    18

    3

    秦将3号

    100

    ????????????????????????

    10、MVC三层框架

    Model

    View

    Controller

    10.1、早些年

    Servlet和Jsp都可以写ava代码;为了易于维护和使用; Servlet专注于处理请求,以及控制视图跳转 JSP专注于显示数据

    用户直接访问控制层,控制层就可以直接操作数据库;

    servlet--CRUD-->数据库弊端:程序十分臃肿,不利于维护servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码架构:没有什么是加一-层解决不了的!程序猿调用|JDBC|Mysq1 Oracle Sq1Server

    10.2、MVC三层架构

    Model

    • 业务处理:业务逻辑(Service)
    • 数据持久层:CRUD(Dao)

    View

    • 展示数据
    • 提供连接发送Servlet请求

    Controller

    • 接受用户请求
    • 交给业务层处理响应的代码
    • 控制视图的跳转
    登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username, password) ---->交给业务层处理登录业务(判断用户名密码是否正确:事务) --->Dao层查询用户名和密码是否正确-->数据库

    11、Filter

    Filter:过滤器,过滤网站数据

    • 处理中文乱码
    • 登录验证

    servlet版本3.1.0

    12、监听器

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

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

    监听器:GUI种常用

    用户登录后才能进入主页

    本文共计4472个文字,预计阅读时间需要18分钟。

    狂神讲解Java Web技术要点是什么?

    JavaWeb简介:

    1.基本概念:Web开发,包括静态Web和动态Web,如淘宝等。

    2.技术栈:Servlet/JSP、ASP、PHP等。

    3.Web应用程序:提供浏览器访问的程序,如世界各地的网页。

    javaweb

    1、基本概念

    web开发:

    • web
    • 静态web
    • 动态web
    • 淘宝,
    • 不断变化
    • 技术栈:Servlet/JSP ASP PHP

    1.2、web应用程序

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

    • 能访问的任何页面都存在于世界的某个角落
    • URL
    • 这些同意的web资源会被放到同一个文件夹 Tomcat
    • 一个web 组成
    • html css js
    • jsp servlet
    • java程序
    • jar包
    • 配置文件(Properties)

    外部访问需要服务器统一管理

    1.3、静态web

    2、web服务器

    ASP:

    • 微软:
    • HTML中嵌入VB脚本

    PHP

    • PHP开发速度快,功能强大,跨平台,代码简单
    • 无法承载大访问量的情况

    JSP/Servlet

    B/S

    C/S

    • sun公司主推的B/S
    • 基于Java
    • 承载三高带来的影响
    • 语法像ASP

    2.2、web服务器

    一种被动的操作 处理用户强求和信息

    IIS

    微软的 ASP window自带

    Tomcat

    百度百科

    手写Tomcat

    3、Tomcat

    启动关闭

    Tomcat:8080

    mysql:3306

    hTTP:80

    HTTPS:443

    可以配置主机的名称

    • 默认主机名为:
    • 默认网站

    高难度面试题

    请你谈谈网站是如何进行访问的!

  • 输入域名,回车
  • 检查本机C:\Windows\System32\deivews\ect\hosts配置文件下有没有这个映射
  • 有:直接返回对应的IP地址,在这个地址中,有我们需要访问的web程序 直接访问
  • 127.0.0.1 www.mink.com
  • 没有:去DNS服务器上找,找到的话就返回,找不到返回找不到
  • 3.4、发布一个web网站

    先模仿

    • 将自己写的网站,放到Tomcat的webapps(应用的文件夹)下

    网站应该有的结构

    --webapps:Tomcat服务器的web目录 -ROOT -kuangstudy:网站的目录名 -WEB-INF -calsses:Java程序 -lib.xml :网站配置文件 -index.html 默认的首页 -static -css -style.css -js -img -.......

    4、HTTP

    4.1、什么是HTTP

    HTTP 简单的请求响应协议,通常运行在TCP之上

    • 文本
    • 超文本

    www.baidu.com/ 请求地址Request Method: GET 请求方式/POSTStatus Code: 200 OK 状态码:200Remote(远程) Address: 110.242.68.3:443Referrer Policy: strict-origin-when-cross-originAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cache-Control: max-age=0Connection: keep-aliveCookie: PSTM=1642766731; BAIDUID=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_UPN=12314753; BIDUPSID=09E509314F3EB3812F3612BCD6996E78; __yjs_duid=1_87aeb27da8e0a5310018c003dc9c8a141642819771266; BDSFRCVID_BFESS=vM4OJexroG0RE6oHNZuLhC45X-mPxN5TDYLEOwXPsp3LGJLVgaSTEG0PtfppquI-2ZlgogKKBeOTHn0F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=JJkO_D_atKvDqTrP-trf5DCShUFsKnolB2Q-XPoO3KJCsDQvyMTEbfAJLN8tXIrLLTbw_xbgylRp8P3y0bb2DUA1y4vpK-ogQgTxoUJ25tJ2qt5Vqj5Ah--ebPRi3tQ9QgbXopQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MC09j6KhDTPVKgTa54cbb4o2WbCQQ-Jd8pcN2b5oQT8wQHjyBU605G635K-ayT6VV-n8jqOUWfAkXpJvQnJjt2JxaqRC5bj6Sh5jDh3MbR8QKqoAe6jzaIvy0hvc0J5cShnkDMjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQhjGtOtjDttb32WnTJ25rHDbTw5tI_-P4DeUTWBxRZ56bHWh0MLqK-Dpn8MtoBMMJ3jJAL2lOOBJTnKUT1366OMCblK-RGQj-d3xJKQh343bRTLnQM-PjhOjC4W4vJhP-UyP5-Wh37aJRlMKoaMp78jR093JO4y4Ldj4oxJpOJ5JbMopCafDDbbD0xj6LBePtjMfbWetoQ265tWjrJabC3EfTJXU6qLT5X5tn8bxQqWgo0aPcS0K-hoKoOjTOTyl0njxQyWt7EtTRlanvy2DQGDbOCjMonDh8n3H7MJUntKHcAoj6O5hvvER5O3M7_DMKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQXH_Etj-OJJutoKvt-5rDHJTg5DTjhPrM54FJWMT-MTryKKJ43CQoOhrL5fvsLT30W2cLQnvwJGnRhlRNB-3iV-OxDUvnyxAZbUQgLUQxtNRJ0tJM-45zKDoLh-JobUPULxo9LUvXtgcdot5yBbc8eIna5hjkbfJBQttjQn3hfIkj2CKLK-oj-DK6DTu53q; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_HOME=1; H_PS_PSSID=35839_35104_31254_34584_35491_35872_35541_35796_35315_26350_35743; BA_HECTOR=018h01808lala5855p1h0m9ok0qHost: www.baidu.comsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36

    1、请求行
    • 请求行中的请求方式:GET
    • 请求方式:GET,POST,HEAD,DELETE,PUT,TRACT...
    • get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL显示内容,不安全,但高效
    • post:相反
    2、消息头
    Accept:告诉浏览器,他所支持的数据类型Cache-Control:缓存控制 Connection:告诉浏览器断开还是连接

    4.4、HTTP响应

    • 服务器--响应--客户端

    百度

    Bdqid: 0xe82971940005867b 缓存控制Connection: keep-alive 连接:保持连接Content-Encoding: gzip 编码Content-Type: text/html;charset=utf-8 类型
    1.响应体
    Accept:告诉浏览器,它所支持的数据类型Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 IS08859-1Accept-Language:告诉浏览器,它的语言环境Cache-Control:缓存控制Connection:告诉浏览器,请求完成是断开还是保持连接HOST: 主机..../.Refresh:告诉客户端,多久刷新1次;Location:让网页重新定位;
    2、响应状态码(重点)

    200:成功 200

    3**:请求重定向

    • 重定向:重新到新位置去302

    4**:找不到资源404

    • 资源不存在

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

    常见面试:

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

    5、Maven

    我为什么要学习这个技术?
  • 在Javaweb中需要导入大量jar包,需要手动导入
  • 如何能让一个东西自动帮我导入和配置jar包所以有了maven
  • 5.1、Maven项目架构管理工具

    就是方便导入jar包的

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

    • 有约束,不要去违反

    Maven会规定好应该如何写Java

    5.2、下载安装Maven

    官网

    下载完解压即可:

    狂神建议:电脑上的所有环境都放在哟个文件夹下

    5.3、环境变量配置

    在我们的系统环境变量配置中配置如下配置:

    • M2_HOME maven目录下的bin目录
    • MAVEN_HOME maven的目录
    • 在系统的path中配置%MAVEN_HOME%\bin

    5.4、阿里云镜像

    • 镜像:mirrors
    • 作用加速
    • 在setttins.xml文件中找到<mirrors></mirrors>标签对,进行修改:
    <mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf> <name>Nexus aliyun</name> <url>maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>

    5.5、本地仓库

    在本地的仓库,远程仓库;

    建立一个本地仓库:

    <localRepository>D:\Java_IDE\apache-maven-3.8.4\maven-repo</localRepository>

    5.6、在IDEA中使用Maven

  • 启动idea‘
  • 创建一个Maven项目
  • 等待初始化完毕
  • 观察仓库的变化,多了什么东西?
  • IDEA中的maven设置
  • 注意更改默认位置
  • over
  • 5.7、创建一个普通的maven项目

    这个只有在web下才有

    5.8、在idea中标记

    配置Tomcat

    解决警告问题 为什么会有这个问题:我们访问一一个网站,需要指定一个文件夹名字;****

    5.10、POM文件

    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.12、IDEA操作

    目录树

    5.13、解决遇到的问题

  • Maven 3.6.2
  • 解决方法:退
  • Tomcat闪退
  • Idea中每次都要重复配置Maven
  • 在IDEA的全局默认配置去配
  • Maven项目中Tomcat中不能配置
  • .乱码:
  • resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8");
  • .
  • Maven仓库的使用

    官网:​​mvnrepository.com/​​

    6、什么是servlet

    6.1、servlet简介

    • sun开发动态web的一门技术
    • sun在这些api中提供了一个接口叫servlet,开发的两个步骤
    • 编写一个类,实现servlet接口
    • 把开发好的java类部署到web服务器中

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

    6.2、HelloServlet

    servlet接口在sun公司有两个默认的的实现类:

    HttpServlet,GenericServlet

  • 构建一个普通的maven项目,删掉里面的里面的scr目录,以后就在这里面建立model,这个空的工程就是文件的主工程
  • 关于maven父子工程的理解:
  • 父项目中会有
  • <modules> <module>servlet-01</module> </modules>
  • 子项目中会有
  • 没了<parent> <artifactId>javaweb-02-servlet</artifactId> <groupId>com.mink</groupId> <version>1.0-SNAPSHOT</version></parent>

    继承差不多

    Maven环境优化
  • 修改web.xml为最新 (与tomcat匹配)
  • <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> </web-app>
  • 将整个maven的架构搭建完整
  • 编写一个servlet程序
  • 编写一个普通类
  • 实现servlet接口,这里我们直接继承HttpServlet
  • public class HelloServlet extends HttpServlet { //由于get或者post知识请求的实现的不同方式,可以相互调用 public HelloServlet() { } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.println("你好,mink"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); }}
  • 编写servlet的映射
  • 为何什么要映射?我写的是Java,但是要通过浏览器访问,浏览器需要连接web服务器,所以我们需要在web服务器中注册我写的servlet,还需要给他一个浏览器访问的路径
  • <!-- 注册servlet--><servlet> <servlet-name>hello</servlet-name> <servlet-class>com.mink.servlet.HelloServlet</servlet-class></servlet><!-- servlet请求路径--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
  • 配置tomcat
  • 启动测试 ok
  • 6.3、servlet原理

    servlet是由web服务器调用,web服务器在收到浏览器请求之后会:

    狂神讲解Java Web技术要点是什么?

    6.4、mapping问题

  • 一个servlet可以指定一个映射路径
  • 一个servlet可以指定多个映射路径
  • <!-- 注册servlet--> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.mink.servlet.HelloServlet</servlet-class> </servlet><!-- servlet请求路径--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/1</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/2</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/3</url-pattern> </servlet-mapping>
  • 一个servlet可以指定通用映射路径
  • <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
  • 请求默认路径
  • <!--默认请求路径 下面这个能把首页干掉--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
  • 指定后缀或前缀等
  • <!--默认请求路径 下面这个能把首页干掉--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
  • 优先级问题 指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
  • <servlet> <servlet-name>error</servlet-name> <servlet-class>com.mink.servlet.ErrorServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>error</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>

    6.5、ServletContext

    web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象, 它代表了当前 的web应用;

    1、共享数据
    • 在这个servlet保存的数据可以在另一个拿到
    public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //this. getInitParameter() 初始化参数 //this. getServletConfig() Servlet配置 //this. getServLetContext() Servlet上下文 ServletContext context = this.getServletContext(); String name="韩明"; context.setAttribute("name",name);//将一个数据保存在context中 resp.getWriter().print("hello"); System.out.println("hello"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}public class GetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); ServletContext context = this.getServletContext(); String name = (String) context.getAttribute("name"); resp.getWriter().print(("名字"+name)); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"><display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.mink.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet> <servlet-name>getc</servlet-name> <servlet-class>com.mink.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>getc</servlet-name> <url-pattern>/getc</url-pattern> </servlet-mapping></web-app>
    2、获取初始化参数
    <!-- 设置一些web应用初始化参数--> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql//localhost:3306/mybatis</param-value> </context-param>public class ServletDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); ServletContext context = this.getServletContext(); String url = context.getInitParameter("url"); resp.getWriter().print(url); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}
    3、请求转发
    public class ServletDemo04 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); System.out.println("进去了04"); ServletContext context = this.getServletContext(); context.getRequestDispatcher("/gp").forward(req,resp);// RequestDispatcher gp = context.getRequestDispatcher("gp");// gp.forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}<servlet> <servlet-name>sd3</servlet-name> <servlet-class>com.mink.servlet.ServletDemo03</servlet-class> </servlet> <servlet-mapping> <servlet-name>sd3</servlet-name> <url-pattern>/gp</url-pattern> </servlet-mapping> <servlet> <servlet-name>sd4</servlet-name> <servlet-class>com.mink.servlet.ServletDemo04</servlet-class> </servlet> <servlet-mapping> <servlet-name>sd4</servlet-name> <url-pattern>/sd4</url-pattern> </servlet-mapping>

    4、读取资源文件

    Properties

    • 在java目录下新建properties
    • 在resources下新建properties

    两个都被打包到理同意路径下:classes,我们俗称这个路径为classpath

    思路:需要一个文件流

    public class ServletDemo05 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties prop = new Properties(); prop.load(is); String uname = prop.getProperty("username"); String pwd = prop.getProperty("password"); resp.getWriter().print(uname+":"+pwd); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}

    访问测试即可ok!!!

    6.6、HttpResponse

    web服务器接收到客户端的localhost: 8080/jsptag. jsp?name-kuangshen&age=12--%><jsp :forward page="/jsptag2.jsp"><jsp :paramname="name"value="kuangshen"></jsp :param><jsp :param name="age" value="12"></jsp :param></jsp : forward>

    JSTL表达式

    弥补html的不足

    核心标签(掌握部分)
    <%@ taglib prefix="c" uri="java.sun.com/jsp/jstl/core" %>

    使用步骤

    • 引入队应的taglib
    格式化标签
    SQL标签
    XML标签

    9、JavaBean

    实体类

    实体类 JavaBean有特定的写法: ●必须要有一个无参构造 ●属性必须私有化 ●必须有对应的get/set方法;

    一般用来和数据库的字段做映射 ORM;

    ORM:对象关系映射

    • 表-->类
    • 字段-->属性
    • 行记录-->对象

    id

    name

    age

    address

    1

    秦将1号

    3

    2

    秦将2号

    18

    3

    秦将3号

    100

    ????????????????????????

    10、MVC三层框架

    Model

    View

    Controller

    10.1、早些年

    Servlet和Jsp都可以写ava代码;为了易于维护和使用; Servlet专注于处理请求,以及控制视图跳转 JSP专注于显示数据

    用户直接访问控制层,控制层就可以直接操作数据库;

    servlet--CRUD-->数据库弊端:程序十分臃肿,不利于维护servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码架构:没有什么是加一-层解决不了的!程序猿调用|JDBC|Mysq1 Oracle Sq1Server

    10.2、MVC三层架构

    Model

    • 业务处理:业务逻辑(Service)
    • 数据持久层:CRUD(Dao)

    View

    • 展示数据
    • 提供连接发送Servlet请求

    Controller

    • 接受用户请求
    • 交给业务层处理响应的代码
    • 控制视图的跳转
    登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username, password) ---->交给业务层处理登录业务(判断用户名密码是否正确:事务) --->Dao层查询用户名和密码是否正确-->数据库

    11、Filter

    Filter:过滤器,过滤网站数据

    • 处理中文乱码
    • 登录验证

    servlet版本3.1.0

    12、监听器

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

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

    监听器:GUI种常用

    用户登录后才能进入主页