我有一个Java Web应用程序,页面ReceiveMail.jsp
显示一个进度条,指示已收到多少封电子邮件。页面上的Refresh
按钮对名为EmailRecServlet.java
的servlet进行AJAX调用。
两个文件的代码如下
ReceiveMail.jsp
JavaScript函数,它向servlet提供AJAX调用:
<head>
<script type="text/javascript">
var requestObj = false;
if (window.XMLHttpRequest) {
requestObj = new XMLHttpRequest();
} else if (window.ActiveXObject) {
requestObj = new ActiveXObject("Microsoft.XMLHTTP");
}
function getUpdates()
{
if (requestObj) {
requestObj.open("GET", "http://localhost:8084/AyreonDepartmentManager/EmailRecServlet/*");
requestObj.onreadystatechange = function ()
{
if (requestObj.readyState == 4 && requestObj.status == 200) {
document.getElementById("progressbar").value = requestObj.responseText;
if(document.getElementById("progressbar").value == 3) {
window.location.href = "abc.jsp";
}
}
}
requestObj.send(null);
}
}
EmailRecServlet.java
是Servlet文件:
public class EmailRecServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
HttpSession session = request.getSession();
ServletContext context = request.getServletContext();
final String user = context.getInitParameter("user");
final String password = context.getInitParameter("pass");
int oldinboxsize = Integer.parseInt(context.getAttribute("Old Inbox Size").toString());
//1) get the session object
Properties properties = new Properties();
properties.put("mail.store.protocol", "imaps");
Session emailSession = Session.getDefaultInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
});
//2) create the POP3 store object and connect with the pop server
Store emailStore = emailSession.getStore("imaps");
emailStore.connect("imap.gmail.com", user, password);
//3) create the folder object and open it
Folder emailFolder = emailStore.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
//4) retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
int msgindex = 0;
int newinboxsize = messages.length;
if (newinboxsize > oldinboxsize) {
for(int i = 1; i <= (newinboxsize-oldinboxsize); i++) {
msgindex = messages.length-i;
Message message = messages[msgindex];
BodyPart clearTextPart = null;
out.write("Forming Message");
if (message instanceof MimeMessage) {
MimeMessage m = (MimeMessage) message;
Object contentObject = m.getContent();
if (contentObject instanceof Multipart) {
clearTextPart = null;
Multipart content = (Multipart) contentObject;
int count = content.getCount();
for (int j = 0; j < count; j++) {
BodyPart part = content.getBodyPart(j);
if (part.isMimeType("text/plain")) {
clearTextPart = part;
out.println("clearText obtained");
out.println("clearText is : ");
out.println(clearTextPart.getContent().toString());
}
}
session.setAttribute((message.getFrom()[msgindex].toString()), (String) clearTextPart.getContent());
out.println("written into session");
}
}
}
String difference = Integer.toString(newinboxsize - oldinboxsize);
out.write(difference);
}
//5) close the store and folder objects
emailFolder.close(false);
emailStore.close();
}
catch(MessagingException e) { e.printStackTrace(); }
catch(IOException e) { e.printStackTrace(); }
catch(Exception e) { e.printStackTrace(); }
}
}
我得到的错误是AJAX调用正常工作,但是当控件在servlet中时它只执行直到行:
out.println(clearTextPart.getContent().toString());
因此,我的进度条也保持为0并且没有进展以反映我收到的新电子邮件。
在IE调试器的“网络”选项卡中查看时,该特定请求的响应正文显示空字符串。 什么可能导致错误?我该如何删除此错误?如何将电子邮件内容放入我的Session对象,以便我可以在JSP页面上访问它?
请帮帮我。
答案 0 :(得分:0)
错误已解决。对我有用的是:
session.setAttribute((message.getFrom()[0].toString()), (String) clearTextPart.getContent());