Cập nhật nội dung chi tiết về Jsp] Lập Trình Java Servlet Cơ Bản P5: Forward (Chuyển Tiếp) Và Redirect (Chuyển Hướng) Servlet mới nhất trên website Cuocthitainang2010.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.
Trong bài viết này chúng ta sẽ tìm hiểu cách Servlet Forward (Chuyển tiếp) và Servlet Redirect (Chuyển hướng). Phân biệt giữa Forward và Redirect cùng các ví dụ minh họa.
Để thực hiện được hướng dẫn này, bạn cần đọc và thực hiện những hướng dẫn ở bài viết trước:
1. Tạo WebProject đầu tiên
2. Cấu hình eclipse
3. Tạo và chạy Servlet đầu tiên
1. Forward (Chuyển tiếp)
Chuyển tiếp (Forward): Khi một yêu cầu (request) của trình duyệt gửi tới một Servlet, nó có thể chuyển tiếp yêu cầu tới một trang khác (hoặc một servlet khác). Địa chỉ trên trình duyệt của người dùng vẫn là đường dẫn của trang đầu tiên, nhưng nội dung của trang do trang được chuyển tiếp tới tạo ra. Trang được chuyển tiếp tới bắt buộc phải là môt trang (hoặc Servlet) nằm trong ứng dụng web của bạn. Với Forward bạn có thể sử dụng request.setAttribute() để truyền dữ liệu từ trang 1 sang trang thứ 2.
ForwardDemoServlet.java
package org.o7planning.tutorial.servlet.other; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.o7planning.tutorial.beans.Constants; @WebServlet("/other/forwardDemo") public class ForwardDemoServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String forward = request.getParameter("forward"); if ("true".equals(forward)) { System.out.println("Forward to ShowMeServlet"); request.setAttribute(Constants.ATTRIBUTE_USER_NAME_KEY, "Hi, I'm Tom come from Walt Disney !"); RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher("/showMe"); dispatcher.forward(request, response); return; } ServletOutputStream out = response.getOutputStream(); out.println("- servletPath=" + request.getServletPath()); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
Chạy lại Webserver và chạy lần lượt 2 URL:
Trong trường hợp 1: Không có forward, dữ liệu nhìn thấy trên trang là của ForwardDemoServlet tạo ra.
Trường hợp 2: Có chuyển tiếp (forward) sang servlet ShowMeServlet. Trong trường hợp này URL trên trang là không đổi, trong khi dữ liệu là của ShowMeServlet tạo ra.
Forward (chuyển tiếp) thường được sử dụng trong một số tình huống chẳng hạn người dùng yêu cầu servlet A, tuy nhiên trang này bắt buộc phải login trước, trong servlet A kiểm tra thấy nếu chưa login thì chuyển tiếp sang servlet Login.
Quay lại với RequestDispatcher, chúng ta có 2 cách để lấy đối tượng RequestDispatcher.
Trường hợp request.getServletContext().getRequestDispatcher(url) trả về RequestDispatcher có vị trí tương đối với contextPath (có vị trí tương đối với thư mục gốc của website).
http://localhost:8080/contextPath
http://localhost:8080/ServletTutorial
Còn gọi request.getRequestDispatcher(url) trả về RequestDispatcher có vị trí tương đối với trang hiện tại.
http://localhost:8080/ServletTutorial/other/forwardDemo
Chú ý:
Redirect (Chuyển hướng) cho phép bạn chuyển hướng tới các trang bao gồm cả các trang nằm ngoài Website.
Forward (Chuyển tiếp) chỉ cho phép chuyển tới các trang nằm trong Website, đồng thời có thể chuyển dữ liệu giữa 2 trang thông qua request.setAttribute.
2. Redirect (Chuyển hướng)
Chuyển hướng (Redirect): Khi một yêu cầu (request) từ phía người dùng tới một Servlet (Trang A), servlet này có thể chuyển yêu cầu này tới một trang khác (Trang B), và kết thúc nhiệm vụ của nó. Trang được chuyển hướng tới có thể là trang trong ứng dụng của bạn, hoặc có thể là một trang bất kỳ. Địa chỉ trên trình duyệt của người dùng lúc này sẽ hiển thị đường dẫn của trang B. Khác với chuyển tiếp (Forward). Với Redirect bạn không thể sử dụng request.setAttribute(..) để truyền dữ liệu từ trang A sang trang B.
ShowMeServlet.java
package org.o7planning.tutorial.servlet.other; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.o7planning.tutorial.beans.Constants; @WebServlet("/showMe") public class ShowMeServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String value = (String) request.getAttribute(Constants.ATTRIBUTE_USER_NAME_KEY); ServletOutputStream out = response.getOutputStream(); out.println(value); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
RedirectDemoServlet.java
package org.o7planning.tutorial.servlet.other; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/other/redirectDemo") public class RedirectDemoServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String redirect = request.getParameter("redirect"); if ("true".equals(redirect)) { System.out.println("Redirect to ShowMeServlet"); String contextPath = request.getContextPath(); response.sendRedirect(contextPath + "/showMe"); return; } ServletOutputStream out = response.getOutputStream(); out.println("- servletPath=" + request.getServletPath()); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
Chạy lại webserver và truy cập lần lượt 2 đường dẫn sau lên trình duyệt:
Với đường dẫn thứ nhất nhận được:
Với đường dẫn thứ 2, request đã chuyển hướng sang ShowMeServlet, đường dẫn URL bạn thấy trên trình duyệt là đường dẫn của servlet ShowMeServlet.
Hướng Dẫn Lập Trình Java Servlet Cho Người Mới Bắt Đầu
Tài liệu này được viết dựa trên:
Eclipse 4.6 (NEON)
Servlet 3.0
Tomcat 8
Java Servlet là chương trình chạy trên một Web hoặc ứng dụng máy chủ (Application Server) và hành động như một lớp trung gian giữa một yêu cầu đến từ một trình duyệt Web hoặc HTTP khách (Client) khác và cơ sở dữ liệu hoặc các ứng dụng trên máy chủ HTTP (HTTP Server).
Sử dụng Servlet, bạn có thể thu thập đầu vào từ người dùng thông qua các hình thức trang web, từ một cơ sở dữ liệu hoặc một nguồn khác, và tạo ra các trang web động.
Có 5 bước:
Tải lớp Servlet vào bộ nhớ.
Tạo đối tượng Servlet.
Gọi phương thức init() của Servlet.
Gọi phương thức service() của Servlet.
Gọi phương thức destroy() của Servlet.
Bước 1, 2 và 3 được thực thi một lần duy nhất, khi mà Servlet được nạp lần đầu. Mặc định các Servlet không được tải (load) lên cho tới khi nó nhận một đòi hỏi đầu tiên từ người dùng. Bạn có thể bắt buộc Servlet Container (Bộ chứa các Servlet) tải các Servlet khi nó khởi động.
Bước 4 được thực thi nhiều lần, mỗi khi có đòi hỏi từ phía người dùng tới Servlet.Bước 5 được thực thi khi bộ chứa Servlet (Servlet Container) gỡ bỏ tải (unloaded) một Servlet.
Khi yêu cầu (request) của người dùng gửi tới Servlet, Servlet sẽ gọi phương thứcservice() để phục vụ yêu cầu của người dùng,service() sẽ gọi một trong hai phương thứcdoGet() hoặcdoPost(). Trong Servlet của bạn, bạn cần ghi đè và xử lý tại các phương thức này.
Như vậy khi người dùng gửi yêu cầu một Servlet, Servlet sẽ được tạo ra tại thời điểm có yêu cầu lần đầu tiên tới, đồng thời sẽ gọi phương thứcinit() của servlet để khởi tạo cho nó,init() được gọi duy nhất 1 lần. Phương thứcdestroy() dùng để hủy servlet, nó sẽ được gọi một lần duy nhất khi bạn gỡ bỏ triển khai (undeloy) ứng dụng web hoặc tắt (shutdown) Web Server (Máy chủ web).
Để bắt đầu với Servlet, bạn cần download Tomcat Web Server và khai báo nó với Eclipse. Bạn có thể xem hướng dẫn tại:
Project Name: ServletTutorial
Đây là hình ảnh Project được tạo ra:
Chọn đến vị trí cài đặt Tomcat 8 của bạn.
Nhấn phải chuột vào project ServletTutorial, chọn“Run As/Run on Server”.
Website đang chạy trên trình duyệt của Eclipse.
Khi bạn nhập vào đường dẫn:
Thì website sẽ trả về nội dung trang index.html, điều này hoàn toàn dễ hiểu.
Tuy nhiên, nếu bạn nhập vào đường dẫn:
Ghi chú: /ServletTutorial được gọi là Context-Path, mỗi website đều có Context-Path, bạn có thể cấu hình cho nó một giá trị khác, hoặc để rỗng. Trong trường hợp rỗng bạn có thể truy cập vào web của bạn theo cách:
http://localhost:8080
http://localhost:8080/index.html
Khi chạy với Tomcat mặc định nó lấy tên Project làm Context-Path.
Một số class sẽ tham gia vào các ví dụ tiếp theo của tài liệu này.
Cần khai báo thư viện Servlet, các thư viện này chỉ là các thư viện Runtime của Servlet, nó có sẵn trên các Web Server, ở đây chúng ta dùng Tomcat, vì vậy hãy khai báo chúng.
Nhấn phải chuột vào Project chọn Properties:
Lúc này project đã không còn thông báo lỗi.
Tiếp theo bạn cần khai báo HelloServlet và đường dẫn để truy cập vào nó trong chúng tôi . Bạn cần thêm đoạn cấu hình sau:
Chạy lại project bằng cách nhấn phải chuột chọn:
Khi một Servlet được gọi tới, tùy tình huống mà một trong hai phương thức doGet(..) hoặc doPost(..) sẽ được gọi.
Cụ thể khi nào gọi doGet(..) và khi nào gọi doPost(..) chúng ta sẽ bàn sau.
Trong doGet() hoặc doPost() bạn có thể lấy ra đối tượng ServletOutputStream, đây là luồng đầu ra (ouput stream), nó gửi dữ liệu về trình duyệt của người dùng. Gọi ServletOutputStream.println(..) để ghi các dòng text vào trong luồng (stream). ServletOutputStream out = response.getOutputStream();
Khi khai báo servlet trong chúng tôi bạn có thể truyền các tham số khởi tạo cho nó.
Bạn có thể truy cập Servlet này theo một trong 2 đường dẫn sau:
Có 4 cách để cấu hình một đường dẫn cho Servlet:
URL PatternVí dụ/*
http://example.com/contextPath
http://example.com/contextPath/status/abc
/status/abc/*
http://example.com/contextPath/status/abc
http://example.com/contextPath/status/abc/mnp
http://example.com/contextPath/status/abc/mnp?date=today
http://example.com/contextPath/test/abc/mnp*.map
http://example.com/contextPath/status/abc.map
http://example.com/contextPath/status.map?date=today
http://example.com/contextPath/status/abc.MAP/
Đây là Servlet mặc định.
Khi người dùng nhập vào một đường dẫn trên trình duyệt, nó sẽ được gửi tới WebContainer. WebContainer cần phải quyết định xem Servlet nào sẽ phục vụ yêu cầu này từ phía người dùng.
Ví dụ tạo một Servlet vớiurl-pattern có dấu hoa thị, chẳng hạn:
Các URL có dạng sau đều được phục vụ bởi AsteriskServlet (/any/*).
Servlet mặc định:
Servlet với url-pattern = /
Là một servlet mặc định, servlet này sẽ được sử dụng để xử lý các yêu cầu (request) mà có đường dẫn không khớp với bất kỳ mộturl-pattern nào của các Servlet khác được khai báo trong ứng dụng của bạn.
Hãy xem một ví dụ minh họa với Servlet mặc định:
Bạn có thể chạy lại ứng dụng web, và truy cập đường dẫn:
Đường dẫn ở trên có servletPath = /news/tomAndJerry, không khớp với đường dẫn của Servlet nào bạn đã khai báo. Khi đó“Servlet mặc định” sẽ phục vụ request này.
Thông tin request từ client.
Thông tin Server
Thông tin Client
Thông tin Header gửi theo request
….
Chạy lại ứng dụng web và truy cập vào đường dẫn:
Chuyển tiếp (Forward): Khi một yêu cầu (request) của trình duyệt gửi tới một Servlet, nó có thể chuyển tiếp yêu cầu tới một trang khác (hoặc một servlet khác). Địa chỉ trên trình duyệt của người dùng vẫn là đường dẫn của trang đầu tiên, nhưng nội dung của trang do trang được chuyển tiếp tới tạo ra.
Trang được chuyển tiếp tới bắt buộc phải là môt trang (hoặc Servlet) nằm trong ứng dụng web của bạn.
Với Forward bạn có thể sử dụng request.setAttribute() để truyền dữ liệu từ trang 1 sang trang thứ 2.
Chạy lại Webserver và chạy lần lượt 2 URL:
Forward (chuyển tiếp) thường được sử dụng trong một số tình huống chẳng hạn người dùng yêu cầu servlet A, tuy nhiên trang này bắt buộc phải login trước, trong servlet A kiểm tra thấy nếu chưa login thì chuyển tiếp sang servlet Login.
Trường hợp request.getServletContext().getRequestDispatcher(url) trả về RequestDispatcher có vị trí tương đối với contextPath (có vị trí tương đối với thư mục gốc của website).
http://localhost:8080/contextPath
http://localhost:8080/ServletTutorial
http://localhost:8080/ServletTutorial/other/forwardDemo
Chú ý:
Redirect (Chuyển hướng) cho phép bạn chuyển hướng tới các trang bao gồm cả các trang nằm ngoài Website.
Forward (Chuyển tiếp) chỉ cho phép chuyển tới các trang nằm trong Website, đồng thời có thể chuyển dữ liệu giữa 2 trang thông qua request.setAttribute.
Chuyển hướng (Redirect): Khi một yêu cầu (request) từ phía người dùng tới một Servlet (Trang A), servlet này có thể chuyển yêu cầu này tới một trang khác (Trang B), và kết thúc nhiệm vụ của nó. Trang được chuyển hướng tới có thể là trang trong ứng dụng của bạn, hoặc có thể là một trang bất kỳ. Địa chỉ trên trình duyệt của người dùng lúc này sẽ hiển thị đường dẫn của trang B.
Khác với chuyển tiếp (Forward). Với Redirect bạn không thể sử dụng request.setAttribute(..) để truyền dữ liệu từ trang A sang trang B.
Chạy lại webserver và truy cập lần lượt 2 đường dẫn sau lên trình duyệt:
Với đường dẫn thứ nhất nhận được:
Với đường dẫn thứ 2, request đã chuyển hướng sang ShowMeServlet, đường dẫn URL bạn thấy trên trình duyệt là đường dẫn của servlet ShowMeServlet.
Đối tượng HttpSession mô tả một phiên làm việc (session) của người dùng. Một phiên làm việc của người dùng chứa nhiều thông tin người dùng, và xuyên suốt trên các yêu cầu (request) đã gửi tới HTTP server.
Khi lần đầu tiên người dùng vào trang web của bạn, người dùng sẽ nhận được một ID duy nhất phân biệt với các người dùng khác. ID này thường được lưu trữ trong cookie hoặc tham số của request.
Đây là đoạn code để bạn truy cập vào đối tượng session:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); }Bạn có thể lưu trữ các giá trị vào đối tượng session, và lấy chúng ra sau đó, có thể là tại một trang khác. Trước hết, hãy xem cách bạn có thể lưu trữ giá trị vào trong đối tượng session:
HttpSession session = request.getSession(); UserInfo loginedInfo = new UserInfo("Tom", "USA", 5); session.setAttribute(Constants.SESSION_USER_KEY, loginedInfo);Và lấy lại các thông tin đã lưu trữ trong Session tại một trang nào đó.
HttpSession session = request.getSession(); UserInfo loginedInfo = (UserInfo) session.getAttribute(Constants.SESSION_USER_KEY);Tiếp theo bạn có thể xem tiếp tài liệu về Servlet Filter (Bộ lọc servlet):
Học Lập Trình Java Cơ Bản Dễ Dàng Với 10+ Nguồn Giáo Trình Java Đầy Đủ Nhất
Với 12 giáo trình học lập trình Java bằng cả tiếng Việt và tiếng Anh dành cho cả Fresher, Junior và Senior do ITviec chọn lọc, bạn đã có thể tự học Java cơ bản đến nâng cao và nhanh chóng phát triển sự nghiệp IT ngay từ hôm nay.
Tại sao nên học lập trình Java?
Cơ hội việc làm rộng mở:
Theo khảo sát nhanh của ITviec, tại Việt Nam, lập trình Java luôn là một trong những kĩ năng được các công ty săn đón và trả lương cao nhất. Có thể lên tới $3000 cho vị trí Senior Java Developer!
Cơ hội việc làm cho lập trình viên Java cũng hết sức phong phú với hàng trăm vị trí tuyển dụng thường xuyên, cả ở start-up lẫn các tập đoàn lớn.
Xem việc làm Java Developer chất trên ITviec
Miễn phí:
Chi phí là vấn đề quan trọng cần cân nhắc khi chọn lựa công nghệ để phát triển phần mềm. Việc Java miễn phí ngay từ đầu giúp nó được các tổ chức và lập trình viên rất ưu ái.
Bộ sưu tập thư viện mã nguồn mở phong phú:
Apache, Google và những tổ chức lớn khác đã đóng góp rất nhiều vào các thư viện mã nguồn mở, giúp Java phát triển nhanh và dễ dàng hơn, đồng thời tiết kiệm chi phí hơn. Trước khi lập trình một chức năng, bạn nên thử google trước đã. Rất có khả năng là nó đã được một ai đó viết code, test sẵn.
Và cũng nhờ bộ sưu tập thư viện mã nguồn mở đồ sộ mà Java “phủ sóng” khắp mọi nơi.
Hỗ trợ làm tài liệu với Javadoc:
Bên cạnh đó, Javadoc cũng cung cấp một API để tạo doclets và taglets, giúp người dùng phân tích cấu trúc của một ứng dụng Java.
Cộng đồng người dùng mạnh, năng động và gắn kết:
Cộng đồng người dùng hùng mạnh về cả số lượng và chất lượng là yếu tố then chốt làm nên thành công của một ngôn ngữ.
Java rất may mắn có được một cộng đồng đông đảo với vô số website, diễn đàn, tổ chức mã nguồn mở, hội nhóm, chuyên gia… luôn chia sẻ, tương trợ lẫn nhau. Ở cuối bài viết này, ITviec có giới thiệu một vài cộng đồng Java mà bạn có thể và rất nên tham gia.
Bắt đầu học Java cơ bản như thế nào?
Để bắt đầu học ngôn ngữ lập trình Java cơ bản, bạn nên có các kiến thức cơ bản về lập trình, ngôn ngữ C, và lập trình hướng đối tượng trước đã. Sau đó, bạn có thể bắt đầu tìm hiểu sâu hơn về công nghệ Java như:
Core Java
RMI và JODBC
Java Beans và JSP/Java Serverlet
Enterprise Java Beans
J2ME
Tài liệu học lập trình Java cơ bản
I. Tài liệu học lập trình Java cơ bản tiếng Việt
1. Study and Share
Study and Share có tổng cộng 58 chương. Chương trình Java Cơ Bản do Study and Share thực hiện rất cơ bản, mạch lạc, dễ hiểu. Đặc biệt phù hợp cho newbie và những ai muốn nhanh chóng nắm bắt kiến thức lập trình Java cơ bản.
2. Giáo trình Java cơ bản (ĐH Công nghệ – ĐHQG HN)
Giáo trình Java cơ bản tiếng Việt PDF này được biên soạn tương đối kĩ.
Sách cung cấp các kiến thức từ cơ bản cho đến một số kĩ thuật nâng cao về phương pháp lập trình hướng đối tượng nói chung, ngôn ngữ Java nói riêng. Nội dung chính:
Ngôn ngữ lập trình hướng đối tượng: lớp và đối tượng, đóng gói/che giấu thông tin, kế thừa và đa hình, xử lý ngoại lệ và lập trình tổng quát.
Ngôn ngữ lập trình Java: các đặc trưng cơ bản của ngôn ngữ, các thư viện cơ bản, cách tổ chức vào/ra dữ liệu.
Lưu ý:
3. Think Java (tiếng Việt) được dịch bởi “Blog của Chiến”
Là một trong những tài liệu Java tiếng Việt hiếm hoi được biên dịch kĩ lưỡng và hoàn toàn miễn phí. Sách Java này được soạn riêng cho học viên chuẩn bị thi Computer Science Advanced Placement (AP) Exam, song cũng phù hợp với bất kì ai muốn tự học Java cơ bản.
Think Java được viết dựa theo How to Think Like a Computer Scientist – một ebook nổi tiếng với rất nhiều phiên bản cho các ngôn ngữ lập trình cụ thể như Java, Python, C++, OCaml.
Ưu điểm:
Ngắn gọn, thực tế. Sách tập trung trình bày những nội dung cốt lõi của ngôn ngữ Java chứ không ôm đồm nhiều kiến thức hàn lâm.
Hướng dẫn cách phát triển và debug chương trình.
Nghiên cứu cụ thể GridWorld (vốn là một phần của đề thi AP). Bao gồm: kiến thức căn bản, bài tập thực hành GridWorld.
Về Blog của Chiến:
Blog chuyên dịch miễn phí tài liệu về khoa học tự nhiên, khoa học máy tính và các ngôn ngữ lập trình sang tiếng Việt. Tài liệu được dịch thường là trọn vẹn một phần hoặc cả cuốn sách. Dịch giả rất cẩn trọng khi chọn lựa sách để dịch, cả về nội dung lẫn vấn đề bản quyền. Chất lượng dịch thuật cũng rất tốt.
Ngoài Think Java, bạn có thể tìm đọc một số đầu sách hay đã được dịch sang tiếng Việt trên Blog của Chiến như:
II. Tài liệu học lập trình Java cơ bản tiếng Anh
4. Website chính thức của Java
Nếu muốn học lập trình Java cơ bản “chuẩn không cần chỉnh”, thì website chính thức của Java là tài liệu bạn không thể bỏ qua. Ở đây, bạn có thể tìm thấy mọi thông tin cần thiết từ A đến Z, ví dụ:
Các khóa học lập trình Java online miễn phí.
Blog cập nhật tin tức mới về Java.
Download Java (cho cả Developer và doanh nghiệp).
5. Free Java Guide
Đúng như tên gọi, tài liệu Java online miễn phí này sẽ cung cấp cho bạn hàng loạt tutorials cực kì chi tiết về ngôn ngữ lập trình Java cơ bản. Ngoài ra, bạn cũng có thể tìm thấy các câu hỏi phỏng vấn Java thường gặp.
Ưu điểm:
6. Java World
Và, đúng như tên gọi, nguồn tài liệu Java “toàn tập” này có đủ mọi thứ, từ tutorials, open source Java, cho đến cả cơ hội nghề nghiệp cho các Java developer “chất”.
7. Javaranch
Website cũng cung cấp bộ sách học Java với phần review chi tiết. Ngoài ra, bạn có thể đăng kí kiểm tra kĩ năng lập trình Java để có chứng chỉ (tính phí).
Trên hết, JavaRanch sẽ dễ dàng “đốn tim” bạn ngay từ cú nhấp chuột đầu tiên nhờ giao diện thân thiện và hết sức dễ thương!
8. Coursera
Không cần phải giới thiệu nhiều, Coursera đã quá nổi tiếng với những khóa học lập trình hoàn toàn miễn phí nhưng vô cùng chất lượng.
Theo kiến nghị từ Coursera, nếu mỗi tuần bạn bỏ ra khoảng 9 giờ để học thì bạn có thể kết thúc khóa trong vòng 4 tháng. Tất nhiên, bạn có thể chủ động thời gian để đẩy nhanh tiến trình học nếu muốn.
9. Codecademy
Chỉ với 25 giờ học xoay quanh lập trình hướng đối tượng (OOP) và những bài thực hành sát với thực tế, bạn đã có thể làm chủ những kiến thức Java cơ bản.
Hơn 2 triệu học viên đã đăng kí, bao gồm nhân viên của những tập đoàn đa quốc gia lớn như Google, Facebook, IBM…. Bạn sẽ là người tiếp theo chứ?
10. Sololearn
Vẫn là một trang web học Java hoàn toàn miễn phí với 65 bài học được chuẩn bị khá chi tiết. Mục tiêu của khóa học này là giúp bạn viết code sạch trong thời gian nhanh nhất.
Điều quan trọng là khóa học được thiết kế cho những người chưa biết gì, bạn không cần phải tìm hiểu trước mà có thể ngay lập tức bắt tay vào việc học tại nhà.
III. Cộng đồng Java Developer
11. Java Programming Community
Tại diễn đàn của các Java Developer tại Việt Nam, giúp bạn giao lưu, học hỏi từ người đi trước; cũng như chia sẻ kinh nghiệm, đóng góp cho cộng đồng.
Đây là một nguồn tài liệu Java vô cùng quý giá vì đây hoàn toàn là những chia sẻ chân thật. Với những bạn đang tìm hiểu Java cơ bản thì đây sẽ một nơi để bạn có thể đặt câu hỏi và giao lưu, làm giàu kiến thức.
12. Cộng đồng lập trình Java
Hội nhóm dành riêng cho Java Developer trên Facebook. Giống như nhiều hội nhóm mở khác, nội dung của Cộng đồng lập trình Java hơi “loãng”. Tuy nhiên, nếu chịu khó “đãi cát tìm vàng”, bạn vẫn có thể tìm được những thông tin thú vị từ đây.
Tìm Hiểu Ngôn Ngữ Lập Trình Java, Chia Sẻ Tài Liệu Học Cơ Bản.
Ngôn ngữ lập trình Java là gì?
Ngôn ngữ lập trình Java là một ví dụ đáng kể cho quá trình tiến hóa của ngôn ngữ lập trình. Java được xây dựng trên những đặc tính hữu dụng và quen thuôc của C++, trong đó Java loại bỏ những phức tạp, nguy hiểm, và các phần tử thừa không cần thiết. Kết quả Java là một ngôn ngữ an toàn hơn, đơn giản hơn và dễ sử dụng hơn. Những phần sau đây sẽ mô tả tính tương phản của Java với ngôn ngữ lập trình C++. Nhưng trước hết chúng ta cần điểm qua các mặt nổi bật khiến Java trở thành ngôn ngữ được sử dụng thuộc hàng top trong cộng đồng lập trình nói riêng và các cty phát triển ứng dụng nói chung.
Java thân thiện và đơn giản.
Nếu từng đã lập trình trên C/C++, ban sẽ nhanh chóng nhận thấy rằng java lôi cuốn hơn nhiều. Vì Java phản ánh trung thực cú pháp của C++, nên bạn có thể viết chương trình Java trong vái phút. Chưng trình đầu tiên của bạn sẽ được viết một cách nhanh chóng và dễ dàng với rất ít đầu tư về lập trình.
Ban sẽ có cảm giác là loại bỏ được rất nhiều bừa bộn trong chương trình của mình. Tất cả những tập tin header và câu lệnh khai báo trước khó hiểu của C và C++ đã không còn. Các câu lệnh #define và typedefs cũng rũ cánh bay đi. Bạn sẽ không còn phải lần qua nhiều mức tập tin header để tham khảo API. Và cũng không ai phài gắng chịu để hình dung cách sữ dụng phần mềm của bạn.
Các chương trình Java chỉ việc nhập những gói phần mềm cần dùng. Những package này có thể ở trong một thư mục khác hoặc ở trong 1 project khác, trên những ổ đĩa khác hoặc đâu đó được chia sẽ trên internet, Github chẳng hạn. Trình biên dịch và trình thông dịch Java sẽ tìm ra những đối tượng được tham chiếu đến và tạo ra các liên kết cần thiết.
Java là ngôn ngữ thuần hướng đối tượng.
Nếu bạn nghĩ rằng C++ là một ngôn ngữ lập trình hướng đối tượng, thì bạn sẽ rất ngạc nhiên. Sau khi dùng Java viết một vài chương trình, bạn sẽ cảm nhận nhiều hơn về phần mềm hướng đối tượng này.
Java để cập đến lớp và đối tượng, thật rỏ ràng và đơn giản. Chúng không chỉ có nhiều cấu trúc dữ liệu khả dụng cho người lập trình mà còn là cơ sơ cho ngôn ngữ lập trình toàn diện.
Trong C++, ban dễ dàng khai báo một class nhưng không bắt buộc. Thay vì vậy bạn có thể khai báo một cấu trúc hay một hợp nhất (union). bạn khai báo một cụm biến phối hợp lỏng lẻo và dùng chúng với các hàm kiểu C. Trong Java, lớp đối tượng là trung tâm của ngôn ngữ. Những thứ khác phát triển chung quanh chúng. Bạn không thể khai báo các hàm và thủ tục. Chúng không tồn tại. Bạn cũng không thể dùng cấu trúc, hợp nhất, hoặc định nghĩa trước (typedefs). Chúng đã bị loại bỏ. Hoặc là bạn dùng lớp và đối tượng hoặc là ban không dùng Java. Đơn giản chỉ có vậy.
Một khi đã phát triển phần mềm bằng Java, bạn có 2 cách lựa chọn:
Xây dựng trên những lớp bạn đã từng phát triển, bằng cách này bạn có thể sử dụng lại chúng.
Viết lại từ đầu phần mềm của bạn, sao chép và sửa đổi những thành phần hữu dụng của phần mềm đang tồn tại.
Cầu trúc hướng đối tượng của Java giúp bạn phát triển những phần mềm hữu dụng hơn, có tính kết nối hơn và đơn giản hơn.
Java an toàn và tin cậy hơn.
Java an toàn hơn C++ vì Java tránh cho ban những gì mà bạn xử lý dở đồng thời tạo điều kiện thuận lợi cho bạn làm tốt công việc.
Java sẽ không tự động chuyển đổi kiểu dữ liệu. Bạn phải chuyển một cách rõ ràng từ lớp này đến lớp khác. Dưới những điều kiện không mong muốn, C++ sẽ chuyển đổi tự động từ kiều này sang kiểu khác. Nó có tất cả những tính mềm dẻo của mã hợp ngữ. Java không cho rằng bạn biết những gì bạn đang làm. Kiểu dữ liệu string trong java là minh chứng rõ nét cho việc kiểm xoát chặt chẽ khai báo dữ liệu trong Java.
Con trỏ trong C++ không tồn tại trong Java. Bạn không thể truy cập các đối tượng một cách gián tiếp hay tình cờ nữa. Ban không cần phải làm như vậy. Ban khai báo những đối tượng và tham chiếu đến đối tượng đó một cách trực tiếp. Tránh sử dụng chuỗi con trỏ phức tạp. Nếu cần liệu kê tập hợp những đối tượng bạn có thể dùng array list – mảng đối tượng. Khái niệm “địa chỉ của một đối tượng” bị loại bỏ ra khỏi mô hình lập trình. Kết quả là có thể dễ dàng hơn nhiều để làm việc một cách chính xác trong Java.
Mức độ tin cậy của Java vượt qua khỏi cấp độ ngôn ngữ, đạt tới cấp độ trình biên dịch và hệ thống thực thi. Các kiểm tra lúc biên dịch kiểm tra phát hiện nhiều lỗi thảo chương không tìm thấy trong những ngôn ngữ thảo chương khác. Các kiểm tra này vượt hơn hẳn kiểu kiểm tra cú pháp để đảm bảo mệnh đề đúng về mặt ngữ nghĩa.
Kiểm tra thời gian thực thi cũng bao quát và hiệu quả hơn. Hãy nhớ lời dặn “Kiểm tra hai lần công việc để đảm bảo đúng”. Trình liên kết của Java nhận biết các kiểu lớp và thực hiện việc kiểm tra kiểu trên cấp độ biên dịch. Nó cũng kiểm tra các ràng buộc và loại bỏ truy cập đối tượng gián tiếp., thậm chí dưới điều kiện lỗi.
Java có tính an ninh được xác thực qua JVM(JAVA VIRTUAL MACHINE).
Trường hợp bạn đưa một chương trình viết bằng C hoặc C++, cho một hacker và bảo anh ta tìm những chổ thiếu an toàn, chắc chắn anh ta sẽ chi ra ngay lập tức khoảng sau chổ khiến C++ là ngôn ngữ thích hợp để tạo nên các chương trình phá hoại: truy xuất trực tiếp tới hệ điều hành, trả về những điều khiển không mong đợi, ghi đè lên những vùng nhớ không mong đợi, có khả năng đánh lừa hay sửa chữa những chương trình khác, duyệt những thông tin an toàn, và truy cập không hợp lệ đến hệ thống tập tin…
Tại sao C và C++ không an toàn hơn Java? Khi một nhà lập trình phát triển một phần mềm, anh ta luôn hướng tới mục tiêu làm sao để phần mềm hoạt động chính xác và hiệu quả. C và C++ không không chế người lập trình đạt đến mục tiêu đó, nó chỉ cung cấp một số đặc tính linh hoạt cho phép người lập trình đạt đến mục đích đó. Những kẻ phá hoại đã thừa nước đục thả câu, tận dụng các đặt tính đó ngược lại, đó chính là nguyên nhân gây ra những rắc rối như đã đề cập trên. C và C++ có tính công phá hơn nhưng lại không được bảo vệ, còn Java đã được biên dịch, chẳng hạn một chương trình con (applet_, nó có thể rủi ro khi thi hành đoạn mã loại Trojan horse. Do đó mối đe dọa như vậy, nên nó phải đưa ra đoạn mã để kiểm tra hầu đảm bảo cho tính đúng đắn và an toàn.
Hệ thống thực thi của Java(JVM) được thiết kế để đảm bảo cho chính sách an toàn, ngăn ngừa thực thi những đoạn mã có hại. Hệ thống làm được điều này bằng cách ghi nhớ cách thức đối tượng được lưu trong bộ nhớ và chú ý đến việc truy cập chính xác và an toàn những đối tượng theo các quy định về an toàn. Hệ thống thực hiện việc kiểm tra các mã bytes bằng cách chuyển những lớp đã được biên dịch qua một bộ minh chứng đơn giản để kiểm chứng đoạn mã đó là an toàn hoặc ngăn không cho đoạn mã được thi hành. Lớp là đơn vị thực thi cơ bản của Java và độ an toàn được thực hiện ở mức lớp.
Hệ thống thực thi của Java Virtual Machine cũng cô lập phần mềm theo nguồn gốc của nó. Những lớp ở hệ thống cục bộ được xử lý riêng biệt tách khỏi những lớp của hệ thống khác. Điều nay ngăn ngừa hệ thống ở xa thay thế phần mềm của hệ thống cục bộ với mã ít tin cậy hơn.
Những trình duyệt sử dụng JAVA cho phép người dùng kiểm soát được các truy cập mà phần mềm Java thực hiện ở hệ thống cục bộ. Khi một chương trình con của Java cần quyền truy cập đến một nguồn tài nguyên cục bộ của hệ thống, chẳng hạn những tập tin, thì một hôp thoại an toàn hiển thị đến người dùng, yêu cầu quyền truy cập cảu người dùng. Giài pháp này bảo đảm cho người dùng luôn luôn có được tiếng nói cuối cùng trong hệ thống an toàn của họ.
Java hỗ trợ lập trình đa luồn (multithread) mạnh mẽ
Java giống như Ada và không giống các ngôn ngữ khác. Java hỗ trợ ngôn ngữ sẵn có cho lập trình đa luồng. Đa luồng ( multithread) cho phép nhiều hơn một luồng (thread) thực thi trong một chường trình đơn. Điều này cho phép chương trình của bạn cùng lúc làm được nhiều việc: vừa nghe nhạc, vừa viết tài liệu và vừa quét virut. Lập trình đa luồng là một đặc tính quan trọng vì nó cho phép người dùng nó viết chương trình như những luồng độc lập hơn là hoạt động chồng chéo lên nhau. Đặc tính đa luồng còn cho phép Java dùng thời gian rãnh của CPU để thực thi các công việc như thu gom rác (Garbage Collection) và duy trì hệ thống chung, cho phép những chức năng này được thực hiện với ành hường thấp nhất của chương trình.
Viết những chương trình đa luồng cũng giống như cùng lúc hẹn với nhiều người. Mọi công việc đều tốt đẹp cho đến khi những luồng này bắt đầu tường tác với nhau không như mong đợi, Java có những đặc tính hỗ trợ cần thiết để làm cho đặc tính đa luồng làm việc an toàn và chính xác. Java hỗ trợ đa luồng làm việc an toàn và chính xác. Java hỗ trợ đa luồng bằng cách cung cấp những khả năng đồng bộ hóa để đảm bảo rằng những luồng chia sẽ thông tin và thời gian thực thi trong một phạm vi an toàn.
Bạn đang đọc nội dung bài viết Jsp] Lập Trình Java Servlet Cơ Bản P5: Forward (Chuyển Tiếp) Và Redirect (Chuyển Hướng) Servlet trên website Cuocthitainang2010.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!