1.HttpServlet
1.接收方式
2.中文乱码问题
1).post请求会乱码,通过request.setCharacterEncoding("UTF-8")
2).new String(request.getParameter("name").getBytes("IOS-8859-1"),"UTF-8")针对任何请求方式,若数据本身不乱码,仍使用该方法则会乱码
3).tomcat 8以上版本不会乱码。7一下会乱码
3.请求转发
一次请求,数据在request域中共享,服务端行为,地址栏不发生变化。请求转发时的地址只能是当前站点下(当前项目)的资源,重定向可以是任何地址
4.重定向
response.sendRedirect(url)
服务端指导,客户端行为,存在两次请求,地址栏会发生变化,request对象不共享
2.Cookie
1.设置cookie
//创建cookie
Cookie cookie=new Cookie("name","lisa");
//设置最大生存周期
cookie.setMaxAge(60*60*24);
//发送cookie对象
response.addCookie(cookie)
2.获取cookie
3.cookie到期时间:cookie.setMaxAge( num)
1)负整数(默认-1,表示只在浏览器内存中存活,关闭浏览器就失效)
2)正整数(表示存活指定秒数,会将数据存在内存中)
3)0(表示删除cookie)
4.注意事项
4.Cookie的路径
3.session
4.ServletContext
5.Servlet文件上传
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="uploadServlet">
姓名:<input type="text" name="uname"><br>
文件:<input type="file" name="myfile"><br>
<button>提交</button>
</form>
</body>
</html>
@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
//设置请求的编码格式
request.setCharacterEncoding("UTF-8");
String uname=request.getParameter("uname");
System.out.print("uname:"+uname);
//获取part对象(servlet将multipart/form-data的post请求封装成part对象)
Part part=request.getPart("myfile");
//通过part对象获得上传的文件名
String fileName=part.getSubmittedFileName();
System.out.print("上传文件名:"+fileName);
String filepath=request.getServletContext().getRealPath("/");
System.out.print("文件存放路径:"+filepath);
part.write(filepath+"/"+fileName);
}
}
6.servlet文件下载
<body>
<a href="download/ab.txt">文本文件</a>
<a href="download/pg.jpg">图片文件</a>
<a href="download/ab.zip">压缩文件</a>
<hr>
<a href="download/ab.txt" download>文本文件</a>
<a href="download/pg.jpg" download="截图.png">图片文件</a>
<hr>
<form action="downloadServlet">
文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名">
<button>下载</button>
</form>
</body>
@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String fileName=request.getParameter("fileName");
if(fileName==null||"".equals(fileName.trim())){
response.getWriter().write("请输入要下载的文件名:");
response.getWriter().close();
return;
}
String path=request.getServletContext().getRealPath("/download/");
File file=new File(path+fileName);
if(file.exists()&&file.isFile()){
//设置响应类型(浏览器无法使用某种方式或激活某个程序来处理的类型)
response.setContentType("application/x-msdownload");
//设置头信息
response.setHeader("content-Disposition","attachment;filename="+fileName);
//得到file输入流
InputStream in=new FileInputStream(file);
//得到字节输出流
ServletOutputStream out=response.getOutputStream();
//定义byte数组
byte[]bytes=new byte[1024];
//定义长度
int len=0;
//循环输出
while ((len=in.read(bytes))!=-1){
//输出
out.write(bytes,0,len);
}
//关闭资源
out.close();
in.close();
}else{
response.getWriter().write("文件不存在,请重试!");
response.getWriter().close();
}
}
}