本篇主要讲到的是读取单个参数和多个参数和最简单的文件上传。
一、参数接收
前面一直使用到request.getParameter("参数名")获取单个参数的方法,这里使用request.getParameterValues("参数名")来获取多个参数的。可以用于表单中的checkbox这种复选框,但记住,前台写checkbox时name一定要相同。
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <h2>--以下专门演示表单参数接收 </h2> <form action="<%= request.getContextPath() %>/param" method="post"> name:<input type="text" name="name" /><br/> age:<input type="text" name="age" /><br/> hobby: <input type="checkbox" name="hobby" value="music"/>music <input type="checkbox" name="hobby" value="painting"/>painting <input type="checkbox" name="hobby" value="basketball"/>basketball<br/> sex: <input type="radio" name="sex" value="male"/>male <input type="radio" name="sex" value="female"/>female<br/> <input type="submit" value="提交" /> </form> </body> </html>
package cn.hncu.servlets; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ParamServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String queryString=request.getQueryString(); System.out.println(queryString);//get方式请求地址中,"?"号后面的那部分全部封装在这个字符串当中 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //读取单个参数值 String name=request.getParameter("name"); String age=request.getParameter("age"); System.out.println(name+","+age); String hobby[]=request.getParameterValues("hobby");//如果某个参数的值有好几个,用这个方法 if (hobby!=null){ for (String str:hobby){ System.out.println(str); } } String sex=request.getParameter("sex"); System.out.println("sex="+sex); //演示getParameterMap() Map<String, String[]> map=request.getParameterMap(); //遍历出所有参数及值 Iterator<Entry<String, String[]>> it=map.entrySet().iterator(); while(it.hasNext()){ Entry<String, String[]> en=it.next(); System.out.println(en.getKey()+","+en.getValue()); } //String names[] = map.get("name"); //以后用的BeanUtils工具会使用到getParameterMap()方法 //获取客户端的ip和端口号 String host=request.getRemoteHost(); int port=request.getRemotePort(); System.out.println(host+":"+port); System.out.println(request.getContextPath());//输出: /项目名 } }
服务器提交如下
MyEclipse的输出如下:
同样,通过点击“请求param” 的超链接发出doGet方式的请求结果如下:
二、文件上传
这里的文件上传只演示将文件当中的数据发送到服务器,暂时不重新接收成文件。
如下:
在index.jsp中加上如下几句话:
<form action="<%= request.getContextPath() %>/uploadHello" method="post" enctype="multipart/form-data"> file:<input type="file" name="file" /><br/> <input type="submit" value="上传" /> </form>注意:enctypr="multipart/form-data"是一定要加上去的,否则只能够传送文件名过去,因为enctype默认是application/x-www-form-urlencoded
UploadHelloServlet.java
package cn.hncu.servlets; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UploadHelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { InputStream in=request.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(in)); String line=null; while ((line=br.readLine())!=null){ System.out.println(line); } } }
结果如下:
浏览器:
MyEclipse输出:
这里演示的文件上传只能算是意思意思一下,以后我会做一个真正的文件上传发到博客。