小言_互联网的博客

JavaWeb核心技术系列教程(12)——HttpServletRequest应用示例

346人阅读  评论(0)

C语言自学完备手册(33篇)

Android多分辨率适配框架

JavaWeb核心技术系列教程

HTML5前端开发实战系列教程

MySQL数据库实操教程(35篇图文版)

推翻自己和过往——自定义View系列教程(10篇)

走出思维困境,踏上精进之路——Android开发进阶精华录

讲给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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场