讲给Android程序员看的前端系列教程(40集免费视频教程+源码)
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
在本节教程中,通过示例的方式介绍HttpServletRequest常见应用场景及其使用方式。
获取请求参数
index.html代码如下:
<!DOCTYPE html>
<!-- 本文作者:谷哥的小弟-->
<!-- 博客地址:https://blog.csdn.net/lfdfhl-->
<html>
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<form action="/ServletRequest02/testServletRequest" method="post">
用 户:<input type="text" name="username" />
<br /><br />
密 码:<input type="password" name="password" />
<br /><br />
性 别:<input type="radio" name="gender" value="男" />男
<input type="radio" name="gender" value="女" checked="checked" />女
<br /><br />
爱 好:<input type="checkbox" name="hobby" value="摄影" />摄影
<input type="checkbox" name="hobby" value="唱歌" />唱歌
<input type="checkbox" name="hobby" value="跑步" />跑步
<br /><br />
城 市:
<select name="city">
<option>------请选择------</option>
<option value="chengdu">成都</option>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
</select>
<br /><br />
<input type="submit" value="欢迎注册" />
</form>
</body>
</html>
index.html页面如下:
web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ServletRequest02</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>testServletRequest</servlet-name>
<servlet-class>cn.com.TestServletRequest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServletRequest</servlet-name>
<url-pattern>/testServletRequest</url-pattern>
</servlet-mapping>
</web-app>
获取以Get方式提交的请求的请求参数
//获取表单中的数据
public void getFormDataByGetSubmit(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
//获取表单中的单值
String username = request.getParameter("username");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
String city = request.getParameter("city");
System.out.println("username="+username);
System.out.println("password="+password);
System.out.println("gender="+gender);
System.out.println("city="+city);
//获取表单中的多值
String[] hobby = request.getParameterValues("hobby");
System.out.println("hobby="+Arrays.toString(hobby));
}
获取以Post方式提交的请求的请求参数
// 获取表单中的数据
public void getFormDataByPostSubmit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//获取表单中的单值
String username = request.getParameter("username");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
String city = request.getParameter("city");
System.out.println("username="+username);
System.out.println("password="+password);
System.out.println("gender="+gender);
System.out.println("city="+city);
//获取表单中的多值
String[] hobby = request.getParameterValues("hobby");
System.out.println("hobby="+Arrays.toString(hobby));
}
请求参数中文乱码问题
解决以GET方式提交请求时请求参数的中文乱码问题
方式一:对请求数据重新编码
示例如下:
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
方式二:修改服务端编码设置
在Tomcat目录\conf\server.xml中设置字符集
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
解决以POST方式提交请求时请求参数的中文乱码问题
第一步
设置请求对象的编码格式为UTF-8,从而确保在Servlet中获取的请求参数无乱码
request.setCharacterEncoding("UTF-8");
第二步
设置响应对象的编码格式为UTF-8,从而确保Servlet响应至客户端的消息无乱码
response.setCharacterEncoding("UTF-8");
常见写法
通常情况下,我们将两句代码连写
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
文件上传
文件上传通常指的是用户在浏览器中通过表单form将文件上传至服务端。
但是请注意该表单必须满足如下三个条件:
- form的method必须是post
- form的enctype必须是multipart/form-data
- form中利用input type=”file”提供上传的入口
Commons-fileupload简介
在该示例中我们借助Commons-fileupload实现表单的上传。
Commons-fileupload是Apache提供的一个用来处理表单文件上传的一个开源组件。该组件操作简单、API通俗易懂、性能优异。
使用Commons-fileupload需要以下两个jar包:
- commons-fileupload
- commons-io
上传页面
index.html代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h2 style="color: red;">本文作者:谷哥的小弟</h2>
<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
<form action="/ServletRequest03/testServletRequest" method="post" enctype="multipart/form-data">
文件描述:<input type="text" name="description" /><br /><br />
选择文件:<input type="file" name="photo" /><br /><br />
<input type="submit" value="上传文件" /><br /><br />
</form>
</body>
</html>
index.html页面如下:
项目配置文件web.mxl
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ServletRequest03</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>testServletRequest</servlet-name>
<servlet-class>cn.com.TestServletRequest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServletRequest</servlet-name>
<url-pattern>/testServletRequest</url-pattern>
</servlet-mapping>
</web-app>
处理上传Servlet
代码如下:
package cn.com;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
/**
* 本文作者:谷哥的小弟
* 博客地址:http://blog.csdn.net/lfdfhl
*
* HttpServletRequest示例
* 利用表单上传文件
*/
public class TestServletRequest extends HttpServlet {
private static final long serialVersionUID = 7798464901577760319L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
// 判断表单是否支持文件上传
boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);
if (isMultipartContent) {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
try {
// 得到并处理表单中的每项
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
for (FileItem fileitem : fileItems) {
if (fileitem.isFormField()) {
processCommonField(fileitem);
} else {
processUploadField(fileitem);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 处理普通表单项
private void processCommonField(FileItem fileitem) {
try {
String fieldName = fileitem.getFieldName();
String fieldValue = fileitem.getString("UTF-8");
System.out.println(fieldName + "=" + fieldValue);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
// 处理上传表单项
public void processUploadField(FileItem fileItem) {
try {
// 创建存放上传文件的目录
String folderPath="E://upload";
File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs();
}
// 生成不重复的文件名
String fileName = fileItem.getName();
if (fileName != null) {
fileName = FilenameUtils.getName(fileName);
}
fileName = UUID.randomUUID() + "_" + fileName;
// 按照日期生成子文件名称
String dateDirectory = makeDateDirectory(folder);
// 创建文件
File file = new File(folder, dateDirectory + File.separator + fileName);
// 存放被上传的文件
fileItem.write(file);
} catch (Exception e) {
e.printStackTrace();
}
}
// 依据日期生成子文件夹
public String makeDateDirectory(File folder) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String dateDirectory = simpleDateFormat.format(date);
File file = new File(folder, dateDirectory);
if (!file.exists()) {
file.mkdirs();
}
return dateDirectory;
}
}
结果如下:
转载:https://blog.csdn.net/lfdfhl/article/details/101630598
查看评论