Servlet是什么?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
如何使用Servlet获取表单数据?
一、建立连接
要实现Servlet传递表单数据的效果,我们需要一个表单数据输入端的页面和一个表单数据接收端的Java文件。
首先需要创建一个Web工程,再将下载好的servlet-api.jar导入工程
接下来我们在WebContent文件夹内创建JSP页面文件,比如“login.jsp”,同时创建<form>表单
然后在Java Resources目录下的src目录中创建相应接收端"LoginServlet.java"
创建完之后如何把两个文件联系起来呢?
需要首先在login.jsp中创建好的<form>表单标签中添加action元素指向java文件,格式如下:
action="./LoginServlet"
这样就指定好了用户输入的表单数据将要传递给谁
<form action="./LoginServle">
<input placeholder="Pleace write your name" name="user_name"/>
</form>
数据接收端
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);
}
}
如果是多条数据:
<%@ 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);
}
}
}
文件上传:fileupload jar包上传。
<form action="../form_ajax" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"/><br/>
选择要上传的文件<br/>
请选择文件:<input type="file" name="myfile"/><br/>
<input type="submit" value="上传"/><br/>
</form>
@MultipartConfig
public class FileUpload1Servlet extends HttpServlet {
private static Logger LOGGER = Logger.getLogger(FileUpload1Servlet.class);
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 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("."));
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);
}
}
}
request.getRequestDispatcher("result.jsp").forward(request, response);
跳转 页面result.jsp写 ${message};