Hiển thị các bài đăng có nhãn WEB. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn WEB. Hiển thị tất cả bài đăng

Lập Trình Web JSP - Gửi Email

Để gửi một Email bởi sử dụng một JSP là khá đơn giản. Nhưng trước hết bạn cần cài đặtJavaMail API và Java Activation Framework (JAF) trên thiết bị.
  • Bạn có thể tải phiên bản mới nhất của JavaMail (Version 1.2) từ Website chuẩn của Java..
  • Bạn có thể tải phiên bản mới nhất của JavaBeans Activation Framework JAF (Version 1.0.2) từ Website chuẩn của Java.
Tải và unzip các file này, trong các thư mục cấp độ cao nhất. Bạn cần thêm các file làmail.jar và activation.java vào trong CLASSPATH của bạn.

Gửi một Email đơn giản trong JSP

Ví dụ sau minh họa cách gửi một Email đơn giản từ thiết bị của bạn. Tại đây giả sử rằnglocalhost của bạn đã kết nối internet và có khả năng để gửi một Email. Ngoài ra, đảm bảo rằng, tất cả các jar file từ Java Email API package và JAF package là có sẵn trong CLASSPATH.
<%@ page import="java.io.*,java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%
   String result;
   // Recipient's email ID needs to be mentioned.
   String to = "abcd@gmail.com";

   // Sender's email ID needs to be mentioned
   String from = "mcmohd@gmail.com";

   // Assuming you are sending email from localhost
   String host = "localhost";

   // Get system properties object
   Properties properties = System.getProperties();

   // Setup mail server
   properties.setProperty("mail.smtp.host", host);

   // Get the default Session object.
   Session mailSession = Session.getDefaultInstance(properties);

   try{
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(mailSession);
      // Set From: header field of the header.
      message.setFrom(new InternetAddress(from));
      // Set To: header field of the header.
      message.addRecipient(Message.RecipientType.TO,
                               new InternetAddress(to));
      // Set Subject: header field
      message.setSubject("This is the Subject Line!");
      // Now set the actual message
      message.setText("This is actual message");
      // Send message
      Transport.send(message);
      result = "Sent message successfully....";
   }catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>
<html>
<head>
<title>Send Email using JSP</title>
</head>
<body>
<center>
<h1>Send Email using JSP</h1>
</center>
<p align="center">
<% 
   out.println("Result: " + result + "\n");
%>
</p>
</body>
</html>
Bây giờ, đặt code trên trong SendEmail.jsp file và gọi JSP này bởi sử dụng địa chỉ URL là http://localhost:8080/SendEmail.jsp, mà sẽ gửi một Email tới Email ID đã cho làabcd@gmail.com và sẽ hiển thị phản hồi sau:

Send Email using JSP

Result: Sent message successfully....
Nếu bạn muốn gửi một Email tới nhiều người nhận, thì phương thức sau sẽ được sử dụng để xác định nhiều Email ID:
void addRecipients(Message.RecipientType type, 
                   Address[] addresses)
throws MessagingException
Miêu tả các tham số:
  • type: Nó sẽ được thiết lập là TO, CC hoặc BCC. Với CC biểu diễn Carbon Copy và BCC biểu diễn Black Carbon Copy. Ví dụ: Message.RecipientType.TO
  • addresses: Đây là mảng các Email ID. Bạn sẽ cần sử dụng phương thức InternetAddress() trong khi xác định các Email ID đó.

Gửi một HTML Email trong JSP

Sau đây là một ví dụ minh họa cách gửi một HTML Email từ thiết bị của bạn bởi sử dụng Servlet. Tại đây giả sử rằng localhost của bạn đã kết nối internet và có khả năng để gửi một Email. Ngoài ra, đảm bảo rằng, tất cả các jar file từ Java Email API package và JAF package là có sẵn trong CLASSPATH.
Ví dụ này tương tự như ví dụ trước đó, ngoại trừ, chúng ta sử dụng phương thứcsetContent() để thiết lập nội dung của tham số thứ hai là “text/html” để xác định rằng HTML content đó được bao trong thông báo.
Sử dụng ví dụ này, bạn có thể gửi một HTML email lớn bao nhiêu tùy thích.
<%@ page import="java.io.*,java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%
   String result;
   // Recipient's email ID needs to be mentioned.
   String to = "abcd@gmail.com";

   // Sender's email ID needs to be mentioned
   String from = "mcmohd@gmail.com";

   // Assuming you are sending email from localhost
   String host = "localhost";

   // Get system properties object
   Properties properties = System.getProperties();

   // Setup mail server
   properties.setProperty("mail.smtp.host", host);

   // Get the default Session object.
   Session mailSession = Session.getDefaultInstance(properties);

   try{
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(mailSession);
      // Set From: header field of the header.
      message.setFrom(new InternetAddress(from));
      // Set To: header field of the header.
      message.addRecipient(Message.RecipientType.TO,
                               new InternetAddress(to));
      // Set Subject: header field
      message.setSubject("This is the Subject Line!");
     
      // Send the actual HTML message, as big as you like
      message.setContent("<h1>This is actual message</h1>",
                            "text/html" );
      // Send message
      Transport.send(message);
      result = "Sent message successfully....";
   }catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>
<html>
<head>
<title>Send HTML Email using JSP</title>
</head>
<body>
<center>
<h1>Send Email using JSP</h1>
</center>
<p align="center">
<% 
   out.println("Result: " + result + "\n");
%>
</p>
</body>
</html>
Bây giờ, thử sử dụng JSP trên để gửi thông báo HTML trên một Email ID đã cho.

Gửi Email với Attachment trong JSP

Đây là ví dụ để gửi Email cùng với một đính kèm từ thiết bị của bạn trong JSP:
<%@ page import="java.io.*,java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%
   String result;
   // Recipient's email ID needs to be mentioned.
   String to = "abcd@gmail.com";

   // Sender's email ID needs to be mentioned
   String from = "mcmohd@gmail.com";

   // Assuming you are sending email from localhost
   String host = "localhost";

   // Get system properties object
   Properties properties = System.getProperties();

   // Setup mail server
   properties.setProperty("mail.smtp.host", host);

   // Get the default Session object.
   Session mailSession = Session.getDefaultInstance(properties);

   try{
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(mailSession);

      // Set From: header field of the header.
      message.setFrom(new InternetAddress(from));

      // Set To: header field of the header.
      message.addRecipient(Message.RecipientType.TO,
                               new InternetAddress(to));

      // Set Subject: header field
      message.setSubject("This is the Subject Line!");

      // Create the message part 
      BodyPart messageBodyPart = new MimeBodyPart();

      // Fill the message
      messageBodyPart.setText("This is message body");
      
      // Create a multipar message
      Multipart multipart = new MimeMultipart();

      // Set text message part
      multipart.addBodyPart(messageBodyPart);

      // Part two is attachment
      messageBodyPart = new MimeBodyPart();
      String filename = "file.txt";
      DataSource source = new FileDataSource(filename);
      messageBodyPart.setDataHandler(new DataHandler(source));
      messageBodyPart.setFileName(filename);
      multipart.addBodyPart(messageBodyPart);

      // Send the complete message parts
      message.setContent(multipart );

      // Send message
      Transport.send(message);
      String title = "Send Email";
      result = "Sent message successfully....";
   }catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>
<html>
<head>
<title>Send Attachement Email using JSP</title>
</head>
<body>
<center>
<h1>Send Attachement Email using JSP</h1>
</center>
<p align="center">
<% 
   out.println("Result: " + result + "\n");
%>
</p>
</body>
</html>
Thử chạy JSP trên để gửi một file như là một Attachment cùng với một thông báo trên một Email ID đã cho.

Phần User Authentication

Nếu cần thiết để cung cấp User ID và Password tới Email server cho mục đích xác nhận (authentication) thì bạn có thể thiết lập các thuộc tính này như sau:
 props.setProperty("mail.user", "myuser");
 props.setProperty("mail.password", "mypwd");
Rest of the email sending mechanism would remain as explained above.

Sử dụng Form để gửi Email trong JSP

Bạn có thể sử dụng HTML form để chấp nhận các tham số của email và sau đó bạn có thể sử dụng đối tượng request để nhận tất cả thông tin đó như sau:
String to = request.getParameter("to");
String from = request.getParameter("from");
String subject = request.getParameter("subject");
String messageText = request.getParameter("body");
Khi bạn có tất cả thông tin trên, bạn có thể sử dụng các chương trình đã đề cập để gửi email.

Lập Trình Web JSP - Auto Refresh

Với một Webpage mà hiển thị chỉ số chứng khoán, exchange rate, … thì bạn cần Refresh các trang này bởi sử dụng nút Refresh hoặc Reload trên trình duyệt của bạn.
JSP giúp công việc này được thực hiện dễ dàng hơn bằng việc cung cấp cho bạn một kỹ thuật giúp bạn Refresh trang web một cách tự động sau một khoảng thời gian đã cho.
Cách đơn giản nhất để Refresh một Webpage là sử dụng phương thức setIntHeader() của đối tượng Response. Sau đây là cú pháp cho phương thức này:
public void setIntHeader(String header, int headerValue)
Phương thức này gửi trường header là “Refresh” trở lại trình duyệt cùng một giá trị integer chỉ khoảng thời gian bằng giây.

Ví dụ về Auto Refresh trong JSP

Sau đây là ví dụ minh họa cách một JSP thực hiện việc Auto Refresh một Webpage bởi sử dụng phương thức setIntHeader() để thiết lập Refresh header.
<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<%
   // Set refresh, autoload time as 5 seconds
   response.setIntHeader("Refresh", 5);
   // Get current time
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("Crrent Time: " + CT + "\n");
%>
</center>
</body>
</html>
Bây giờ đặt code trên trong main.jsp và thử truy cập nó. Nó hiển thị system time hiện tại sau mỗi 5 s như sau. Bạn chạy JSP này và đợi kết quả:

Auto Refresh Header Example

Current Time is: 9:44:50 PM

Lập Trình Web JSP - Hit Counter

Một Hit Counter nói cho bạn biết về lượng khách truy cập trên một trang cụ thể trong Website của bạn. Thường thì, bạn đính kèm một Hit Counter với index.jsp page khi giả sử khách truy cập đầu tiên thăm Homepage của bạn.
Để triển khai một Hit Counter, bạn có thể sử dụng một đối tượng ẩn application và được liên kết với phương thức getAttribute() và setAttribute().
Đối tượng này là một sự biểu diễn của một JSP page thông qua toàn bộ vòng đời của nó. Đối tượng application được tạo khi JSP page được khởi tạo và sẽ bị gỡ bỏ khi JSP page bị gỡ bỏ bởi phương thức jspDestroy().
Dưới đây là cú pháp để thiết lập một biến cho đối tượng application trong JSP:
application.setAttribute(String Key, Object Value);
Bạn có thể sử dụng phương thức trên để thiết lập một biến Hit Counter và để reset cùng một biến đó. Sau đây là phương thức để đọc biến mà được thiết lập bởi phương thức trước đó:
application.getAttribute(String Key);
Mỗi khi một người sử dụng truy cập trang của bạn, bạn có thể đọc giá trị hiện tại của Hit Counter và tăng giá trị đó thêm 1 và sau đó thiết lập nó để sử dụng lần sau.

Ví dụ

Đây là ví dụ minh họa cách bạn sử dụng JSP để điều khiển tổng lượt click trên một trang cụ thể. Nếu bạn muốn tính tổng lượt click trên Website, thì bạn sẽ phải bao code này trong tất cả JSP page.
<%@ page import="java.io.*,java.util.*" %>

<html>
<head>
<title>Applcation object in JSP</title>
</head>
<body>
<%
    Integer hitsCount = 
      (Integer)application.getAttribute("hitCounter");
    if( hitsCount ==null || hitsCount == 0 ){
       /* First visit */
       out.println("Welcome to my website!");
       hitsCount = 1;
    }else{
       /* return visit */
       out.println("Welcome back to my website!");
       hitsCount += 1;
    }
    application.setAttribute("hitCounter", hitsCount);
%>
<center>
<p>Total number of visits: <%= hitsCount%></p>
</center>
</body>
</html>
Bây giờ đặt code trên trong main.jsp và gọi JSP bởi sử dụng địa chỉ URL là http://localhost:8080/main.jsp. Điều này sẽ hiển thị giá trị Hit Counter mà sẽ tăng mỗi khi bạn refresh trang đó. Bạn có thể thử truy cập trang bởi sử dụng các trình duyệt khác và bạn sẽ thấy rằng: Hit Counter sẽ vẫn tăng với mỗi lượt click và sẽ hiển thị kết quả giống như sau:
Welcome back to my website!
Total number of visits: 12

Reset Hit Counter trong JSP

Điều gì xảy ra nếu bạn khởi động lại ứng dụng (ví dụ: Web server), điều này sẽ reset biến application và lượng đếm của bạn sẽ reset về 0. Để tránh điều này, bạn có thể triển khai counter theo cách chuyên nghiệp hơn, như sau:
  • Định nghĩa một Database Table với một lượng đếm đơn, gọi là hitcount. Gán giá trị 0 cho nó.
  • Với mỗi lượt click, đọc table để nhận giá trị hitcount.
  • Tăng giá trị của hitcount thêm 1 và cập nhật table với giá trị mới.
  • Hiển thị giá trị mới của hitcount như là tổng lượng click trên trang đó.
  • Nếu bạn muốn tính lượng click cho toàn bộ trang, triển khai các bước trên cho toàn bộ trang trong Website.