为了账号安全,请及时绑定邮箱和手机立即绑定

JavaWeb17-HTML篇笔记

标签:
Html/CSS

1.3案例二:使用Servlet3.0技术完成文件的上传:
1.3.1需求:

1.3.2分析:
1.3.2.1技术分析:
【Servlet3.0】
Servlet3.0 与 Servlet2.5:

  • Servlet3.0需要运行在tomcat7以上的服务器中.

  • Servlet3.0以后web.xml就不是必须的.1.Servlet3.0支持注解开发.
    2.提供异步请求.
    3.支持文件上传.
    【Servlet3.0支持注解开发】
    使用@WebServlet替换web.xml中配置的Servlet:

1.Servlet3.0支持注解开发.
2.提供异步请求.
3.支持文件上传.
【Servlet3.0支持注解开发】
使用@WebServlet替换web.xml中配置的Servlet:
使用@WebFilter替换web.xml中的过滤器的配置:@WebFilter(urlPatterns=" *")


@WebServlet(urlPatterns="/ServletDemo2",asyncSupported=true)
public class ServletDemo2 extends HttpServlet{

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    AsyncContext context = req.startAsync(req, resp);    context.start(new MyRunner(context));    for(int i=1;i<=20;i++){        System.out.println(i);        try {            Thread.sleep(500);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    doGet(req, resp);}

}

class MyRunner implements Runnable{

private AsyncContext context;public MyRunner(AsyncContext context) {    this.context = context;}@Overridepublic void run() {    for(char i='a';i<='z';i++){        try {            context.getResponse().getWriter().println(i);            Thread.sleep(100);        } catch (Exception e) {            e.printStackTrace();        }    }}

}
【Servlet3.0的文件上传】
文件上传:
文件上传:指的是将本地的文件 写到 服务器上.
文件上传的要素:
1.表单的提交的方式必须是POST.
2.表单中必须有一个文件上传项:<input type=”file”>,而且文件上传项必须有name属性和值.

  • <input type=”file” name=”upload”/>
    3.表单的enctype属性的值必须是multipart/form-data
    文件上传的抓包分析:
    未修改enctype属性的时候:

@WebFilter(urlPatterns=" *")
br/>*/
@WebServlet("/UploadServlet")<br <="" a="">@MultipartConfig
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;="">

*/
@WebServlet(" uploadservlet")

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接收普通项:
request.setCharacterEncoding("UTF-8");
String desc = request.getParameter("desc");
System.out.println("文件描述:"+desc);
Part part = request.getPart("upload");
// 获得上传的文件的大小
long size = part.getSize();
System.out.println("文件大小"+size);
String type = part.getContentType();
System.out.println("文件类型"+type); // text/plain  image/jpeg
String name = part.getName();
System.out.println(name);
// 获得文件名:
String header = part.getHeader("Content-Disposition");
System.out.println(header);

int idx = header.lastIndexOf("filename=\"");String fileName = header.substring(idx+10, header.length()-1);System.out.println(fileName);// 获得文件内容:InputStream is = part.getInputStream();// 获得文件上传路径:String path = this.getServletContext().getRealPath("/upload");OutputStream os = new FileOutputStream(path+"/"+fileName);int len = 0;byte[] b = new byte[1024];while((len = is.read(b))!=-1){    os.write(b, 0, len);}is.close();os.close();

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

*/
@WebServlet(" uploadservlet")

}
1.3.4总结:
1.3.4.1文件名重名的问题:
UUID随机产生一个文件名.
1.3.4.2文件上传的目录分离:
按用户分        :一个用户创建一个或多个路径.
按时间分        :按月,星期,天进行划分.
按个数分        :一个路径中存3000个文件.
按分离算法分  :按照一定的算法进行划分.

*/
@WebServlet(" uploadservlet")
=">="">=">="">
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消