文章目录
Servlet项目开发的大体阶段分为:
准备阶段>>>开发阶段>>>构建阶段>>>部署阶段>>>运行阶段
注意事项:
(1)Servlet项目准备阶段的框架配置,
可以参考博客:Servlet项目配置,这一部分的主要工作是导入项目所需要的jar包,项目目录配置(Facets,Artifacts),及配置Tomcat启动项。
(2)调式项目中,使用DEBUG工具和抓包工具进行问题的处理。
Fiddler是在windows上运行的程序,专门用来捕获HTTP,HTTPS的。
wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS。所以如果是处理HTTP,HTTPS 就用Fiddler, 其他协议比如TCP,UDP 就wireshark。
参考博客:Fiddler和wireshark的介绍
(3)数据的来源一般都是在请求、Cookie和Session、MySQL等数据库中获取。
这里请求的获取方法,Cookie和Session的设置及获取都需要熟练。包括Mysql那老套的连接方法。
参考博客:
[1] 浅谈cookie && session
[2] JDBC编程
(4)Servlet中请求和响应的处理
参考博客:请求和响应的处理
(5)在使用form表单进行文件上传时
1)form表单的attribute部分:编码类型需要指定multipart/form-data
<form action="/publish" method="post" enctype="multipart/form-data">
2)form表单的input部分:input的类型是file.
<input type="file" name="cover_image">
3 ) Servlet的注解部分: 编码类型为multipart/form-data时,在服务端接收文件数据,要加入注解@MultipartConfig
.
@WebServlet("/publish")
@MultipartConfig
public class PublishServlet extends HttpServlet {
}
4 ) Servlet的处理部分: Servlet代码中通过Part对象读取文件对应响应的内容.
Part coverImage = req.getPart("cover_image");
System.out.println(coverImage.getName());//获取html中指定的name
String filename = coverImage.getSubmittedFileName();//获取上传文件的文件名
System.out.println(coverImage.getContentType());//获取文件内容类型
System.out.println(coverImage.getSize());//获取文件大小
InputStream inputStream = coverImage.getInputStream();//获取文件的输入流
//获取images的绝对路径
String path = req.getServletContext().getRealPath("images") + "\\" + filename;
//将文件内容导出到本地
byte[] buffer = new byte[8192];
int len;
try (OutputStream os = new FileOutputStream(path)) {
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
}
(6)Servlet项目开发中的字符集编码配置
1)从请求读取数据时(utf-8): req.setCharacterEncoding(“utf-8”);
2)向数据库写入数据时(utf-8):
- 建库、表:charset utf8mb4
- JDBC连接的时候(utf-8),dataSource.setCharacterEncoding(“utf8”)
3 ) 输出响应时(utf-8):
- resp.setContentType(“text/html; charset=utf-8”);
resp.setCharacterEncoding(“utf-8”); - 上面没法设置时,html中设置:
<meta charset=”utf-8”>
注意:
- req.setCharacterEncoding():设置从请求读取或从数据库中取出数据时的编码格式(设置从参数,数据库中获取的动态文字);
- resp.setContentType(“text/xml; charset=utf-8”):设置页面为utf-8编码 (设置页面静态文字);
resp.setContentType()
指定 HTTP 响应的编码,同时指定了浏览器显示的编码.而resp.setCharacterEncoding()
仅设置HTTP响应的编码,如果之前使用resp.setContentType()
已经设置了编码格式,则使用response.setCharacterEncoding()
会覆盖之前指定的编码格式。
Servlet练习:简易博客系统