这个是一个上传的小实例
首先是完成一个小小的jsp页面
表单是包含一个用户名字段,以及一个文件字段 注意的要点就是 enctype="multipart/form-data"
Servlet保存上传的文件到uploads目录,显示用户名,文件名,文件大小,文件类型。
这个是第一步
<form action="${pageContext.request.contextPath}/FileUploadServlet" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username" /> </br> 文件:<input type="file" name="fileOne" /> </br> <input type="submit" value="提交" /> </form>
这个是第二步
public void doPost(HttpServletRequest request , HttpServletResponse response )throws ServletException ,IOException{ //通过response打印,所以需要设置他的编码 response.setContentType("text/html","charset=utf-8"); //创建工厂 DiskFileItemFactory dfif = new DiskFileItemFactory(); //使用工厂解析器解析对象 ServletFileUpload fileUpload = new ServletFileUpload(dfif); try{ //使用解析器对象解析request,得到FileItem列表 List<FileItem> list = fileUpload.parseRequest(request); //遍历所有表单 for(FileItem fileItem : list){ //如果当前表单项为普通表单 if(fileItem.isFormFiled()){ String fieldname = fileItem.getFiledName(); if(fieldname.equal("username")){ //打印当前表单内容,就是用户在username表单项中输入的内容 response.getWrite().print("用户名"+fileItem.getString()+"</br>"); } }else{ //如果当前表单项不是普通表单项,说明是文件字段 String name = fileItem.getName(); //获取上传文件的名称 if(name ==null || name.isEmpty()){ continue ; } //获取真实路径,对应${项目目录}/upload,当然这个目录必须存在 String savePath = this.getServletContext().getRealPath("/upload"); //通过upload目录和文件名称来常见File对象 File file = new File(savePath , name); //把文件上传保存到指定位置 file.write(file); //打印上传文件名称 response.getWriter().print("上传的文件名"+ fileItem.getName + "</br>"); //打印上传文件大小 response.getWriter().print("上传的文件大小"+fileItem.getSize()+"</br>"); //打印上传文件的类型 respinse.getWriter().print("上传的文件类型"+fileItem.getContentType()+"</br>"); } }catch(Exception e){ throw new ServletException(e) } }
//注意一下要点
/*
如果没有把用户上传的文件存放到 WEB-INF目录下,那么用户就可以通过浏览器直接访问,有危险
通常我们会在web-INF目录下创建一个upload目录存放上传文件,而在servlet中找到这个目录
需要使用servletContext的getRealPath(String)方法;
例如我在项目lol中有这条语句:
ServletContext servletContext = request.getSession().getServletContext();
String savePath = this.servletContext.getRealPath("/web-inf/uploads");
其中这个savePath的路径就是:
F:\tomcat6_1\webapps\lol\WEB-INF\uploads
但是IE6会返回上传路径的完整路径,不过无论是否是完整路径,我们都会截取最后一个\\
String name = fileFileItem.getName();
int lastname = name.lastIndexOf("\\");
if(lastIndex != -1){
name = name.subString(lastIndex + 1);
}
response.getWriter.print(name);
*/
但是IE6会返回上传路径的完整路径,不过无论是否是完整路径,我们都会截取最后一个\\
String name = fileFileItem.getName();
int lastname = name.lastIndexOf("\\");
if(lastIndex != -1){
name = name.subString(lastIndex + 1);
}
response.getWriter.print(name);
==========================================================================
下面是关于java邮箱发送的一些要点
javaMail中主要的类有三个
javax.mail.session;
javax.mail.internet.MimeMessage;
javax.mail.Transport;
session:表示会话,就是客户端和邮件服务器之间的会话,想获得会话需要给出账号和密码;
当然还要给出服务器名称,邮件服务中的session对象,就相当于会话需要给出的connection对象;
MimeMessage:表示邮件类,是Message的子类,包含邮件的主题,内容,收件人,地址,发件人等,
还可以设置抄送和暗送,甚至可以设置附件
Transport:用来发送邮件,他是发送器
*/
//第一步是获得session
Session session = Session.getInstance(Properties prop ,Authenticator auth) ;
// prop需要指定的两个键值,一个是指定服务器主机名,另一个是需要认证的
Properties prop = new Properties();
prop.setProperty("mail.host","smtp.163.com"); //设置服务器主机名
prop.setProperty("mail.smtp.auth","true") ; //设置需要认证
//其中 Authenticator是一个接口表示认证器,就是校验客户端身份,
//我们需要自己来实现这个接口,实现这个接口需要使用账户和密码
Authenticator auth = new Authenticator(){
public PasswordAuthentication getPasswordAuthentication(){
new PasswordAuthentication("","") ; //设置用户名和密码
}
}
//通过上面的准备,现在就可以获取Session对象了
Session session = Session.getInstance(prop,auth);
// 第二部就是创建MimeMessage 对象,创建MimeMessage对象需要Session对象来创建
MimeMessage msg = new MimeMessage(session);
然后需要设置发信人地址,收信人地址、主题以及邮件正文
//第三部就是发送邮件
Transport.send(msg);
//javaMail 发送带有附件的邮件
/*
一封邮件可以包含正问呢,附件N个,如果想发送带有附件邮件,需要设置邮件内容 MimeMultiPart
*/
MimeMulitpart parts = new MimeMulitpart(); //多个部件对象,可以理解为部件的集合
MimeBodyPart part1 = new MimeBodyPart();//创建一个部件
part1.setCotnent(“这是正文部分”, “text/html;charset=utf-8”);//给部件设置内容
parts.addBodyPart(part1);//把部件添加到部件集中。
下面我们创建一个附件:
MimeBodyPart part2 = new MimeBodyPart();//创建一个部件
part2.attachFile(“F:\\a.jpg”);//设置附件
part2.setFileName(“hello.jpg”);//设置附件名称
parts.addBodyPart(part2);//把附件添加到部件集中
注意,如果在设置文件名称时,文件名称中包含了中文的话,那么需要使用MimeUitlity类来给中文编码:
part2.setFileName(MimeUitlity.encodeText(“美女.jpg”));