Servlet获取form表单数据

mac2024-11-06  9

整体步骤如下:
一、创建Dynamic Web Project项目。
二、在该项目的WebContent中创建login.jsp的jsp文件,然后在WEB-INF的lib文件夹中保存servlet-api.jar,引入jar包。
三、在Java Resources的scr中创建servlet文件,名为LoginServlet.java。
四、login.jsp为html内容,form表单的action指向servlet文件,此处为./+LoginServlet(servlet文件名),代码如下:
<%@ 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=UTF-8"> <title>Insert title here</title> </head> <body> <form action="./LoginServlet"> <input placeholder="请输入用户名" name="user_name"/> <input type="submit" value="登陆" /> </form> </body> </html>
五、在servlet文件中重写doGet方法或者doPost方法:

1 . 重写doGet方法(只能传数据),此时form表单不需要改样式,通过name来获取标签的值,详解见注释:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("user_name"); //文本框、密码框、文本域、下拉列表、单选等直接调用getParameter(name值)方法,括号中为html标签的name。 System.out.println(username); //username就代表输入框的内容或者单选的value值,此时控制台会出现username的值。 //多选时调用getParameterValues(name值)方法,然后用for循环遍历就可以得到多选的value值了。 /*String [] hobbies = request.getParameterValues("hobby"); for (String hobby : hobbies) { System.out.println(hobby); }*/ }

2 . 重写doPost方法(可以传数据和文件):需要粘贴commons-io-2.4.jar和commons-fileupload-1.2.1.jar到lib文件夹,然后引入jar包,详解见注释:

@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 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();//summary String value = fileItem.getString();//summary对相的数据 System.out.println(key+":"+value); }else{//文件类型 try { String oldFileName = fileItem.getName(); String fileNameSuffix=oldFileName.substring(oldFileName.lastIndexOf(".")); //获取文件后缀fileNameSuffix。 System.out.println(fileNameSuffix); String fileNamePrefix = UUID.randomUUID().toString(); //获取一个ID作为新文件的名字,这是为了防止文件名相同而无法多次保存。 // fileItem.write(new File("D:\\"+fileNamePrefix+fileNameSuffix));//未发布路径 String path = "D:/";//将文件存到D盘(可以自行修改)。 fileItem.write(new File(path+fileNamePrefix+fileNameSuffix));//发布路径 System.out.println(path+fileNamePrefix+fileNameSuffix); } catch (Exception e) { e.printStackTrace(); } } } request.setAttribute("message", "文件上传成功"); request.getRequestDispatcher("result.jsp").forward(request, response); //创建一个result.jsp文件,内容只有${message },这样就可以将"文件上传成功"输出到屏幕。 }else{ request.setAttribute("message", "当前form表单enctype属性的属性值非multipart/form-data"); request.getRequestDispatcher("result.jsp").forward(request, response); } }

运用doPost方法需要将form表单的格式更改下: (1)method方法默认为get,所以在doGet方法时不需要添加method=“get”,但是在运用doPost方法时,就需要修改method的值为post。 (2)需要在form表单中添加 enctype=“multipart/form-data” 。

<form action="./LoginServlet" method="post" enctype="multipart/form-data"> <input placeholder="请输入用户名" name="user_name"/> <input type="file" name="picture" > <input type="submit" value="登陆" /> </form>

网页形式如下: 登录后会显示: 在D盘中会有上传的文件:

最新回复(0)