转发,request方法,post,上传文件
一.post请求与get请求
post和get请求的区别
1.都是http协议规定的请求方式之一,get请求更偏向于从服务器获取数据,而不会修改服务器中已有的数据,post请求更偏向于向服务器发送数据
2.get请求,请求参数拼接在URL后,post请求,请求参数放在请求体中,但是无论哪种方式参数的格式和内容都是一样的,每一个参数使用key=value的形式,多个参数之间使用&进行连接
3.由于get请求的参数是放在URL上的,有因为URL是有长度限制的,所以get请求不能发送过大的数据,而post请求,由于是参数放入请求体,就没有长度的限制了,可以用来上传文件
4.关于安全,get和post一样都是不安全的,因为http协议本身就是不安全的协议
5.代码:用户注册
Map<String,String[]> map = request.getParameterMap();//将所有参数放到map中
Set<String> keySet = map.keySet();//获取所有key,得到一个set集合
for(String key : keySet){ //增强for循环遍历数据
String[] values = map.get(key);//通过key的值取出value的值,数组表示
writer.println(key + Arrays.toString(values));输出key和value,value数组转为字符串
}
二.转发
请求转发和请求重定向的区别
1.请求转发是一次请求一次响应,而请求重定向是多次请求多次响应
2.请求转发地址栏不变,而重定向后会显示一个新的请求地址
3.请求转发,只能转发到本项目的其他servlet,而重定向没有限制,本项目的也行,其他项目也行
4.请求转发是服务器行为,只需要给出转发的servlet路径,而重定向是浏览器行为
5.请求转发效率高
6.核心代码:请求转发
RequestDispatcher rd = request.getRequestDispatcher("/path");//请求转发的URL
rd.forward(request,response);//执行转发
三.上传文件
1.html代码
//上传文件必须有enctyp="multipart/form-data", method="post"
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile">//
<input type="submit">
<form>
2.java代码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;chaset=utf-8");
FileItemFactory factory = new DiskFileItemFactory();//创建ServletFileUpload对象来上传文件
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(1024*1024*30);//服务器支持的最大文件(请求体)
upload.setSizeMax(1024*1024*40);//服务器支持整个表单的最大文件
upload.setHeaderEncoding("utf-8");//支持中文
String path = getServletContext().getRealPath("")+File.separator+"upload";//web文件夹的路径
File uploadDir = new File(path);//
if(!uploadDir.exists()){
uploadDir.mkdirs();//创建文件夹
}
List<FileItem> fileItems = upload.parseRequest(request);//解析Request放入List集合中
if(FileItem fileItem : fileItems){
if(fileItem.isFormField()){ //判断是否为非file表单数据
continue;}
String fileName =fileItem.getName();//获取原文件名
String filePath = path + File.separator + fileName();//获取文件路径
File file = new File(filePath);//创建file对象(空壳)
fileItem.write(file);//将上传的文件写入我们自己的文件
}