如何使用Servlet获取表单数据?

一、建立连接

要实现Servlet传递表单数据的效果,我们需要一个表单数据输入端的页面和一个表单数据接收端的Java文件。

首先需要创建一个Web工程,再将下载好的servlet-api.jar导入工程,位置如下:

工程名–>WebContent–>WebINF–>lib
接下来我们在WebContent文件夹内创建JSP页面文件,比如“login.jsp”,同时创建表单

然后在Java Resources目录下的src目录中创建相应接收端"LoginServlet.java"

创建完之后如何把两个文件联系起来呢?

需要首先在login.jsp中创建好的表单标签中添加action元素指向java文件,格式如下:

action="./LoginServlet"
这样就指定好了用户输入的表单数据将要传递给谁。

二、传递单/多条表单数据

若要传输单条表单数据,需要重写doGet()方法,并且调用getParameter()方法,实例如下:

①页面输入端

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><form action="./LoginServlet"><input placeholder="Pleace write your name" name="user_name"/></form></body>
</html>

②数据接收端

package com.jd.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String userName = request.getParameter("user_name");System.out.println(userName);}
}

若要传递多条数据,则需要调用getParameterValues()方法,实例如下:

①页面输入端

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><form action="./LoginServlet"><input type="checkbox" name="hobby" value="1" />sing<input type="checkbox" name="hobby" value="2" />dance<input type="checkbox" name="hobby" value="3" />Rap<input type="checkbox" name="hobby" value="4" />basketball</form></body>
</html>

②数据接收端

package com.jd.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String [] hobbies = request.getParameterValues("hobby");for (String hobby : hobbies) {//在控制台打印出用户选择对应的Value值System.out.println(hobby);}}
}

三、传递文件

在上面的操作中,我们传递的表单数据一般仅仅有一个字符或几个字符,而如果要传递文件该怎么办?一般来说,要实现传递文件的功能,我们需要用到一个额外的jar包commons-fileupload-1.2.1.jar和commons-io-2.4.jar,同样导入到lib目录中。

而要实现传输各类型文件的功能,我们还需要重写doPost()方法,重写部分代码如下(直接复制过去即可):

if(ServletFileUpload.isMultipartContent(request)){//1、判断当前form表单的编码方式是不是为enctype="multipart/form-data"FileItemFactory fileItemFactory = new DiskFileItemFactory();ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);servletFileUpload.setFileSizeMax(1024*1024*6*10);List<FileItem> fileItemList = null;try {fileItemList = servletFileUpload.parseRequest(request);//2、将form表单中每个携带数据的标签转换成每个FileItem对象并存到集合中} catch (FileUploadException e) {e.printStackTrace();request.setAttribute("message", "文件太大,上传失败");request.getRequestDispatcher("result.jsp").forward(request, response);      return;}for(FileItem fileItem : fileItemList){//3、获取form表单所携带的数据if(fileItem.isFormField()){//为true表示为非文件类型的标签String key = fileItem.getFieldName();//summaryString value = fileItem.getString();//summary对相的数据System.out.println(key+":"+value);}else{//文件类型try {String oldFileName = fileItem.getName();StringfileNameSuffix=oldFileName.substring(oldFileName.lastIndexOf("."));System.out.println(fileNameSuffix);String fileNamePrefix = UUID.randomUUID().toString();
//          fileItem.write(new File("D:\\"+fileNamePrefix+fileNameSuffix));//未发布路径String path = "D://"+fileNamePrefix+fileNameSuffix;fileItem.write(new File(path+fileNamePrefix+fileNameSuffix));//发布路径System.out.println(path);} catch (Exception e) {e.printStackTrace();}}}request.setAttribute("message", "文件上传成功");request.getRequestDispatcher("result.jsp").forward(request, response);}else{request.setAttribute("message", "当前form表单enctype属性的属性值非multipart/form-data");request.getRequestDispatcher("result.jsp").forward(request, response);}
}

详述Servlet获取form表单数据相关推荐

  1. html怎么获取form表单数据,如何优雅的获取Form表单数据?

    先看一个简单的例子 比如这里有一个简单的 form 表单 r1 r2 r3 r4 c1 c2 c3 c4 login reset 页面如下 现在,随便输入点内容 如果提交,表单会触发默认行为,直接以g ...

  2. php获取post表单数据_PHP get和post方法获取form表单数据

    在 PHP 中使用 get 和 post 两种方法接收来自 form 表单的值,在 form 表单中可以定义 PHP 的接收方式和接收地址. get 和 post 方法主要有以下几点区别. get 是 ...

  3. jquery的ajax获取form表单数据

    jq是对dom进行的再次封装.是一个js库,极大简化了js使用 jquery库在js文件中,包含了所有jquery函数,引用: 这里主要介绍jquery获取页面form数据使用的过程 html页面代码 ...

  4. JQuery获取form表单数据

    form表单内所有元素追加name属性值 <form class="form-horizontal m" id="feedback"><inp ...

  5. 【MVC】使用FormCollection获取Form表单数据

    public ActionResult Create(FormCollection form){string name = form["name"]; //姓名string mob ...

  6. js获取form表单数据和form表单赋值

    $.fn.extend({ // 调用方式:$("xxxxx").getform(); getform: function () { var obj = {};var array ...

  7. 从js给html的form表单赋值,js获取form表单数据和form表单赋值

    $.fn.extend({ // 调用方式:$("xxxxx").getform(); getform: function () { var obj = {}; var array ...

  8. php获取post表单数据_PHP如何通过post方法来获取form表单中数据?(代码示例)

    我们在网站开发过程中,通常都会遇到关于php form表单的相关操作.如php获取带有post提交方法的表单数据,这种该如何操作呢?如果大家有看过我[PHP如何通过get方法获得form表单数据?]这 ...

  9. 8 jquery 获取 form 表单内容

    8 jquery 获取 form 表单内容 有时,我们需要获取表单内容进行发送ajax请求,通过函数方式比较方便. $("#title").serialize() 获取一个序列化的 ...

最新文章

  1. CUDA功能和通用功能
  2. python如何调用参数配置文件_python参数设置
  3. swagger2中UI界面接口点击无法展开问题解决
  4. vue 虚拟服务器,vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现先后台分离开发...
  5. a high quality start up vc in uk
  6. windows系统tomcat日志输出至catalina.out配置说明
  7. [mybatis]sqlSessionFactory.openSession()
  8. 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解
  9. 二级vb笔试题库__全国计算机等级考试,2012年9月全国计算机二级VB笔试标准预测试卷试题六...
  10. 深度技术win11 32位全新专业版系统v2021.07
  11. oracle函数大全-字符串处理函数
  12. type=file的未选择任何文件修改_Excel基础—文件菜单之创建保存
  13. svn图标不显示的解决方案
  14. 利用Python scapy爬取起点小说网小说
  15. Java流处理之高效读写的缓冲流
  16. 用node.js实现简单的web服务器
  17. pytest官方文档 6.2 中文翻译版(第十章):警告捕捉
  18. Docx 生成word文档
  19. 怎样录制gif动态图
  20. 计算机基础_001_栈是什么

热门文章

  1. 【机器学习算法】聚类分析-2 聚类算法的分类,层次聚类算法的选择
  2. VMware启动虚拟机找不到入口
  3. 双向循环链表、dancing links
  4. jsdelivr 使用_如何使用JSDelivr
  5. 深度学习:模型的泛化能力浅显理解
  6. Unity Application.wantsToQuit使用注意项
  7. pytorch中交叉熵
  8. 根据ajax控制css样式,JQuery CSS样式控制 学习笔记
  9. 模式识别系列(一)感知器算法(PLA)
  10. python星号怎么输入_python 星号的使用