1. Trang chủ
  2. » Giáo án - Bài giảng

Tài liệu hướng dẫn Servlet cơ bản

32 857 12

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 359,5 KB

Nội dung

Call your servlet from a web browser.*/ Giải nén jakarta-tomcat-4.0.3 vào ổ tomcat-4.0.3 C:\Borland\JBuilder2006\thirdparty\jakarta-Thiết lập các biết môi trường: Bao gồm các biến: PATH:

Trang 1

Phần 1 Nghiên Cứu Công Nghệ SERVLET

Tuần 1

I Sơ lược về Servlet

Servlets là tập mã lệnh java được chạy trên ứng dụng web (do đó tên

"Servlets", tương tự như "Applets" trên phía client) để trả lời những yêu cầu

từ phía client.

Servlets sử dụng các chuẩn mỡ rộng của java như class trong gói

javax.servlet và javax.servlet.http Từ khi Servlets được viết với các ngôn ngữ cấp cao và kéo theo những framework chuẩn, Chúng cung cấp cách thức để khởi tạo những yêu cầu phức tạp tinh vi phiá server và phụ thuộc vào HDH.

HTTP Servlets bao gồm những nội dung chính sau:

* Xử lý và lưu trữ dữ liệu được submit bởi HTML form.

* Cung cấp các ngữ cảnh động, chẳng hạn trả về kết quả của câu query từ phía server cho client

1 Kiến trúc của Servlet Application Architecture

2 Cách thức Servlet hoạt động trong Servlet Container

Trang 2

A servlet được loaded bởi servlet container lần đầu tiên servlet được requested Servlet xử lý các yêu cầu của user request,và trả về cho the servlet container,rồi được gởi tới người dùng Sau khi xử lý xong servlet nằm trong memory và đợi cho other requests

Nó chỉ được unloaded khỏi memory chỉ khi servlet container thấy thiếu

memory.Tuy nhiên servlet container luôn so sánh the timestamp của servlet đã load với servlet class file Nếu thấy có dấu hiệu bị thay đổi request thì servlet is reloaded into memory.

3 Mô tả các bước cài đặt và cấu hình Apache tomcat để chạy Servlet

Hiện tại có rất nhiều servlet containers Một trong những cái phổ biến nhất là Tomcat Một cái khác là JRun với 3 editions: (Developer, Professional, and Enterprise)

Và chính Tomcat cũng là web server.

/*Six Steps to Running Your First Servlet

1 Create a directory structure under Tomcat for your application

2 Write the servlet source code You need to import the javax.servlet package and

the javax.servlet.http package in your source file

Trang 3

3 Compile your source code

4 Create a deployment descriptor

5 Run Tomcat

6 Call your servlet from a web browser.*/

Giải nén jakarta-tomcat-4.0.3 vào ổ tomcat-4.0.3

C:\Borland\JBuilder2006\thirdparty\jakarta-Thiết lập các biết môi trường:

Bao gồm các biến:

PATH: xác lập đường dẫn tới thư mục bin của jdk và jre

JAVA_HOME: xác định thư mục chưa java jdk\

CLASSPATH: chỉ đường dẫn tới tập tin servlet-api.jar và các tập tin hổ trợ JDBC …

để giúp cho quá trình dịch bằng JAVAC

CATALINA_HOME: Đường dẫn tới thư mục tomcat

Ví dụ về cách thiết lập biến môi trường

Tạo thu mục Deployment

Trong thư mục webapps

Tạo thư mục cần Deployment ví dụ: giaoviec

Trong thư mục giaoviec tạo thư mục WEB_INF

Trong thư mục WEB_INF tạo thư mục classes

Cấu trúc cây thư mục như sau:

Trang 4

Khởi tạo Deployment Descriptor

Để chạy một file servlet ví dụ như file HttpRequestDemoServlet thì ta cần phải cấu

hình trong file Web.xml File này được đặt trong thư mục WEB_INF và có các cú pháp như ví dụ sau:

Trang 5

a Để khởi động Tomcat ta vào thư mục bin của Tomcat rồi chạy file Startup

b Để tắt Tomcat ta vào thư mục bin và chạy file Shutdown

Chạy File Servet từ trình duyệt

Từ cửa sổ trình duyệt chạy chạy đường dẫn ví dụ như sau:

public class TestingServlet extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

//tao đối tượng PrintWriter đưa giá trị trả về cho clien

PrintWriter out = response.getWriter();

Trang 6

The Interfaces in the javax.servlet Package

Filter Interface này giống như một bộ loc A filter chặn đứng

một yêu cầu trước khi nó có thể thực hiện thao tác trên request, response, hoặc cả hai.

FilterChain Servlet container tạo ra một đối tượng FilterChain cung

cấp môt cái nhìn tổng quan lên yêu cầu của một request bị ngăn chặn thông tin.

FilterConfig Servlet container tạo ra một đối tượng FilterConfig từ

thông tin như tên filter và tham số ban đầu, có thể thu được.

RequestDispatcher Định nghĩa một đối tượng được phái đi lấy thông tin từ

Servlet hoặc một trang Servlet Interface chính của tất cả các servlet phải thực thi trực tiếp

hoặc gián tiếp.

ServletConfig Miêu tả một đối tượng servlet có cấu trúc như thế nào,

như là: tên servlet, tham số ban đầu, và đối tượng ServletContext , có thể thu được

ServletContext Đối tượng ServletContext interface giữa servlet container

and a servlet Một đối tượng ServletContext tồn tại trong mỗi ứng dụng Web thông qua máy ảo Java Virtual Machine (JVM) Trong những ứng dụng trên JVM, đối tượng ServletContext có thể sử dụng để chia sẻ thông tin toàn cục.

ServletContextAttributeListener Một lớp thực thi interface này được sử dụng để nhận

thông báo của sự thay đổi đến thuộc tính của đối tượng ServletContext.

ServletContextListener Một lớp thực thi interface này được sử dụng để nhận

thông báo của sự thay đổi đến đối tượng ServletContext ServletRequest Miêu tả một yêu cầu từ một web client

ServletResponse Miêu tả một phản hồi từ servlet đến một web client.

SingleThreadModel Interface này được thực thi bởi một servlet để đảm bảo

servlet điều khiển tại một thời điểm chỉ một request

The Classes in the javax.servlet Package

GenericServlet Một lớp trừu tượng thực thi cả 2 giao tiếp Servlet và

ServletConfig Bạn etends từ lớp này để tạo một giao

Trang 7

1 Vòng đời của Servlet

Phương thức khởi tạo init():

public void init(ServletConfig config) throws ServletException

Phương thức khởi tạo này được gọi khi lần đầu tiên trình chủ Web Server nạp mã thực thi của Servlet từ tập tin class vào bộ nhớ và bắt đầu cho phép Servlet hoạt động Bạn có thể dựa vào phương thức này để khởi tạo các biến môi trường và giá trị ban đầu cần thiết cho quá trình thực thi Servlet sẽ diễn ra tiếp theo Thông thường trong phương thức init() ta khởi tạo giá trị mảng, tạo sẵn kết nối đến nguồn dữ liệu cho Servlet trong phương thức init().

Phương thức phục vụ service():

Trang 8

public void service(ServletRequest req, ServletResponse resp) throws

IOException

Sau khi phương thức init() đã hoàn tất, trình chủ Web Server sẽ triệu gọi đến

phương thức phục vụ service() Phương thức này được xem là trung tâm xử lý của Servlet mà bạn cần phải cài đặt Khi trình chủ nạp Servlet vào bộ nhớ, phương thức init() chỉ được gọi duy nhất một lần trong khi phương thức service() có thể được triệu gọi nhiều lần ứng với mỗi yêu cầu Servlet phát sinh từ trình duyệt phía máy khách Bên trong phương thức servise() bạn có thể sử dụng đối tượng tham số

ServletRequest và ServletReponse để tiếp nhập dữ liệu từ trình khách chuyển lên và kết xuất kết quả phản hồi lại trình khách.

Phương thức hủy destroy():

Khi Servlet khong còn dùng đến nũa hoặc hết thời gian qui định lưu giữ trong bộ nhớ của trình chủ WebServer, nó sẽ bị trìnnh chủ giải phóng Trước khi Servlet bị

hủy phương thức destroy() sẽ được gọi Nêu nhu bạn dùng phương thức init() để thực hiện khởi tạo biến cho Servlet thi phương thức destroy() ngược lại có thể dùng để dọn dẹp tài nguyên mà các biến chiếm giữ, đóng các kết nối mà phương thức init() đã

mờ…

Phương thức getServletConfig() và getServletInfo():

Hai phương thức này nhằm mục đích cung cấp thông tin Phương thức getServletConfig() giúp người sử dụng Servlet có được đối tượng ServletConfig chứa các thông tin khởi tạo

từ môi trường ngoài đưa vào Servlet getServletInfo() trả về một chuỗi thông tin mô tả ý nghĩa và mục đích của Servlet.

public String getServletInfo();

public ServletConfig getServletConfig();

Ví dụ minh họa

PrimitiveServlet.java

import javax.servlet.*;

import java.io.IOException;

public class PrimitiveServlet implements Servlet {

public void init(ServletConfig config) throws ServletException {

Trang 9

Lưu lại và bỏ vào trong thư mục giaoviec/Web-INF Sau đó tạo một Servlet

để lấy thông tin từ Web.xml vừa tạo ra Lưu Servlet voi tên

ConfigDemoServlet.java biên dịch và bỏ file.class vào thư mục

public class ConfigDemoServlet implements Servlet {

public void init(ServletConfig config) throws ServletException {

//Enumeration getInitParameterNames()

//trả về tất cả tên của tham số khổi tạo

Enumeration parameters = config.getInitParameterNames();

Trang 10

//Lấy và in ra kết quả thu được

while (parameters.hasMoreElements()) {

String parameter = (String) parameters.nextElement();

System.out.println("Parameter name : " + parameter);

Nhận thông tin từ Servlet Context

Thông tin về Servlet context là các thông tin về môi trường của hệ thống

String attribute = (String) attributes.nextElement();

System.out.println("Attribute name : " + attribute);

Trang 11

4 Cách chia sẻ thông tin từ 2 file Servlet

Đôi khi ta cần chia sẽ các thông tin từ các Servlet như thông tin về connection string

Gán giá trị:

AttributeSetterServlet.java import javax.servlet.*;

import java.io.IOException;

public class AttributeSetterServlet implements Servlet {

public void init(ServletConfig config) throws ServletException {

ServletContext servletContext = config.getServletContext(); servletContext.setAttribute("password", "dingdong");

Trang 12

public ServletConfig getServletConfig() {

return null;

}

}

Biên dịch và lưu file class vào giaoviec/Web-INF/classes

Startup Tomcat và gõ địa chỉ

http://localhost:10000/giaoviec/servlet/AttributeSetterServlet để gán giá trị cho Attribute

String attribute = (String) attributes.nextElement();

System.out.println("Attribute name : " + attribute);

Trang 13

Biên dịch và lưu file class vào giaoviec/Web-INF/classes

Gõ địa chì http://localhost:10000/giaoviec/servlet/ResponseDemoServlet

để xem giá trị được gán

5 Cách nhận Query String từ ServletRequest Interface

Request và Response:

Một ứng dụng web bao gồm các Resquest và Respons User từ trình duyệt sẽ gởi yêu cầu tới Servlet container Serlvet container gởi yêu cầu tới Servlet Các Resquest này được nhậnb và xử lý tại method service

The ServletRequest Interface

Giao diện: tạo file request.html nhận thông tin nhập vào

lưu tại giaoviec/

<BR><BR>

Author: <INPUT TYPE="TEXT" NAME="Author">

<INPUT TYPE="SUBMIT" NAME="Submit">

<INPUT TYPE="RESET" VALUE="Reset">

</FORM>

</BODY>

</HTML>

Trang 14

Xử lý: tạo file RequestDemoServlet.java để nhận thông tin từ trang html ở trên

sau đó in ra

import javax.servlet.*;

import java.util.Enumeration;

import java.io.IOException;

public class RequestDemoServlet implements Servlet {

public void init(ServletConfig config) throws ServletException {

System.out.println("Character Encoding: " +

request.getCharacterEncoding());

System.out.println("Content Type: " + request.getContentType()); System.out.println("Content Length: " + request.getContentLength()); System.out.println("Remote Address: " + request.getRemoteAddr()); System.out.println("Remote Host: " + request.getRemoteHost()); System.out.println("Scheme: " + request.getScheme());

Enumeration parameters = request.getParameterNames();

while (parameters.hasMoreElements()) {

String parameterName = (String) parameters.nextElement();

System.out.println("Parameter Name: " + parameterName);

String attribute = (String) attributes.nextElement();

System.out.println("Attribute name: " + attribute);

Trang 15

http://localhost:10000/giaoviec/servlet/request.html kết quả sẽ in ra trong của sổ Startup của Tomcat

6 Cách nhận Query String từ ServletResponse Interface

Giao diện: tạo file response.html nhận thông tin nhập vào lưu tại

<BR><BR>

Author: <INPUT TYPE="TEXT" NAME="Author">

<INPUT TYPE="SUBMIT" NAME="Submit">

<INPUT TYPE="RESET" VALUE="Reset">

public class ResponseDemoServlet implements Servlet {

public void init(ServletConfig config) throws ServletException {

out.println("<BR>Server Port: " + request.getServerPort());

out.println("<BR>Server Name: " + request.getServerName());

Trang 16

out.println("<BR>Content Length: " + request.getContentLength()); out.println("<BR>Remote Address: " + request.getRemoteAddr()); out.println("<BR>Remote Host: " + request.getRemoteHost());

out.println("<BR>Scheme: " + request.getScheme());

Enumeration parameters = request.getParameterNames();

while (parameters.hasMoreElements()) {

String parameterName = (String) parameters.nextElement();

out.println("<br>Parameter Name: " + parameterName);

String attribute = (String) attributes.nextElement();

out.println("<BR>Attribute name: " + attribute);

public class HttpRequestDemoServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Trang 17

out.println("<BR>First Name: <INPUT TYPE=TEXT NAME=FirstName>"); out.println("<BR>Last Name: <INPUT TYPE=TEXT NAME=LastName>"); out.println("<BR><INPUT TYPE=SUBMIT VALUE=Submit>");

Chưa thêm đuoc hình vào

The AdBanner.html File

public class addServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Trang 18

Viết 2 Servlet FirstSevlet và SecondServlet biên dịch và lưu file class tại thư mục

giaoviec/Web-INF/classes

Sau đó mở IE và gõ địa chỉ sau: http://localhost:10000/giaoviec/servlet/FirstServlet

FirstServlet.java (trang này sẽ lấy các AttributeNames do trang

SecondSerlvet lấy được và in ra trên trình duyệt)

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class FirstServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

public class SecondServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

Enumeration enume = request.getAttributeNames();

Trang 19

PrintWriter out = response.getWriter();

Ta có thể dùng Response này để send cookie tới browser hoặc các thông tin về Session Hoặc có thể dùng sendRedirect Để báo cho Browser gửi mổt lần nữa tới trang khác

public class LoginServlet extends HttpServlet {

private void sendLoginForm(HttpServletResponse response,

out.println("<BR>User Name: <INPUT TYPE=TEXT NAME=userName>");

out.println("<BR>Password: <INPUT TYPE=PASSWORD NAME=password>"); out.println("<BR><INPUT TYPE=SUBMIT VALUE=Submit>");

out.println("</FORM>");

out.println("</BODY>");

out.println("</HTML>");

}

Trang 20

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

sendLoginForm(response, false);

}

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

String userName = request.getParameter("userName");

String password = request.getParameter("password");

if (userName!=null && password!=null &&

userName.equals("tinh") && password.equals("truong")) {

Sending an Error Code

response.sendError(response.SC_FORBIDDEN, "Login failed.");

Sending Special Characters

public class SpecialCharacterServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Ngày đăng: 13/05/2014, 11:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w