servlet提交表单

Servlet与表单数据交互(如文本框、单选按钮、复选框、下拉列表等) Servlet读取表单数据 💖 文本字段和密码字段值的读取 💖 单选按钮字段值的读取 💖 复选框字段值的读取 💖 下拉列表(组合框)字段值的读取 💖 文本区域字段值的读取 阅读详情

post请求

表单的method=“post”,浏览器会发送post请求

特点

  • 不会将请求参数显示在浏览器地址栏,相对安全
  • 并不会对请求参数加密
  • 会将请求参数添加到实体内容里面,所以,可以提交大量数据给服务器

读取提交的请求参数值

request提供的getParameter

//如果请求参数名写错,会返回null值。
//如果不填写任何数据,会获得空字符串
String  getParameter(String paramName);

request提供的getParameterValues

//当有多个请求参数名相同时,用该方法
//多选框,如果不选择任何选项,浏览器不会发送任何数据给服务器。
String[] getParameterValues(String paramName);  

form表单提交数据

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>计算BMI指数</title>
</head>
<body style="font-size:30px;">
	<form action="bmi" method="post">
		<fieldset>
			<legend>计算BMI指数</legend>
			身高(米):<input name="height"><br>
			体重(公斤):<input name="weight"><br>
			<!--checkbox:复选框  -->
			兴趣:钓鱼<input name="interest" type="checkbox" value="钓鱼">
			做饭<input name="interest" type="checkbox" value="做饭">
			台球<input name="interest" type="checkbox" value="台球"><br>
			城市:<input name="city"><br>
			<input type="submit" value="确定">
		</fieldset>
	</form>
</body>
</html>
package web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/bmi")
public class BmiServlet extends HttpServlet {
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		// 身高
		String height = request.getParameter("height");
		// 体重
		String weight = request.getParameter("weight");
		// 兴趣
		String[] interest = request.getParameterValues("interest");
		response.getWriter().print("兴趣:");
		for (String str : interest) {
			response.getWriter().print(str + " ");
		}
		// 城市
		String city = request.getParameter("city");
		response.getWriter().println("城市:" + city);
		/*
		 *bmi指数: 体重千克数除以身高米数的平方
		 */
		double bmi = Double.parseDouble(weight) / Double.parseDouble(height) / Double.parseDouble(height);
		String status = "正常";
		if (bmi < 18.5) {
			status = "过轻";
		}
		if (bmi > 25) {
			status = "过重";
		}
		response.getWriter().println("<h3>您的bmi指数为:" + bmi + "</h3>" + "<h3>您的身体状况:" + status + "</h3>");
	}
}

测试
http://localhost:8087/servlet/form.html
在这里插入图片描述
在这里插入图片描述

表单中文参数乱码

原因:

表单提交时,浏览器会对中文参数值进行编码。服务器端
默认会使用iso-8859-1来解码
会使用表单所在的页面打开时使用的字符集来编码

解决

表单提交方式为post

//要加到所有的request.getParameter方法前面
request.setCharacterEncoding("utf-8");

表单提交方式为get

在这里插入图片描述

设置 (在tomcat下的conf文件下的server.xml中添加)
注: 只针对get请求有效

写一个Servlet,将所有员工信息以表格形式展现出来

maven项目的jar包依赖

<!--添加tomcat插件 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<port>8087</port>
					<hostName>localhost</hostName>
					<uriEncoding>UTF-8</uriEncoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.1</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.40</version>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

数据库

create database ems;
use ems;
CREATE TABLE `t_emp` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `ename` varchar(255) DEFAULT NULL COMMENT '雇员名称',
  `salary` decimal(10,2) DEFAULT NULL COMMENT '薪水',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

实体类

package pojo;

public class Employee {
	private int id;
	private String ename;//雇员名称
	private double salary;//薪水
	private int age;//年龄

	public String toString() {
		return "Employee [id=" + id + ", ename=" + ename + ", salary=" + salary + ", age=" + age + "]";
	}
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

数据库连接配置

# database connection parameters
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ems?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
jdbc.initSize=1
jdbc.maxSize=3

数据库连接工具类

package util;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

public class DBUtil {
	private static BasicDataSource ds;
	static {
		//加载参数
		Properties p=new Properties();
		try {
			p.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
			//获取数据库连接参数
			String driverClassName=p.getProperty("jdbc.driver");
			String url=p.getProperty("jdbc.url");
			String username=p.getProperty("jdbc.username");
			String password=p.getProperty("jdbc.password");
			String initialSize=p.getProperty("jdbc.initSize");
			String maxSize=p.getProperty("jdbc.maxSize");
			//创建连接池
			ds=new BasicDataSource();
			//设置连接池参数
			ds.setDriverClassName(driverClassName);
			ds.setUrl(url);
			ds.setUsername(username);
			ds.setPassword(password);
			ds.setInitialSize(Integer.parseInt(initialSize));
			ds.setMaxActive(Integer.parseInt(maxSize));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/*
	 * 由连接池创建的连接,其实现类由连接池提供.
	 */
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}
	/*
	 * 连接池提供的实现类,其close方法内部逻辑是,
	 * 将连接归还给连接池,即它会清空连接对象中的数据
	 * 并且将连接标记为空闲态
	 */
	public static void close(Connection con) {
		if(con!=null) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException("归还连接失败",e);
			}
		}
	}
}

数据库访问类

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import pojo.Employee;
import util.DBUtil;

public class EmployeeDAO {
	Connection con = null;
	/*
	 * 新增雇员
	 */
	public void save(Employee e){
		try {
			con = DBUtil.getConnection();
			String sql="insert into t_emp values(null,?,?,?)";
			PreparedStatement ps=con.prepareStatement(sql);
			ps.setString(1, e.getEname());
			ps.setDouble(2, e.getSalary());
			ps.setInt(3,e.getAge());
			ps.executeUpdate();
		} catch (SQLException e1) {
			//记日志(保留现场)
			e1.printStackTrace();
			/*
			 * 看异常能否恢复,如果不能够恢复
			 * (比如,数据库服务暂停等,一般我们称之为系统异常),
			 * 要提示用户稍后重试。
			 * 如果能够恢复,则立即恢复
			 */
			throw new RuntimeException(e1);
		}finally {
			DBUtil.close(con);
		}
	}
	/*
	 *查询所有雇员信息
	 */
	public List<Employee>findAll(){
		List<Employee>list=new ArrayList<Employee>();
		try {
			con=DBUtil.getConnection();
			String sql="select * from t_emp";
			PreparedStatement ps=con.prepareStatement(sql);
			ResultSet rs=ps.executeQuery();
			while(rs.next()) {
				Employee e=new Employee();
				e.setId(rs.getInt("id"));
				e.setEname(rs.getString("ename"));
				e.setAge(rs.getInt("age"));
				e.setSalary(rs.getDouble("salary"));
				list.add(e);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DBUtil.close(con);
		}
		return list;
	}
}

addEmp.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加员工</title>
</head>
<body style="font-size:30px;">
	<form action="addEmp" method="post">
		<fieldset>
			<legend>添加员工</legend>
			姓名:<input name="ename"><br>
			薪水:<input name="salary"><br>
			年龄:<input name="age"><br>
			<input type="submit" value="确定">
		</fieldset>
	</form>
</body>
</html>

新增servlet

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.EmployeeDAO;
import pojo.Employee;

@WebServlet("/addEmp")
public class AddEmpServlet extends HttpServlet {
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		EmployeeDAO dao = new EmployeeDAO();
		String ename=request.getParameter("ename");
		String salary=request.getParameter("salary");
		String age=request.getParameter("age");
		Employee emp=new Employee();
		emp.setEname(ename);
		emp.setSalary(Double.parseDouble(salary));
		emp.setAge(Integer.parseInt(age));
		try {
			dao.save(emp);
			out.println("<h1>添加成功!</h1>");
		} catch (Exception e) {
			e.printStackTrace();
			out.println("<h1>系统繁忙,请稍后重试!</h1>");
		}
		//容器会自动关闭out,这儿不调用out.close()也可以
		out.close();
	}
}

列表servlet

package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.EmployeeDAO;
import pojo.Employee;

@WebServlet("/listEmp")
public class ListEmpServlet extends HttpServlet {
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		out.println("<table><tr><td>ID</td><td>ename</td><td>age</td><td>salary</td></tr>");
		EmployeeDAO dao=new EmployeeDAO();
		List<Employee>list=dao.findAll();
		for (Employee employee : list) {
			out.println("<tr><td>"+employee.getId()+"</td><td>"+employee.getEname()+"</td><td>"+employee.getAge()+"</td><td>"+employee.getSalary()+"</td></tr>");
		}
		out.println("</table>");
		out.close();
	}
}

测试

http://localhost:8087/servlet/addEmp.html
在这里插入图片描述
在这里插入图片描述
http://localhost:8087/servlet/listEmp
在这里插入图片描述

ROS2 CANopen 使用教程 第一步是定义一个结构,用于保存有关接头和相关 CANopen 数据的信息。该结构是 CANopen 网络的基础,可确保存储所有相关数据并在需要时进行访问。 阅读详情

相关推荐

将Apollo高精地图中的车道线叠加在多种导航地图上

本文介绍了将Apollo高精地图车道线叠加到普通导航地图的技术方案。高精地图具备厘米级车道精度和丰富的语义信息,叠加可实现可视化验证、调试分析和数据对比等功能。核心技术包括坐标系统转换(UTM/WGS84/BD09/GCJ02)和数据处理流程,通过Python脚本完成Apollo地图解析、坐标批量转换和多格式输出。文章详细提供了环境准备、工作目录创建和坐标转换脚本等操作步骤,实现了高精地图数据在OpenStreetMap、百度地图和高德地图上的可视化展示。

Hi20240217的博客 1333

Servlet表单提交、前后端数据交换、页面跳转

Servlet表单提交、前后端数据交换、页面跳转例子详解

Garson的博客 2818

Outlook日历同步全攻略:Win10+安卓+iOS三端无缝衔接(附常见问题解决)

本文提供了一份详尽的Outlook日历同步指南,帮助用户在Windows 10、安卓和iOS三端实现无缝衔接。文章深入解析了Exchange ActiveSync等核心同步原理,并给出了从账户创建到各设备(特别是华为手机)的具体配置步骤、进阶管理技巧以及针对同步失败、事件重复等常见问题的实战解决方案,旨在彻底解决跨平台日程管理的痛点。

l3m4n的博客 552

7:Servlet表单-Java Web

7:Servlet表单-Java Web

Yeats_Liao的博客 820

Centos7安装NVIDIA驱动并在docker容器中使用GPU

Centos7安装NVIDIA驱动并在docker容器中使用GPU

运维giao的博客 2084

Yersinia:layer 2攻击框架!全参数详细教程!Kali Linux教程!

Yersinia是一个专为执行二层网络攻击设计的框架,利用多种网络协议的弱点进行渗透测试和网络分析。它支持针对生成树协议(STP)、思科发现协议(CDP)、动态中继协议(DTP)、动态主机配置协议(DHCP)、热备用路由器协议(HSRP)、802.1q、802.1x、交换机间链路协议(ISL)和VLAN中继协议(VTP)的攻击。这些攻击可能导致网络中的拒绝服务(DoS)或为更复杂的攻击创造条件。Yersinia对渗透测试人员和网络管理员非常有用,但使用时需谨慎,以免造成网络不稳定。

qq_24305079的博客 2281

form表单提交到servlet的两种方法

jsp中的表单提交到servlet,然后通过读取数据库的数据进行登录验证,然而form表单提交到servlet时却没能提交成功,下面就展示一下简单的form表单提交到servlet的过程: 1.      用于登录的jsp页面,其中有一个form表单用于提交用户名和密码 2.      创建一个名为LoginServlet的Servlet,下面是doGet与doPo

捕影世界 6万+

树莓派部署Home Assistant:打造本地化智能家居大脑

家庭自动化旨在通过技术提升居住便利性与舒适度,其核心在于中枢控制系统对各类设备的统一调度。传统云端方案虽部署简便,但存在隐私泄露、网络依赖与生态壁垒等固有缺陷。本地化部署通过将控制逻辑与数据存储于家庭内部网络,从根本上解决了这些问题,实现了数据自主、离线可用与跨品牌联动。Home Assistant作为领先的开源家庭自动化平台,结合树莓派这一低功耗、高性价比的硬件载体,为构建私有、可靠的智能家居中枢提供了成熟方案。本文以树莓派4B为例,详细阐述了从系统安装、设备集成到自动化场景创建的完整实践流程,并深入探讨

weixin_33501543的博客 374

在Servlet中处理表单提交的数据

Servlet的主要功能是处理客户端的表单请求数据,在Servlet中首先对这些数据进行验证,可能会封装到JavaBean,接下来调用数据库的业务逻辑方法将数据保存或者进行其他操作,最后Servlet控制将响应结果返回给客户端; 在Servlet中获取表单信息主要是应用HttpServletRequest对象的getParameter()方法,若getParameter()方法尝试读取一个null...

you can you up up up的博客 7559

Python调用CANoe(2)(测试模块配置)

本节内容在Python和CANoe的数据交互(1)的基础认知上,继续探索Python如何加载TestSetup,以及运行tse测试文件

蚂蚁小兵 1万+

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(一)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包

慕羽★的博客 3936

Servlet——form表单提交数据

form表单提交数据创建类表单页面代码Java代码配置web.xml代码编辑完成后,打包打包好的war放到webapps目录下启动Tomcat浏览器访问输入数据流程 创建类 表单页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单页面</title> </head> <body> <for

char_m的博客 3569

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5747

用Servlet处理表单提交的数据,然后再jsp页面中显示

第一个页面,用户表单界面 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> Insert title here 登陆界面 用户名: 密码:

专注游戏服务器相关技术 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Servlet-获取表单提交参数

首先准备一个jsp表单页面(index.jsp),表单未经过任何美化,请忽略它的low,哈哈: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>首页</title> </head> <bo...

Ara_Hu的博客 674

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JSP怎么将表单提交到对应的servlet

JSP怎么将表单提交到对应的servlet,以及其中的配置信息。

IT一分子 1万+

ajax提交表单到servlet,form表单提交到servlet怎么获取值

Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据用servlet实现一个注册的小功能 ,后台获取数据。注册页面:Insert title here用户名:密码:性别:男女爱好:足球篮球排球羽毛球所在城市:---请选择---北京上海沈阳人员实体类:注意:人员实体类要与表单中的name一致,约定要优于编码package com.chensi.bean;//实体类中的字段要与表单中...

weixin_30595763的博客 652

表单提交到Servlet

表单提交,报错 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1945)     at org.apache.catalina.loader.We...

aJiefy的博客 581

Servlet练习--提交表单

编写一个表单包含用户名、密码,post方式提交,并写出web.xml配置文档 工具:配置好的Myeclipse+Tomcat 过程: 具体建文件过程见 Servlet练习--第一个Servlet程序 test2/src/servlet/form.java代码 package servlet; import java.io.IOException; import java.io.Pr

xuqi7 865

JSP ——通过表单向servlet提交数据

通过表单请求servlet,并向servlet提交一个账单明细。 servlet负责计算账单的消费额。 1.example5_2.jsp文件代码 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>M...

lmm0513的博客 6663

form表单提交到servlet

form表单提交到servlet时遇到无法跳转到指定的servlet

TechTrek的专栏 1万+

html表单提交servlet路径问题

&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Insert title here&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;form action="./Login

hewenjing8168的博客 1956

**JSP并servlet之表单提交**

应用JSP与SERVLET配合进行表单提交,在web.xml处困难 <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>formalservlet.Myservlet</servlet-class>//此处写包名.类名,前面无/,与后面不同 &...

weixin_45003282的博客 317

form表单提交数组java,表单form的提交和servlet的取值

表单form的提交和servlet的取值一、前言对于后端开发来说,经常要和前端进行联系的两个面就是:1、表单form提交至servlet。2、ajax提交至servlet进行处理。显然,有必要对这两个常用的功能进行一次梳理。1、一个中文乱码的坑在表单传值和后台进行交流的时候,一个最大的坑就是中文的乱码问题了。这个坑的具体分析不过多阐述,最佳实践就是: 使用post 方式进行数据的提交,后台设置字符...

weixin_36282765的博客 931

表单提交中servlet的几种配置方法

1. 表单提交: <form action="login" method="post"> xml配置: <servlet> <servlet-name>LoginCheck</servlet-name> <servlet-class>com.lili.contorol.LoginCheck</servlet-clas...

qq_41575219的博客 342
上一篇: servlet的入门使用
下一篇: uniapp从入门到熟练使用
迷失的小鹿
博客等级 码龄8年 1万+粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值