使用JSP开发WebMail系统_JSP教程
教程Tag:暂无Tag,欢迎添加,赚取U币!
推荐:提升JSP应用程序七大绝招你时常被客户抱怨JSP页面响应速度很慢吗?你想过当客户访问次数剧增时,你的WEB应用能承受日益增加的访问量吗?本文讲述了调整JSP和servlet的一些非常实用的方法,它可使你的servlet和JSP页
电子邮件(E-mail)是Internet上使用最广泛的服务之一,传统的Email应用模式基于C/S结构,即用户使用客户端的邮件收发工具(如Outlook、Foxmail等)与提供邮件服务的服务器(如163.net、263.net、371.net)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方式就可以得到和使用完整的邮件服务,这样将极大地方便上网用户,这种系统称为WebMail。WebMail是目前Internet上最受欢迎的服务之一,也是很多网站必备功能之一。另外WebMail同样也适用于企业或校园网的应用。 通常在后台服务器的搭建和设置完成后实现WebMail系统,而前台的开发工作主要是开发工具与后台数据库和邮件服务器的交互问题。在Linux平台上运行的各种服务器软件稳定性和可靠性一直很好,而且选择跨平台的Java开发工具使系统更稳定,具有更高的伸缩性。 JSP性能 尽管JSP提供强大的功能是建立在Servlet之上,但JSP的性能和Servlet相差无几。JSP首先要编译成Servlet,这只会增加少量的代码,仅需编译一次且可以预编译,这就消除了运行时花费不必要的负担。JSP与Servlet性能上的差异仅仅表现在返回的数据是二进制的。这是因为JSP返回时用的是PrintWriter,而Servlet可以应用于速度更快的OutputStream。 JSP自定义的标签库可以封装大量的、复杂的Java操作在一个Form里面,这些预先定义好的标签可以很容易的被那些没有Java知识的人调用。因此,JSP自定义的标签库可以有效地实现Java程序员和Web设计人员工作的划分。然而,在页面上应用的每一个标签,Web容器都必须创建一个新的标签句柄对象或从标签缓冲中提取它。因此,过多的应用自定义的标签将会带来不必要的资源浪费。 BodyTags是一种特殊的定制标签,可以提取在它之间封装的内容或者替换那些内容。BodyTags之间的内容一般会备份在内存中。由于BodyTags之间能够嵌套和重复,因此,在程序中应用了多级的BodyTags会占用大量宝贵的内存和系统资源。 实现WebMail的主要功能 该系统提供了获取、阅读、书写、转发、回复、打印、删除及用户管理的功能。考虑到系统的跨平台性,采用Java及相关技术产品为开发工具,特别是采用JSP作为服务程序,这样对客户端也没有其它要求,同时系统的性能在高负荷下得到进一步提高。整个WebMail系统全部采用纯Java代码,服务器端每响应一个服务请求启动一个线程,而不像CGI那样启动一个进程。这样能够节省系统资源,提高系统性能。 实现主要代码: 获取用户输入的信息 对于用户输入内容获取功能是通过getParameter方法来实现的,对于输入的文本内容,通过如下代码就能在服务器端获取,程序代码如下: String username=request.getParameter("login"); String password=request.getParameter("password"); Session session2=Session.getInstance(System.getProperties() ,null); Store store=session2.getStore("pop3"); 根据用户输入的信息来连接服务器,程序代码如下: try{ store.connect(host,username "%nyist.net", password); } catch(javax.mail.AuthenticationFailedException e) {content="用户名与密码不匹配";} 接收邮件代码段 根据获取用户输入的信息来连接服务器,代码为: store.connect("nyist.net",-1,request.getParameter("username") "%nyist.net",request .getParameter("password")); 获取服务器端的信息,代码如下: Folder folder = store.getFolder("INBOX"); Folder.open (Folder.READ_WRITE); Message message[]=folder.getMessages(); FetchProfile fp=new FetchProfile(); fp.add(FetchProfile.Item.ENVELOPE); fp.add(FetchProfile.Item.FLAGS); fp.add("X-Mailer"); folder.fetch(message,fp); 根据服务器上信息的不同格式,使用不同的方式来读取: String contentbody=""; Object o=message[j].getContent(); 若其Type为tex/plain就可直接读出,代码如下: if (message[j].isMimeType("text/plain")) { contentbody=(String) " | ";
发送邮件代码段 根据用户输入的内容,获取邮件头信息代码如下: String host = "nyist.net"; String from = request.getParameter("from"); String to = request.getParameter("to"); String subject = request.getParameter("subject"); String content = request.getParameter("content"); Properties props = System.getProperties(); //设置邮件服务 props.put("mail.smtp.host", host); Session session2 =Session.getInstance(props, null); 设置邮件头信息代码如下: MimeMessage message =new MimeMessage(session2); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); message.setSubject(subject); message.setSentDate(new Date()); // create the message part MimeBodyPart messageBodyPart =new MimeBodyPart(); 设置邮件内容,构建程序段如下: messageBodyPart.setText(content); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); 用户在发送邮件时常常带有附件,就是将浏览器客户端用户本地的文件传送到POP客户端,实现代码如下: for (int i=0;i com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i); if (!myFile.isMissing()) { myFile.saveAs("/upload/" myFile.getFileName()); count ; } 在上传附件的同时,对上传文件的数量进行统计,并通过out.println("上传了" count "个文件")将其在屏幕上显示出来。 在发送的信件中如果有附件,使用如下代码进行发送: for(int i=0;request.getParameter("file" i)!=null;i ) { messageBodyPart = new MimeBodyPart(); File file=new File("/home/mengyu/ROOT/upload/",request.getParameter("file" i)); DataSource source =new FileDataSource(file); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(request.getParameter("file" i)); multipart.addBodyPart(messageBodyPart); } // Put parts in message message.setContent(multipart); 调用Transport的send方法,将构造好MIME Message对象发送出去,代码如下: Transport.send(message); 删除电子邮件代码段 在通过Web界面使用电子邮件过程中,经常要对接收到垃圾邮件或已查看过的邮件进行删除,这也是电子邮件中必不可少的一个功能,所以我们设计了Web界面中删除电子邮件的相应功能,主要程序代码段如下: Folder folder=store.getFolder("INBOX"); folder.open(Folder.READ_WRITE); Message message[]=folder.getMessages(); String msg[]=request.getParameterValues("msg"); for(int i=0,n=msg.length;i folder.close(true); 用户管理 在使用系统运行的过程中,通过管理界面添加用户,删除不必要的用户,修改用户的密码,这是程序运行过程中必要的模块,代码如下: //添加用户 Runtime.getRuntime().exec("/home/vpopmail/bin/vadduser" request.getParameter("username") "@nyist.net " request.getParameter("passwd")); //删除用户 Runtime.getRuntime().exec("/home/vpopmail/bin/vdeluser" request.getParameter("username") "@nyist.net"); //修改用户密码 Runtime.getRuntime().exec("/home/vpopmail/bin/vpasswd" request.getParameter("username") "@nyist.net " request.getParameter("passwd")); 总结 Java简化了企业解决方案的开发、部署和管理等相关的复杂问题,它是面向对象的编程语言,同时也是具有平台独立性、高性能的服务器端编程语言。它提供的标准系统框架和服务适合团体开发,可控制性好,与其它资源的集成性好。采用Java为编程工具开发高性能、高可用性的WebMail服务器具有非常重要的意义。 |
分享:在J2ME网络编程中使用CMWAP代理在中国移动提供的网络连接中,分为CMNET和CMWAP两种,其中CMNET可以无限制的访问互联网络,资费比较贵。CMWAP类似一个HTTP的代码,只能访问支持HTTP的应用,但是资费便宜,稳定性比较
相关JSP教程:
- jsp response.sendRedirect不跳转的原因分析及解决
- JSP指令元素(page指令/include指令/taglib指令)复习整理
- JSP脚本元素和注释复习总结示例
- JSP FusionCharts Free显示图表 具体实现
- 网页模板:关于jsp页面使用jstl的异常分析
- JSP页面中文传递参数使用escape编码
- 基于jsp:included的使用与jsp:param乱码的解决方法
- Java Web项目中连接Access数据库的配置方法
- JDBC连接Access数据库的几种方式介绍
- 网站图片路径的问题:绝对路径/虚拟路径
- (jsp/html)网页上嵌入播放器(常用播放器代码整理)
- jsp下显示中文文件名及绝对路径下的图片解决方法
- 相关链接:
- 教程说明:
JSP教程-使用JSP开发WebMail系统。