java —— Servlet 技术

Servlet 是在 java 中嵌套 html 的一项技术,这点与 JSP 刚好相反,JSP 是在 html 中嵌套 java 的一项技术。

一、Servlet

(一)前言

1、Servlet 事实上也是一个类,其添加方式与类的添加方式一样;

2、Servlet 类下有两个方法,分别是 doGet() 和 doPost(),具体的业务代码写在 doGet() 方法中即可,两个方法的调用在前端 html 中进行确定;

3、调用 Servlet 技术需要 servlet-api.jar 包,对于 web 项目,将该包直接放在 WebContent → WEB-INF → lib 文件夹即可,无需右键 Build Path → Add to Build Path。

4、在 WEB-INF 文件夹下的 web.xml 配置文件中,需要做出以下配置:

<servlet><servlet-name>Servlet1</servlet-name><servlet-class>com.example.servlet.Servlet1</servlet-class>
</servlet>
<servlet-mapping><servlet-name>Servlet1</servlet-name><url-pattern>/Servlet1</url-pattern>
</servlet-mapping>

(二)响应 html

public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrinterWriter pw=response.getWriter();pw.println("<h1>这是一个响应</h1>");}
}

 如果要连接前端的请求内容,需要在前端的 html 中做出如下配置:

<form action="192.168.10.105:8080/example/Servlet1">account:<input type="text" name="account"><br>password:<input type="text" name="password"><br><input type="submit">
</form>

对应地,需要在 Servlet 中做出如下编写: 

public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String x=request.getParameter("account");// x 的值就是前端 name 为 account 的文本框输入的内容;String y=request.getParameter("password");// y 的值就是前端 name 为 password 的文本框输入的内容;}
}

(三)上传文件

1、在 WebContent 文件夹下创建一个用于存放文件的文件夹,取名“upload”;

2、前端 html 需要做如下配置:

<form action="http://192.168.10.105:8080/example/Servlet2" method="post" enctype="multipart/form-data"><input type="file" name="myfile" ><input type="submit">
</form>
//method 方法不能用get,只能用post;
//需要添加 enctype="multipart/form-data"

3、Servlet 中 request 需要调用 .getPart() 方法:

@MultipartConfig
public class Servlet2 extends HttpServlet {	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Part part=request.getPart("myfile");
//呼应前端的<input type="file">String formerName=part.getSubmittedFileName();
//获取文件名;String suffix=formerName.substring(formerName.lastIndexOf("."), formerName.length());
//获取文件后缀;String uploadPath=request.getServletContext().getRealPath("upload");
//获取upload的文件路径;String newName=UUID.randomUUID()+suffix;
//生成新的文件名;String newPath=uploadPath+"/"+newName;
//生成新的文件路径;System.out.println("the formerName is: "+formerName);System.out.println("the suffix is: "+suffix);System.out.println("the uploadPath is: "+uploadPath);System.out.println("the newName is: "+newName);System.out.println("the newPath is: "+newPath);FileOutputStream fos=new FileOutputStream(newPath);InputStream is=part.getInputStream();int length=0;byte[] b=new byte[1024];while((length=is.read(b))!=-1) {fos.write(b,0,length);}is.close();fos.flush();fos.close();PrintWriter pw=response.getWriter();pw.println("succeed");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

 

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

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

相关文章

数据库文件,根据表中的具体列名称查询

此查询以列属性为整型为依据&#xff0c;也可根据字符串类型进行相应的函数接口修改 #include <stdio.h> #include <sqlite3.h>int main() {sqlite3 *db;int rc;const char *db_path "test.db"; // 数据库文件路径// 打开数据库rc sqlite3_open(db_pa…

【活动行】参与上海两场线下活动,教育生态行业赛总决赛活动和WAIC人工智能大会活动 - 上海活动总结

目录 背景决赛最后一公里领域范围 决赛作品AI智教相机辅导老师Copilot辅导老师Copilot雅思写作竞技场 优秀作品总结 背景 决赛 百度发起的千帆杯教育生态行业赛于2024年7月4日进行线下决赛&#xff0c;博主虽然没能进入决赛&#xff0c;但也非常荣幸能够以嘉宾身份到现场给进…

Rust: 关于Pin以及move前后分析

一、Pin由来 在Rust中&#xff0c;自引用结构会导致&#xff0c;此变量被move后&#xff0c;其内部自引用的指针指向不改变&#xff0c;从而存在安全隐患 。 注意&#xff1a;Pin是一个struct。UnPin和!UnPin是trait。这个要分清。 二、方案 对自引用结构&#xff0c;如何增…

【VUE基础】VUE3第四节—核心语法之computed、watch、watcheffect

computed 接受一个 getter 函数&#xff0c;返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。 创建一个只读的计算属性 ref&#xff1a; <template><div cl…

C语言 输出10行杨辉三角形

输出以下的杨辉三角形(要求输出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 … #include <stdio.h>int main() {int triangle[10][10] {0};for (int i 0; i < 10; i) {triangle[i][0] 1;triangle[i][i] 1;for (int j 1; j < i…

<PLC><汇川><串口485>汇川Eazy521系列PLC与特域水冷机进行485通讯的设置

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…

【前端界面分享】

实现效果&#xff1a;html源码来自b站up主&#xff1a;【CSSJS】甲方&#xff1a;啊&#xff1f;没叫你做那么超前啊_哔哩哔哩_bilibili 本人仅实现了将html格式改为vue3 html版&#xff1a; 对于前端连入门可能都没摸到&#xff0c;学了半天也就改成vue3了&#xff0c;对于输…

杂项——循迹模块调节方法

1-4 路灰度传感器的调节方法&#xff1a; 调节时探头应对着颜色较浅的上方&#xff08;如果是黑白线赛道则应该将探头 对着白色上方调&#xff09;&#xff0c;轻轻的将全部可调电阻顺时针拧到底&#xff0c;再逆时针 慢慢回旋&#xff0c;直到对应探头的信号指示灯亮起后&…

C# 开发Winform DataGridView的增删改查实战

在C# WinForms应用程序中&#xff0c;DataGridView控件是一个非常强大的工具&#xff0c;用于显示和编辑表格数据。下面我将详细介绍如何在WinForm应用程序中使用DataGridView实现基本的数据库操作&#xff1a;增加、删除、修改和查询&#xff08;CRUD&#xff09;。 第一步&a…

【ARM系列】1 of N SPI

1 of N模式 SPI 概述配置流程 概述 GIC-600AE支持1 of N模式SPI。在此模式下可以将SPI target到多个core&#xff0c;并且GIC-600AE可以选择哪些内核接收SPI。 GIC-600AE只向处于powered up 并且使能中断组的core发送SPI。 GIC-600AE会优先考虑那些被认为是active的核&#xf…

小程序 全局数据共享 getApp()

在小程序中&#xff0c;可以通过 getApp() 方法获取到小程序全局唯一的App实例 因此在App() 方法中添加全局共享的数据、方法&#xff0c;从而实现页面、组件的数据传值 在 app.js 文件中定义 App({// 全局共享的数据globalData:{token:},// 全局共享的方法setToken(token){//…

如何创建一个基本的Mojolicious Web应用:探索Perl的现代Web框架

如何创建一个基本的Mojolicious Web应用&#xff1a;探索Perl的现代Web框架 Mojolicious是一个用Perl编写的简单、优雅的Web开发框架&#xff0c;它提供了一套丰富的工具和方法&#xff0c;让开发者能够快速构建高性能的Web应用。本文将详细介绍如何创建一个基本的Mojolicious…

面向对象——继承、封装、多态

什么是面向对象&#xff1f; 面向对象&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计应用程序和计算机程序。OOP的核心概念包括类&#xff08;Class&#xff09;、对象&#xff08;Object&#xff09…

SQL注入基础入门

文章目录 前言SQL注入基本操作SQL注入类型分类数字型字符型搜索型xx型Json型数据类型提交的方式 SQL注入的位置分类报错注入报错注入实战案例 SQL注入语句分类insert注入update注入delete注入 编码Tips&#xff1a;Mysql版本区别information_schema数据库详解 其他注入手段宽字…

面试官:Java线程可以无限创建吗?

1. 面试连环call Java线程可以无限创建吗? Java线程和操作系统线程有什么关联? 操作系统为什么要区分内核态和用户态? ⏩要想解答这些问题&#xff0c;我们要先从操作系统线程开始说起&#xff0c;让我们开始吧&#x1f389;&#x1f389;&#x1f389; 2. 操作系统线程…

为什么要学习Go

本文旨在探讨为什么Go语言值得学习,以及它如何能够提升您的编程技能和职业发展。我们将深入分析Go语言的核心优势,包括其简洁的语法、强大的并发支持、卓越的性能表现,以及在云计算、微服务和系统编程等领域的广泛应用 GO logo的核心理念&#xff0c;即简单胜于复杂。使用现代…

Redis-Redis可视化工具Redis Insight下载及安装

下载 1、博主已经上传资源&#xff0c;点此下载 2、点此进入官方下载 2.1 点击Installing Redis Insight 2.2 点击Install on desktop 2.3 选择Install on desktop&#xff0c;点击Redis Insight is available for download for free from this web site从网站下载 2.4 下载…

大模型简介

文章目录 大模型简介什么是大模型GPT大语言模型发展大语言模型对话产品大模型怎么用 大模型简介 什么是大模型 大模型&#xff0c;全称「大语言模型」&#xff0c;英文「Large Language Model」&#xff0c;缩写「LLM」。是具有大量参数和复杂结构的机器学习模型。大模型通常…

Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO

官网&#xff1a;https://streamlit.io/ github&#xff1a;https://github.com/streamlit/streamlit API 参考&#xff1a;https://docs.streamlit.io/library/api-reference 最全 Streamlit 教程&#xff1a;https://juejin.cn/column/7265946243196436520 Streamlit-中文文档…

MYSQL 四、mysql进阶 7(性能分析工具的使用)

一、数据库服务器的优化步骤 数据库调优流程图: 整个流程划分成了 观察&#xff08;Show status&#xff09; 和 行动&#xff08;Action&#xff09; 两个部分。字母 S 的部分代表观察&#xff08;会使 用相应的分析工具&#xff09;&#xff0c;字母 A 代表的部分是行…