表单submit分通常为get和post两种方式。
> get:通过request.getParameter("参数名")可以取得输入框的输入数据
> post:可实现输入框数据读取,文件上传
①利用下述软件包,放置在/WEB-INF/lib目录下。
commons-fileupload-版本号.jar:http://commons.apache.org/fileupload/下载
commons-io-版本号.jar:http://commons.apache.org/io/下载
②利用ServletAPI的Part接口实现
代码如下:
Hello App
> get方式
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet{
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain; charset=UTF-8");
PrintWriter outPrintWriter = response.getWriter();
String usernameString = request.getParameter("username");
outPrintWriter.println("Hello, "+usernameString);
outPrintWriter.close();
}
}
> post方式:commons-fileupload-版本号.jar、commons-io-版本号.jar
@WebServlet(urlPatterns = "/upload",
initParams = {
@WebInitParam(name="filepath",value = "/store"),
@WebInitParam(name="tempfilepath",value = "/store")
})
public class FileuploadServlet extends HttpServlet{
private String filepathString;
private String tempfilepathString;
public void init(ServletConfig config) throws ServletException {
super.init(config);
filepathString = config.getInitParameter("filepath");
tempfilepathString = config.getInitParameter("tempfilepath");
filepathString = getServletContext().getRealPath(filepathString);
tempfilepathString = getServletContext().getRealPath(tempfilepathString);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
PrintWriter printWriter = response.getWriter();
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4*1024);
factory.setRepository(new File(tempfilepathString));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(4*1024*1024);
List items = upload.parseRequest(request);
for(FileItem fileItem :items) {
if(fileItem.isFormField()) {
processFormField(fileItem, printWriter);
}else {
processUploadFile(fileItem, printWriter);
}
}
printWriter.close();
} catch (Exception e) {
throw new ServletException(e);
}
}
private void processFormField(FileItem item, PrintWriter out) {
String nameString = item.getFieldName();
String valueString = null;
try {
valueString = item.getString("UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
out.println(nameString+": "+valueString+"rn");
System.out.println(valueString);
}
private void processUploadFile(FileItem item, PrintWriter out)
throws Exception{
String filenameString = item.getName();
int index = filenameString.lastIndexOf("\");
filenameString = filenameString.substring(index+1, filenameString.length());
long filesize = item.getSize();
File file = new File(filepathString+"/"+filenameString);
item.write(file);
out.print(filenameString + " is saved. File Size = " + filesize);
out.println();
}
}
> post方式:ServletAPI的Part接口
@WebServlet(urlPatterns = "/upload2")
@MultipartConfig
public class FileuploadServlet2 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String savepathString = getServletContext().getRealPath("/store");
PrintWriter outPrintWriter = response.getWriter();
Collection parts = request.getParts();
for(Part part : parts) {
String headerString = part.getHeader("content-disposition");
System.out.println("type:" + part.getContentType());
System.out.println("size:" + part.getSize());
System.out.println("name:" + part.getName());
System.out.println("header:" + headerString);
if(part.getContentType() == null) {
outPrintWriter.println(part.getName() + "=" + request.getParameter(part.getName()) + "rn");
} else if(part.getName().indexOf("file") != -1) {
String filenameString = getFileName(headerString);
part.write(savepathString + File.separator + filenameString);
outPrintWriter.println(filenameString + " is saved." + "rn");
}
}
outPrintWriter.close();
}
private String getFileName(String header) {
return header.substring(header.lastIndexOf("=") + 2, header.length()-1);
}
}



