菜鸟学习笔记

学习笔记一

一、常见的软件结构的优缺点

CS: 客户端服务器
优点:用户体验好,可以将一些运算交给客户端完成,可以减轻服务器压力
缺点:开发成本高,维护成本高,开发周期长
BS: 浏览器服务器
优点:开发成本低,维护成本低,开发周期短
缺点:服务器压力大

二、web资源概述

-1. 什么是web资源:浏览器上显示的所有内容:文字,图片,视频,音频,超链接

| *分类 * | 概述 | 使用的技术 |
| 静态资源 | 内容直接写死在网页上 没有和数据库进行交互 | HTML/JS/CSS |
| 动态资源 | 内容来自数据库 | | JSP/Servlet |

2.a. web服务器的概念:运行在高性能计算机上的一个软件
b.web服务器的作用:可以将开发出来的资源提供给外界访问。

三、模拟一个web服务器

package com.pkx;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 需求:使用socket模拟一个web服务器:实现用户从浏览器访问服务器时返回一个网页给浏览器显示。
 */
public class MyTomcat extends Thread{

    private Socket socket;

    // alt + r
    public MyTomcat(Socket socket){
        this.socket = socket;
    }


    @Override
    public void run() {
        try{
            // 获得字节输出流对象
            OutputStream out = socket.getOutputStream();

            // 3. 返回数据给浏览器显示
            // 3.1 创建字节输入流关联目标文件
            FileInputStream fis = new FileInputStream("day01_课堂代码/hello.html");
            // 3.2 创建字节数组:用来存储读取到的文件数据
            byte[] buf = new byte[1024];
            // 3.3 读取内容到字节数组中
            int len = -1;
            while((len = fis.read(buf)) !=-1 ){
                // 4.1 将读取到的内容输出到浏览器
                out.write(buf);
            }
            socket.close();
            fis.close();
        } catch(Exception e){
            e.printStackTrace();
        }
    }

    // http://192.168.32.166:8888/
    public static void main(String[] args) throws Exception{
        // 1. 创建ServerSocket对象:一个该对象就代表一个服务器程序
        ServerSocket serverSocket = new ServerSocket(8888);

        while (true){
            // 2. accept:等待用户连接服务器并获得Socket
            Socket socket = serverSocket.accept();
            // 3. 创建线程
            MyTomcat tomcat = new MyTomcat(socket);
            // 4. 开启线程
            tomcat.start();
        }

    }
}

3.1:a.浏览器和服务器进行通信的过程
b.当浏览器访问指定的资源时,服务器会读取该资源发送给浏览器
c.浏览器接收到服务器返回的资源时会将解析资源数据并直接显示在网页上

四、Tomcat启动常见问题‘

  1. Tomcat启动常见问题
    a. 服务器启动一闪而过:没有配置JAVA_HOME或JRE_HOME 解决方案:配置JAVA_HOME
    b. Tomcat默认端口8080被其他程序占用 解决方案:1. 找到占用8080端口的程序并杀死 2. 修改Tomcat默认的端口号,修改conf/server.xml文件的第69行 ’
    2.Tomcat部署项目的三种方式
    方式1:直接将项目复制到webapps目录下即可
    方式2:配置虚拟目录
    项目可以存储在任意位置,修改conf/server.xml文件,修改第143行,添加如下代码

    方式3:配置独立的XML文件:
    在conf/Catalina/localhost目录下创建一个xml文件,名字可以任意:文件名就是项目的访问路径,在xml文件中
    添加如下代码:

五、Servlet概述和开发步骤

  1. Servlet的作用:用来接收请求和响应数据

  2. 什么是Servlet
    全称:Server Applet 服务器小程序 一个运行在服务器端的小程序(就是一个Java类)

  3. Servlet的开发步骤
    a. 创建一个类:实现一个Servlet接口
    b. 重写接口中的所有抽象方法
    c. 在重写的service方法中处理请求和响应数据
    d. 配置Servlet访问路径:xml配置或注解配置
    e. 将项目部署到服务器
    f. 打开浏览器访问Servlet
    4.配置演示:

    1. 需求:使用Servlet往浏览器输出:Hello Servlet
    2. 在 com.pkx.servlet 包下创建一个类HelloServlet 实现 Servlet 接口
    3. 在service方法。在浏览器上使用打印流输出:Hello Servlet
package com.pkx;

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;

/** 需求:使用Servlet往浏览器输出:Hello Servlet
 *  Servlet的开发步骤
 * 	  1. 创建一个类:实现一个Servlet接口
 *    2. 重写接口中的所有抽象方法
 *    3. 在重写的service方法中处理请求和响应数据
 *    4. 配置Servlet访问路径:xml配置
 *    5. 将项目部署到服务器
 *    6. 打开浏览器访问Servlet
 */

// 1. 创建一个类:实现一个Servlet接口
public class HelloServlet implements Servlet {

    // 2. 重写接口中的所有抽象方法
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    // 3. 在重写的service方法中处理请求和响应数据
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        // 获得字符输出流
        PrintWriter pw = servletResponse.getWriter();
        // 输出数据到浏览器
        pw.println("Hello Servlet");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

5.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">
    <servlet>
        <!--配置Servlet的名字-->
        <servlet-name>hello</servlet-name>
        <!--配置Servlet的类全名字符串:包含包名+类名的-->
        <servlet-class>com.pkx.HelloServlet</servlet-class>
    </servlet>
    <!--配置servlet的访问地址-->
    <servlet-mapping>
        <!--必须和上面的一致 -->
        <servlet-name>hello</servlet-name>
        <!-- Servlet的访问路径,必须/开头-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

6.总结:浏览器输入地址请求Servlet时会调用Servlet哪个方法?
调用service方法

六、Servlet注解配置

  1. 需求:使用Servlet往浏览器输出:Hello Servlet
  2. 在 com.pkx.servlet 包下创建一个类HelloServlet 实现 Servlet 接口
  3. 重写service方法。在浏览器上使用打印流输出:Hello Servlet
package com.pkx;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 需求:使用Servlet往浏览器输出:Hello Servlet
 * 实现步骤:
 *  1. 创建类实现接口:Servlet
 *  2. 重写接口的所有抽象方法
 *  3. 在service方法中处理请求和响应数据
 *  4. 配置Servlet的访问路径:使用注解配置
 *  5. 部署项目到服务器上
 *  6. 启动服务器并通过浏览器访问
 */
/**
 * @WebServlet作用:设置Servlet访问地址
 *  urlPatterns属性:访问路径,等价xml配置的标签: <url-pattern>/hello</url-pattern>
 *  name属性:设置名字,等价xml配置的标签:<servlet-name>hello</servlet-name>
 *  注意:name和urlPatterns属性值必须唯一
 */
@WebServlet(name = "hello",urlPatterns = "/hello")
public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        PrintWriter pw = servletResponse.getWriter();
        pw.println("Hello Servlet Annotation");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

总结:使用注解@WebServlet配置Servlet时通过哪个属性设置访问路径?
通过urlPatterns属性配置:@WebServlet(name = “hello”,urlPatterns = “/hello”)

七、Servlet相关

1.- Servlet是谁负责创建的:web服务器(Tomcat)

  • 什么时候创建Servlet:浏览器第一次访问时
  • 什么时候销毁Servlet:服务器关闭或重启
  • 一个Servlet在Tomcat中会生成几个对象:1个
    2.Servlet的运行原理
    a. 服务器启动时会解析web.xml文件:读取配置信息
    b. 服务器内部会创建两个Map集合存储配置信息
    b.1 Map<String,String> map01 = new HashMap();
    * 键:Servlet的名字 值:Servlet类全名字符串
    map01.put(“hello”,“com.pkx.HelloServlet”);
    b.2 Map<String,String> map02 = new HashMap();
    * 键:Servlet访问地址 值:Servlet的名字
    map02.put("/hello",“hello”);
    c. 用户输入访问地址:http://localhost:8080/day01/hello时
    服务器会从地址栏解析到请求的资源路径:/hello
    d. 将资源路径作为map02集合的键获得对应的值:map02.get("/hello"); 获得Servlet的名字
    e. 将Servlet的名字作为map01集合的键获得对应的值:map01.get(“hello”); 获得Servlet的类全名字符串
    f. 利用反射根据类全名字符串获得Class对象,然后就可以创建对应Servlet的对象
    g. 调用Servlet对象的service方法
  1. Servlet继承体系?
    Servlet – 接口
    GenericServlet – 抽象类
    HttpServlet – 抽象类

  2. 我们开发的Servlet类继承谁?
    因为浏览器和服务器通信使用的Http协议,所以以后开发Servlet都继承HttpServlet即可

  3. doPost和doGet方法如何调用执行的?
    在父类的service方法根据请求方式判断是调用doGet还是doPost,如果是get请求则调用doGet调用,如果是post请求则触发doPost调用。

  4. 什么时候重写doGet 什么时候重写doPost?
    如果表单中明确指定提交方式是post提交则重写doPost方法,其他一律重写doGet方法即可
    7.Servlet多个访问路径的映射
    XML方式1:一个中写多个

XML方式2:一个对应多个

注解方式3:
8.DefaultServlet的作用:

注意事项:
如果我们的项目中有 /* 的访问地址,则我们的地址会覆盖DefaultServlet的访问地址,会导致所有的 HTML 都无法访问。

八、注解配置原理

无描述

  1. 浏览器发送请求,Tomcat接收到请求并通过解析请求地址获取到要访问的项目和资源路径
    项目访问路径:/one
    资源路径:/hello

  2. Tomcat服务器内部会扫描one项目下的所有Servlet:获得每一个Servlet的访问地址并存储到集合中:Map<String,String> map = new HashMap<>();
    map.put("/hello",“com.pkx.HelloServlet”);

  3. 将 资源路径 /hello 作为键从map集合中获得值:类全名字符串

  4. 通过反射实例化这个Servlet对象

  5. 创建request和response对象

  6. 调用service方法,将request和response对象传递进来。

  7. 在service方法中通过response对象返回输出到浏览器,在浏览器上显示出来。

  8. 继承HttpServlet开发步骤
    a. 创建一个类继承HttpServlet
    b. 重写doGet或doPost方法:处理请求和响应数据
    c. 配置访问路径
    d. 部署到服务器并启动
    e. 浏览器访问即可

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值