初识 Servlet

Web 的发展基础

Socket 编程

  • 客户端
    • 向服务器发起请求,并传递数据
  • 服务端
    • 接收客户端的请求,并响应数据
  • 通信规则
    • TCP/IP 协议

服务器的出现

  • 常见服务器:Tomcat、JBOOS、Apache、Jetty等
  • 服务器的作用:
    • 服务器统一接收客户端处理并进行分发到不同的资源,由各个资源进行处理,最后结果交由服务器响应。

Java Web

  • C/S体系结构
    • 客户端和服务端模式
  • B/S体系结构
    • 浏览器和服务端模式
  • 区别:
    • C/S采用高性能的PC端或工作站,使用大型数据库,效率高,但是成本也高。
    • C/S一般用于局域网,B/S一般用广域网。
    • C/S的使用人员相对固定,B/S使用人群不固定。
    • C/S需要安装专用得客户机,需要专业人员维护,维护成本高。
  • Web应用技术
    • 客户端技术:
      • HTML
      • CSS
      • JavaScript
    • 服务端技术:
      • Servlet
      • JSP

Tomcat

​ Tomcat是符合JavaEE和Web标准的最小 Web容器。

  • 特点:

    • 技术先进、性能稳定、免费开源
  • 安装:

    • 需要在系统环境变量中配置JAVA_HOME
  • 目录结构:

    • bin:存放相关的脚本
      • startup.bat 启动服务器
      • shutdown.bat 关闭服务器
    • lib:存放jar包
    • conf:存放配置文件
      • server.xml 中可以修改服务器默认的8080端口
    • logs:存放打印的日志记录的
    • webapps:存放项目资源
    • work:JSP的源码会生成在该目录下

HTTP 协议

HTTP 简介

​ Http是超文本传输协议,是应用层协议

HTTP 协议的路径格式

  • http://IP?或域名:[port]/项目路径/项目中的资源路径?参数名=参数值
    • http://:表示但前使用的HTTP超文本传输协议
    • IP|域名:表示当前主机的IP或域名
      • 本地:localhost | 127.0.0.1
    • port:服务器的端口
      • tomcat:8080

HTTP 协议的特点

  • 支持客户端和服务端模式
  • 简单快捷
  • 灵活
  • HTTP1.1后支持持续连接
  • 无状态:协议对于事务处理没有记忆能力

请求协议

  • 客户端向服务端发起请求时的协议
  • 请求协议由三部分构成
    1. 请求行:
      1. 请求方式 GET/POST
      2. 请求路径
      3. 请求协议版本
    2. 请求头
      • 键值对组成,键: 值;多个请求头之间会换行
    3. 请求正文
      • GET请求没有请求正文,POST请求才有(From Data)

响应协议

  • 服务端向客户端响应数据时的协议
  • 响应协议由三部分组成:
    1. 状态行(响应行)
      1. 协议版本
      2. 响应状态码 (200=成功 404=未找到资源 500=服务器异常)
      3. 响应状态码的说明
    2. 消息报头(响应头)
      • 键值对组成,键: 值;多个消息头头之间会换行
    3. 响应正文
      • 浏览器中所看到的的内容

消息头

​ HTTP 消息由客户端到服务器的请求和服务器到客户端的响应组成。

​ 请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有 CRLF 的行),消息正文(可选)组成。

​ 每一个报头域都是由 “名字 + ‘:’ + 空格 + 值” 组成,消息报头域的名字是大小写无关的。

  • 请求头:对于请求协议而言

    • Referer:该请求头指明请求从哪里来
      • 如果是直接从浏览器的地址栏直接访问,则没有Referer请求头
      • 作用:可以得知的页面的上一个访问地址
      • 应用场景:百度竞价、防盗链、邀请链接等
  • 响应头:对于响应协议而言

    • Location:

      • Location响应报头域用于重定向接受者到一个新的位置
      • Location响应报头域,常用在更换域名的时候
    • Refresh:

      • 自动跳转(单位是秒),可以在页面通过meta标签实现,也可在后台实现

      • 格式:

        <meta http-equiv="refresh" content="时间秒数;url=跳转的地址">
        <!-- 3秒钟后跳转到百度 -->
        <meta http-equiv="refresh" content="3;url=http://www.baidu.com"> 
        <!-- 每隔3秒刷新一次页面 -->
        <meta http-equiv="refresh" content="3;">
        

Servlet 的实现

​ Servlet是Server与Applet的缩写,是服务端小程序的意思。

​ Servlet本质上也是Java类,但要遵循Servlet规范进行编写,没有 main()方法,它的创建、使用、销毁都由Servlet容器进行管理(如 Tomcat)。

实现

  1. 创建Web项目

    1. 右键选择"New",选择"Other"
    2. 搜索"Web",选择"Dynamic Web Project"
    3. 设置项目的名称,选择"Dynamic web module version"的版本为2.5,选择"Next",再选择"Next"
    4. 设置"Context root"的值
      • 默认与项目名保持一致,代表的是项目的对外访问路径,即站点名
    5. 创建完成
  2. 访问Web项目

    1. 选择服务器,右键选择"Add and remove",将项目加到服务器中
    2. 右键服务器,选择"Start"或者"Debug"启动服务器
    3. 在浏览器中输入"http://localhost:8080/站点名/资源路径"
  3. 创建Servlet

    1. 创建普通的JAVA类

    2. 继承HttpServlet类

    3. 重写service方法

      import java.io.IOException;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      @SuppressWarnings("serial")
      public class Servlet01 extends HttpServlet {
      	@Override
      	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
      		System.out.println("Hello Servlet!!!");
      	}	
      }
      
    4. 配置项目中WEB-INF下的web.xml文件

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
        <display-name>servlet01</display-name>
        <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
          <welcome-file>default.html</welcome-file>
          <welcome-file>default.htm</welcome-file>
          <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
          
          <!-- servlet类的配置 -->
        <servlet>
        	<servlet-name>Servlet01</servlet-name> <!-- servlet的名称,给服务器看的,与servlet-mapping中servlet-name标签保持一致 -->
        	<servlet-class>com.myservlet.Servlet01</servlet-class> <!-- servlet的路径,包含包名+类名 -->
        </servlet>
          <!-- servlet类的映射配置 -->
        <servlet-mapping>
        	<servlet-name>Servlet01</servlet-name> <!-- servlet的名称,给服务器看的,与servlet中servlet-name标签保持一致 -->
        	<url-pattern>/ser01</url-pattern> <!-- servlet类的对外访问路径。注:"/"不要忘记 -->
        </servlet-mapping>
          
      </web-app>
      
  • 实现Servlet的另外两种方式

    1. 继承GenericServlet类,实现service方法

    2. 实现Servlet接口,实现接口中的方法

      import java.io.IOException;
      import javax.servlet.Servlet;
      import javax.servlet.ServletConfig;
      import javax.servlet.ServletException;
      import javax.servlet.ServletRequest;
      import javax.servlet.ServletResponse;
      
      /**
       * 实现Servlet接口
       * 	1、创建普通Java类
       * 	2、实现Servlet接口
       * 	3、实现接口中的方法
       * 	4、配置web.xml
       */
      public class Servlet01 implements Servlet {
      
      	/**
      	 * 系统方法,初始化方法,当servlet被实例化时调用,只会执行一次(在第一次访问 Servlet执行)
      	 * 	当有请求访问servlet时,会先判断是否存在servlet实例,如果不存在,则调用init方法,实例化servlet类;如果存在,则不调用init方法
      	 */
      	@Override
      	public void init(ServletConfig config) throws ServletException {
      		System.out.println("Servlet01 init...");
      		
      	}
      	
      	/**
      	 * 系统方法,服务方法,没法打那个有请求访问servlet时,都会调用;可以调用多次
      	 */
      	@Override
      	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
      		System.out.println("Servet01...");		
      	}
      
      	/**
      	 * 系统方法,销毁方法,在服务器关闭时调用该方法,只会执行一次
      	 */
      	@Override
      	public void destroy() {
      		System.out.println("Servlet01 destoy...");		
      	}
      }
      

Servlet 生命周期

  • servlet 类加载–>实例化–>服务–>销毁

  1. Web Client 向 Servlet 容器(Tomcat)发出 Http 请求
  2. Servlet 容器接收 Web Client 的请求
  3. Servlet 容器创建一个 HttpRequest 对象,将 Web Client 请求的信息封装到这个对象 中
  4. Servlet 容器创建一个 HttpResponse 对象
  5. Servlet 容器调 HttpServlet 对象 service 方法,把 HttpRequest 对象与 HttpResponse对象作为参数,传给 HttpServlet 对象
  6. HttpServlet 调用 HttpRequest 对象的有关方法,获取 Http 请求信息
  7. HttpServlet 调用 HttpResponse 对象的有关方法,生成响应数据
  8. Servlet 容器把 HttpServlet 的响应结果传给 Web Client

Servlet 的配置

  • 基本配置

    <servlet>
        <servlet-name>Servlet01</servlet-name>
        <servlet-class>com.myservlet.Servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet01</servlet-name>
        <url-pattern>/ser01</url-pattern>
    </servlet-mapping>
    
  • 初始化参数:在servlet被实例化时,即可获取的参数

    <init-param>
        <param-name>参数名</param-name>
        <param-value>参数值</param-value>
    </init-param>
    
  • 自启动:服务器启动时servlet被实例化 (值越小,优先级越高)

    <load-on-startup>1</load-on-startup>
    
  • 设置多个访问路径

    <!-- 设置多个路径访问servlet -->
    <url-pattern>/ser04</url-pattern>
    <!-- 指定路径 -->
    <url-pattern>/ser004</url-pattern>
    <!-- 以指定后缀结尾的路径  .html .do -->
    <url-pattern>*.do</url-pattern> 
    <!-- 以指定目录开头的路径 -->
    <url-pattern>/test/*</url-pattern> 
    <!-- 所有路径 -->
    <url-pattern>/*</url-pattern>
    <!-- "*" 是个通用符,代表所有 -->
    
    • "*"只能放在最前面或者最后面,不能单独使用,不能和字母组合
    • 越精准,优先级越高
  • 注意点:

    • 修改配置文件,必须重启服务器,配置才会生效
    • 在web.xml文件中,servlet标签中的servlet-name的值必须唯一
    • servlet-mapping标签中url-pattern的值必须唯一:java.lang.IllegalArgumentException
    • servlet-mapping标签中url-pattern的值要加"/":java.lang.IllegalArgumentException
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值