遇见狂神说---JavaWeb部分笔记

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遇见狂神说---JavaWeb部分笔记相关的知识,希望对你有一定的参考价值。

传送门==>B站遇见狂神说—JavaWeb入门到实战

最近开始复习web部分;笔记和练习只是跟着视频整理的;但是有的知识点并没有整理进来(比如一些基础概念,安装步骤)


1.web基本; Tomcat安装使用

web应用程序,就是提供浏览器访问的程序;

html, css,js,jsp,servlet,java程序,jar包,配置文件(properties)

提供给外界访问,需要服务器统一管理.

静态web

.htm,.html…服务器上存在就能访问

静态web,所有用户看到的是同一个页面,无法动态更新;
可添加一些伪动态(javascript,VBstript)轮播图;点击特效;
数据无法持久化


动态web

页面会动态变化;
缺点:
若服务器上的动态web出问题,要重新编写后台程序


asp:在HTML语言中加入VB脚本;维护成本高.

php:开发速度快,功能强大,跨平台,代码简单,无法承载大访问量.

jsp:本质是servlet;基于java语言;可承载(高可用,高并发,高性能)的影响;语法像ASP.


服务器:处理用户请求,为用户响应信息.

Tomcat实际运行jsp,servlet.

官网下载==>http://tomcat.apache.org/

之前已安装,且已配置 ==> 下载安装配置Tomcat

bin : 存放启动和关闭Tomcat的脚本文件
conf : 存放Tomcat服务器的各种配置文件
lib : 存放Tomcat 服务器的资源 jar包
logs: 存放日志文件
temp : 存放运行时临时产生的临时文件
webapps : Web应用所在目录;即提供外界访问的web资源存放目录
work : Tomcat工作目录


在server.xml文件中可可进行配置文件修改;

此处可修改端口;端口默认8080,

此处可修改主机名称;但是修改 name 后要在系统文件修改主机名映射.

网站是如何进行访问的

1.客户端输入域名后,先查看浏览器缓存;
2.检查本机host文件;是否有域名映射;
若有,就返回对应的IP地址;可直接访问web程序;
若没有,在DNS服务器(全球域名管理)寻找;

web网站发布

将网页放到Tomcat的安装目录webapps文件中.
里面的默认首页的页面路径名为index.html.


2.http详细讲解

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。

HTTP;默认80;
HTTPS:默认443

HTTP1.0 ==>客户端与服务器连接后,只能获得一个web资源,会断开连接.

HTTP2.0 ==>客户端连接后可获得多个web资源.


例如;在百度网页打开F12,选择NetWork;crtl+R调出网络进程信息.

HTTP请求;


请求行

请求方式,有get,post,head,delete,put…

  • get:请求携带的参数较少,大小有限制,会在浏览器的url地址显示数据,不安全,但是高效
  • post与之相反.

消息头

Accept: 面向浏览器,支持的数据类型.
Accept-Encoding:向浏览器发送,支持的编码格式,常用的有gbk,utf8,gb2312.
Accept-Language: 语言环境
Cache-Control: 缓存控制
Connection: 请求完成是否断开或者保持连接
Host: 主机

HTTP响应

服务器=->响应 -=>客户端

响应头,

响应体,类似于消息头

refresh: 响应给客户端,多久刷新一次.
location: 让网页重新定位

响应状态码

1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
404-->资源不存在
5** 服务器错误,服务器在处理请求的过程中发生了错误
500-->服务器代码错误 ; 502-->网关错误


当浏览器地址输入地址后,回车,到页面展示;这个实际过程=>

解析 URL --> 浏览器封装 HTTP 请求报文 --> DNS 域名解析获取 IP 地址 --> 建立 TCP 连接 --> 浏览器发送请求 --> 负责传输的 IP 协议 --> 使用 ARP 协议凭借 MAC 地址通信 --> 服务器响应请求 --> 断开 TCP 连接 --> 浏览器显示界面


3.maven


使用Maven 可以自动导入,配置jar包.

核心思想:约定大于配置.

官网下载==>https://maven.apache.org/

已安装,环境配置,本地仓库,远程仓库::Maven安装配置


3.1IDEA中使用Maven

3.1.1创建固定模板的maven项目

(1)创建项目时,选择Maven,查看java的安装目录;勾选Create from archetype(采用maven的模板) ;注意选择的是maven—webapp;

(2)组名-项目名;

(3)填写maven安装地址,maven的setting文件地址;本地仓库配置

(4)新建完成

(5)在设置中查看maven设置;防止有时自动切换到别的版本;

(6)可以选择自动下载源码;

(7)这里默认是使用项目jdk


3.1.2创建普通的maven项目

在创建时不勾选模板,直接下一步

这里生成的目录中;Java 放置Java源代码;resources 中放置配置文件; 在test下的java中可进行测试使用


3.1.3标准的web

关闭普通的项目;打开之前用maven模板创建的项目;要创建,java,resources,…文件夹Directory.

有时可能由于版本问题,IDEA没有提示要创建这两个文件夹,就要手动去标注文件夹了;

(1)创建一个命名好的Directory后;
(2)右键点击文件夹,可看到 Mark Directory as (标记文件夹这个选项);出现了一列文件系列.
(3)Sources Root ==>表示存放源码文件夹 ;=== Test Sources Root ==>表示测试源码的文件夹;===
Resources Root ==>表示资源配置文件夹 ;=== test Resources Root ==>表示测试资源文件夹;
注意;这里excluded==>表示废弃排除的文件夹,一般不要设置错了

除了上面这种快捷方式可以标记文件的,还可以在 project structure (项目结构) 中的Modules (模块) 中进行配置;还有就是如果标记点错了,可以在右边找到对应文件点击 X取消掉标记就行了


3.2为项目部署Tomcat服务器

之前有用到过Tomcat的部署==>部署Tomcat

有点区别的是这里添加构架Artifact会跳出两个;选择第一个即可

这里的虚拟路径映射可以为空;

比如,这里我写了/xiaozhi;那么访问路径就是127.0.0.1:8080/xiaozhi;8080端口可以改的

启动服务器,默认加载的是index.jsp文件


查看maven

关于POM.XML

POM.XML是核心文件;

<?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>
<!-- 刚才配置的GVA -->
  <groupId>com.xiaozhi</groupId>
  <artifactId>javaweb01_2121825</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包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!--项目构建使用;目前可不使用-->
  <build>
    <finalName>javaweb01_2121825</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>

为防止资源导出失败;在build中需要配置resources

<!--为防止资源导出失败;在build中需要配置resources-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

目录树

在maven的管理栏中有这个图标;可自动生成jar包的关系图


部分问题

若出现需要重复配置maven问题;则在默认设置中配置;

即新项目的设置


这是默认maven默认生成的web.xml文件;可以更改;

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

要改成Tomcat的安装目录下的webappsROOT下的WEB-INFweb.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>

需要使用的资源出现错误;alt+enter 在maven中寻找

若找不到需要的资源可以在maven仓库寻找,找到依赖配置代码;然后在pom文件中使用依赖下载导入;
Maven仓库地址https://mvnrepository.com/

搜索找到需要的文件;

进入后,出现多个版本的,一般用人数使用多的;

选择版本后;下面会有maven对应的依赖代码,复制,粘贴到pom.xml文件即可

<scope>是作用域,这里可以删掉


练习
写个servlet类

package com.xiaozhi.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 MyServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应的类型;
        response.setContentType("text/html");
        //设置字符编码;
        response.setCharacterEncoding("utf-8");
        //响应的输出流;
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>servlet好耶</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

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_4_0.xsd"
         version="4.0"
         metadata-complete="true">
    <!--在web.xml文件中需要配置servlet-->
    <servlet>
        <!--servlet名字-->
        <servlet-name>MyServlet01</servlet-name>
        <!--在项目中的地址-->
        <servlet-class>com.xiaozhi.servlet.MyServlet01</servlet-class>
    </servlet>
    <!--servlet映射配置-->
    <servlet-mapping>
        <!--对应的servlet名-->
        <servlet-name>MyServlet01</servlet-name>
        <!--请求的url配置-->
        <url-pattern>/MyServlet01</url-pattern>
    </servlet-mapping>
</web-app>

启动,输入请求头对应的地址;


4. Servlet

4.1搭建父级下的子级项目

新建一个普通的maven项目,在POM.xml配置文件导入javax.servlet-api依赖;删掉src模块;作为空的父级工程.

 <!--导入依赖-->
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
    </dependencies>

创建一个Module模块,作为子工程;

创建后,可发现父级项目的pom文件自动生成了

父级项目的pom配置出现;

 <modules>
        <module>servletStudy-01</module>
    </modules>

子项目pom出现

<parent>
        <artifactId>javaweb03-servlet01</artifactId>
        <groupId>com.xiaozhi</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

且发现子项目继承了父项目的jar包;


创建好java,resources两个Directory目录;且进行标记;在java下新建servlet包;

写个类继承Httpservlet;用CTRL+H 查看类关系


初步理解;get和post只是请求方式不同,由于业务逻辑需要,可以相互调用.

编写Servlet的映射

在后端写的是Java程序,但是浏览器访问时需要连接web服务器,那么为了可访问到信息;就得指明访问路径以及注册servlet


4.2 Servlet运行原理

关于mapping映射;
可以让一个servlet一个映射路径,或者多个映射路径.

  • 一个映射路径.
 <servlet-mapping>
        <servlet-name>ServletBy01</servlet-name>
        <!--请求头地址-->
        <url-pattern>/ServletBy01</url-pattern>
    </servlet-mapping>
  • 多个映射路径;
<!--一个servlet可以映射一个,或者多个路径-->
    <servlet-mapping>
        <servlet-name>ServletBy01</servlet-name>
        <!--请求头地址-->
        <url-pattern>/ServletBy01</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ServletBy01</servlet-name>
        <!--请求头地址-->
        <url-pattern>/ServletBy02</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ServletBy01</servlet-name>
        <!--请求头地址-->
        <url-pattern>/ServletBy03</url-pattern>
    </servlet-mapping>
  • 也可以通配符* 解决通用请求路径.
 <!--也可以通配符* 解决通用请求路径-->
    <servlet-mapping>
        <servlet-name>ServletBy01</servlet-name>
        <!--请求头地址-->
        <url-pattern>/ServletBy01/*</url-pattern>
    </servlet-mapping>
  • 默认请求路径 /*
 <url-pattern>/*以上是关于遇见狂神说---JavaWeb部分笔记的主要内容,如果未能解决你的问题,请参考以下文章

《遇见狂神说》Javaweb之Servlet技术

遇见狂神说--记录MySql部分笔记

《遇见狂神说》Javaweb之jsp技术

遇见狂神说 --- [ 文件上传,邮件发送实现 ]

狂神说Java笔记--多线程详解部分笔记

狂神说Java笔记--反射和注解部分笔记