自动化测试开发

4、Servlet模型(一)

Servlet的编写、访问过程

Servlet简介

  • ServletJava Servlet的简称,是小服务程序或服务连接器,是用Java编写的服务器端程序,主要功能在于获取请求,返回响应
  • 广义:一个Servlet是一个Java语言编写的类,提供请求响应式的编程模型
  • 狭义:Servlet是指Java语言实现的一个接口

编写部署Servlet程序

编写源文件
  • 编写类实现(implements)

javax.servlet.Servlet 接口,在类中实现

javax.servlet.Servlet 接口中的方法

编写类文件
  • 通过Javac命令编译写好的源文件
  • 注意:-cp参数的使用
部署程序
  • 将编译生成字节码(.class)文件复制到“号站点号/WEB-INF/classes/"目录,需要注意目录结构
  • 配置web.xml中的<servlet>、<servlet-mapping>节点

编写部署Servlet 程序步骤

1、编写Servlet程序(实现Servlet接口)

2、编译Servlet源文件,生成字节码文件

注意:

  • DOS窗口中进入Servlet文件所在目录
  • -cp参数导入需要的jar包

javac -cp .;lib\*Hello.java

3、部署

Tomcatwebapps目录下创建项目目录

在项目目录下创建WEB-INF目录

WEB-INF目录下放置web.xml配置文件、classes目录和lib目录

  • classes目录中是步骤2中生成的字节码文件
  • lib目录中是用到的jar

4、运行
  • 启动Tomcat
  • 访问Servlet

Servlet处理请求,返回响应

http://localhost:8080/MyWebsite/hello

WEB-INF目录下web.xml

<servlet>

      <servlet-name>helloWorld</servlet-name>

      <servlet-class>xx.xx.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

      <servlet-name>helloWorld</servlet-name>

      <url-pattern>/hello</url-pattern>

</servlet-mapping>

Servlet中的请求与响应

接收请求

Tomcat启动后Web容器首先做的工作

  • 接收到请求后服务器转交请求给Web容器
  • Web容器产生请求对象和响应对象

  • 调用Servletservice()方法,并将请求和响应对象作为参数传入该方法
  • service方法根据请求方式调用doXXX()方法

返回响应

  • doXXX()方法中使用请求对象获取请求信息,响应对象返回响应结果(PrintWriter对象)
  • 销毁请求、响应对象

接收请求

  • HttpServletRequest接口以参数的形式传递到service方法里
  • HttpServletservice方法

  • 受保护的service()方法根据请求类型调用doXXX()方法
  • 所以一般要重写doXXX()方法

解析请求

getParameter()方法

  • href="RegistServlet?userName=zs
  • 表单中的name属性值的获取

  • request.getHeaderNames();
  • request.getHeader(“host”);//服务器主机
  • request.getRemoteHost();//客户端IP
  • request.setCharacterEncoding("UTF-8");

Enumeration e = request.getHeaderNames();

while(e.hasMoreElements()) {

    System.out.println(e.nextElement());

}

Attribute参数

  • setAttribute() :设置参数
  • getAttribute() :获取某个参数的值

HttpServletResponse接口

protected void doGet(HttpServletRequest request, HttpServletResponse response)

  • getWriter()方法,返回的是一个输出流
  • response.setContentType("text/html");

编码

  • response.setCharacterEncoding("UTF-8");
  • response.setContentType ("text/html;charset=UTF-8");

示例:

Servlet中请求数据的传递、请求转发与请求重定向

Servlet应用执行过程--请求转发

Servlet应用执行过程--重定向

请求重定向、请求转发

请求转发

  • request.getRequestDispatcher(" targetURL").forward(request, response);

请求重定向

  • response.sendRedirect("targetURL")

请求数据的传递

请求数据的传递

  • request.setAttribute(String,Object)
  • request.getAttribute(String),返回Object

注意:

请求转发可以共享参数

  • request.getParameter()
  • request.getAttribute()

请求重定向无法共享参数

请求重定向、请求转发区别

本质

  • 请求转发:一次请求
  • 请求重定向:两次请求

速度

  • 请求转发 > 请求重定向

Attribute参数

  • 请求转发可共享参数
  • 请求重定向不可共享参数

地址栏  

  • 请求转发:不变
  • 请求重定向:变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24、Java 集合

十一章&#xff1a;Java 集合 一、集合框架的概述 1、集合&#xff1a;就像一个容器&#xff0c;可以动态的把多个对象的引用放入容器中。简称 Java 容器 ​ 说明&#xff1a;此时的存储&#xff0c;主要指的是内存层面的存储&#xff0c;不涉及到持续化的存储&#xff08;.t…

1114棋盘问题acwing(深度优先搜索)

题目描述 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。 要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列&#xff0c;请编程求解对于给定形状和大小的棋盘&#xff0c;摆放 kk 个棋子的所有可行的摆放…

logback日志输出配置范例

logback日志输出配置范例 在wutool中&#xff0c;提供了logback日志输出配置范例&#xff0c;实现日志文件大小限制、滚动覆盖策略、定时清理等功能。 关于wutool wutool是一个java代码片段收集库&#xff0c;针对特定场景提供轻量解决方案&#xff0c;只要按需选择代码片段…

测试人员如何驱动开发?

软件开发中测试人员的作用正在从传统的缺陷发现者演变为开发过程的主动推动者。特别是在敏捷和 DevSecOps 环境中&#xff0c;测试人员如何通过参与需求、提供反馈和推动自动化来驱动开发&#xff0c;成为一个值得探讨的话题。本文将详细分析测试人员驱动开发的具体方式&#x…

大模型语料库的构建过程 包括知识图谱构建 垂直知识图谱构建 输入到sql构建 输入到cypher构建 通过智能体管理数据生产组件

以下是大模型语料库的构建过程&#xff1a; 一、文档切分语料库构建 数据来源确定&#xff1a; 首先&#xff0c;需要确定语料库的数据来源。这些来源可以是多种多样的&#xff0c;包括但不限于&#xff1a; 网络资源&#xff1a;利用网络爬虫技术从各种网站&#xff08;如新闻…

oracle游标为什么没有共享,统计一下原因

-- Script Code为什么没共享 define sql_id bs391f0yq5tpw;set serveroutput onDECLAREv_count number;v_sql varchar2(500);v_sql_id varchar2(30) : &sql_id; BEGINv_sql_id : lower(v_sql_id);dbms_output.put_line(chr(13)||chr(10));dbms_output.put_line(sql_id: ||…

哈希碰撞攻防战——深入浅出Map/Set的底层实现

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习Map/Set的底层实现 目录 问题一&#xff1a;hash会出现负数&#xff1f;数组越界 一&#xff1a;什么是二叉搜索树&#xff1f…

win10使用haneWIN NFS Server挂载NFS v2服务,u-boot通过NFS下载zImage

1. haneWIN NFS Server挂载NFS v2服务 https://www.hanewin.net/nfs-e.htm netstat -ano | findstr ":2049"TCP 0.0.0.0:2049 0.0.0.0:0 LISTENING 3824UDP 0.0.0.0:2049 *:* 38…

Linux文件系统与目录结构

Linux系统中一切皆文件 bin 是Binary 的缩写, 这个目录存放着最经常使用的命令 boot 这里存放的是启动Linux时使用的一些核心文件&#xff0c;包括一些连接文件以及镜像文件&#xff0c;自 己的安装别放这里。 cdrom 这个目录通常专门用来挂载光盘。当系统刚安装时&#x…

一文详解基于NarrotoAI的短剧短视频自动解说、混剪AI平台搭建

背景 前阵给孩子做电子相册学了点剪辑技术&#xff0c;就想凑个热闹剪剪短剧玩玩&#xff0c;一是学以 致用&#xff0c;再者也好奇短剧创作为啥这么火&#xff0c;跟个风。 初步了解情况后&#xff0c;发现我的剪辑技术已经落后了&#xff0c;行家们玩的主要是解说 &#xf…

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

《Canvas修仙传·第三重天金丹境(下集)》 ——量子烟花与物理宇宙的混沌法则

各位道友久候&#xff01;上集我们炼就了《灵蛇奇谭》的元神&#xff0c;今日将开启Canvas修仙路上最绚丽的篇章——掌控微观粒子的创世之力&#xff01;(&#xff89;≧∀≦)&#xff89; 章前黑话词典 &#x1f50d; 量子境术语表&#xff1a; 对象池&#xff08;Object Po…

c++ namespace名字域空间

在C中&#xff0c;namespace 是一个非常重要的概念&#xff0c;用于组织代码&#xff0c;避免名称冲突。namespace&#xff08;命名空间&#xff09;是一个逻辑上的代码组织单元&#xff0c;用于将代码&#xff08;类、函数、变量等&#xff09;分组&#xff0c;从而避免命名冲…

获取阿里云OSS预签名URL下载(java)

1,引入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId> </dependency> <!--AliSms--> <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-s…

中间件专栏之Redis篇——Redis的基本IO网络模型

Redis主要采用的是单线程的事件驱动模型&#xff0c;通过I/O多路复用来实现高效的并发请求处理。 一、单线程模型 Redis 采用 单线程模型 来处理所有请求&#xff0c;包括网络 I/O 和命令执行。虽然现代多核 CPU 能够并行处理任务&#xff0c;但 Redis 的设计原则是尽量避免多…

Python 线程同步

Python 线程同步 Python 线程同步 Python 线程同步 线程同步是一种确保两个或多个线程不同时执行同一块共享代码的机制。共享块中的代码通常是访问共享数据或资源&#xff0c;这种共享块被称作临界区。这个概念可以用下面的图清晰地表示出来&#xff1a; #mermaid-svg-2TivIuc…

Linux操作系统5-进程信号3(信号的捕捉流程,信号集,sigaction)

上篇文章&#xff1a;Linux操作系统5-进程信号3&#xff08;信号的保存, 用户态与内核态&#xff0c;内核空间&#xff09;-CSDN博客 本篇Gitee仓库&#xff1a;​​​​​​​myLerningCode/l26 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点…

【机器学习chp10】降维——(核化)PCA + MDS + lsomap + 拉普拉斯特征映射 + t-NSE + UMAP

目录 一、降维的意义与本质 1、意义 2、本质 3、常见降维方法 &#xff08;1&#xff09;线性降维 &#xff08;2&#xff09;非线性降维 二、基于重构的降维 1、PCA 2、核化PCA &#xff08;1&#xff09;实现过程 步骤一&#xff1a;数据映射与核函数定义 步骤二…

代码的解读——自用

代码来自&#xff1a;https://github.com/ChuHan89/WSSS-Tissue?tabreadme-ov-file 借助了一些人工智能 run_pipeline.sh 功能总结 该脚本用于执行一个 弱监督语义分割&#xff08;WSSS&#xff09; 的完整流程&#xff0c;包含三个阶段&#xff1a; Stage1&#xff1a;训…

Powershell和BTEQ工具实现带多组参数和标签的Teradata数据库批量数据导出程序

设计一个基于多个带标签SQL模板作为配置文件和多组参数的Powershell代码程序和BTEQ工具&#xff0c;实现根据不同的输入参数&#xff0c;自动批量地将Teradata数据库的数据导出为CSV文件到指定目录上&#xff0c;标签和多个参数&#xff08;以“_”分割&#xff09;为组成导出数…