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盘中会有上传的文件: