Chủ Nhật, 13 tháng 9, 2015

MVC

Tìm hiểu định tuyến url trong ASP.NET MVC

ASP.NET MVC Framework có một bộ máy ánh xạ URL thật sự mạnh mẽ. Bộ máy này cung cấp phương pháp rất linh hoạt trong việc ánh xạ URLs sang cho Controller. Bạn có thể dễ dàng định ra các quy luật ánh xạ, cài đặt để ASP.NET MVC dựa vào các quy luật ánh xạ đó, xác định xem phải thực thi Controller nào. ASP.NET MVC còn có khả năng phân tích URL, chuyển các thông số trong URL thành các tham số trong phần gọi hàm của Controller.
Đường đi mặc định từ ASP.NET MVC URL đến Controller Classes
Browser (trình duyệt) yêu cầu một địa chỉ từ Controller Acction trong ASP.NET MVC Framework được gọi là định tuyến URL (URL routing). URL routing sẽ chỉ định yêu cầu (request) tới Controller Action. URL routing sử dụng một bảng định tuyến để điều khiển các yêu cầu (request). Bảng định tuyến được tạo khi ứng dụng được chạy lần đầu tiên. Bảng định tuyến được thiết lập trong file Global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace TestProject

{

 public class Mvc Application : System.Web.HttpApplication
 {

  public static void RegisterRoutes(RouteCollection routes)
  {
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
   routes.MapRoute(
   "Default", // Route name
   "{controller}/{action}/{id}", // URL with parameters
   new { controller = "Home", action = "Index", id = UrlParameter.Optional
   } // Parameter defaults
   ); 

  }

  protected void Application_Start()
  {
   AreaRegistration.RegisterAllAreas();
   RegisterRoutes(RouteTable.Routes);
  }

 }

}
Khi ứng dụng chạy lần đầu tiên, phương thức Application_Start() được gọi. Phương thức này gọi một phương thức khác RegisterRouter(RouteTable.Router) để tạo bảng định tuyến.
Định tuyến mặc định chia một yêu cầu (request) thành 3 đoạn, mỗi phân đoạn nằm giữa 2 dấu “/”. Phân đoạn đầu tiên chứa một Controller, phân đoạn thứ 2 chứa Controller Action, phân đoạn thứ 3 là tham số đầu vào của Controller Action.
Ví dụ: với địa chỉ /user/edit/1 được hiểu là:
Controller = user

Action = edit

Id = 1
Controller mặc định sẽ là HomeController, action mặc định là Index, Id mặc định là
    new { controller = "Home", action = "Index", id = UrlParameter.Optional
Ánh xạ các URL vào trong class Controller
Hầu hết các Web Framework, như ASP, PHP, JSP, ASP.NET WebForms … đều ánh xạ các URL vào một file được lưu trên đĩa. Lấy ví dụ URL “/news.aspx” hay “/news.php” được chuyển đến file news.aspx hay news.php trên đĩa cứng để xử lý. Khi một ứng dụng web nhận được HTTP Request đến Web Server, thì Web Frame wor k sẽ chạy một đoạn code cụ thể tương ứng với nội dung của file, và đoạn code này đóng vai trò xử lý yêu cầu do phía client gửi đến. Thông thường thì đoạn code này sẽ sinh ra HTML và đáp ứng lại phía client.
MVC Framework lại hoạt động theo một cách hoàn toàn khác, thay vì ánh xạ các URL vào các file lưu trên đĩa, nó sẽ đưa thẳng vào các lớp (class). Những lớp (class) được ánh xạ tới được gọi là “Controllers”, và chúng sẽ xử lý yêu cầu (request) được yêu cầu đến, kiểm soát dòng nhập xuất và giao diện đối với người dùng, thực thi các ứng dụng và data logic tương ứng với yêu cầu (request). Cuối cùng, chúng sử dụng các thành phần Views để tạo HTML và đáp trả lại yêu cầu(request).
router url in mvc
Hệ thống định tuyến trong ASP.NET MVC để làm gì ?
ASP.NET MVC Framwork có một hệ thống định tuyến URL (URL Routing System) linh hoạt cho phép xác định các quy tắc ánh xạ địa chỉ URL bên trong ứng dụng. Một hệ thống định tuyến có 2 mục đích:

• Xây dựng một tập hợp các URL đi vào ứng dụng và định tuyế n chúng tới các Controller và thực thi các phương thức Action để xử lý.

• Xây dựng các URL gởi đi mà có thể gọi ngược trở lại Controller/Action
Sử dụng các quy tắc ánh xạ URL để điều khiển URL đi vào và đi ra để tăng tính mềm dẻo cho việc lập trình ứng dụng, nghĩa là nếu muốn thay đổi cấu trúc URL ( ví dụ /Giao_trinh bằng /Lop) có thể thay đổi một tập hợp quy tắc ánh xạ mức ứng dụng mà không cần phải viết lại mã lập trình bên trong Controllers và View.
Các quy tắc định tuyến các URL mặc định trong ASP.NET MVC
Mặc định khi tạo ứng dụng với ASP.NET MVC Web Application trong Visual Studio sẽ tạo ra một ASP.NET MVC Application Class gọi là Global.asax chứa cấu hình các quy tắc định tuyến URL. Xây dựng các định tuyến thông qua phương thức RegisterRoutes(ReouteCollection router) và khi ứng dụng bắt đầu, ứng dụng Application_Start() trong Global.asax sẽ gọi RegisterRouter để tạo bảng định tuyến.
mvc router
Nguyên tắc ánh xạ đầu tiên trong hình trên chỉ ra cho ASP.NET MVC Framework một quy luật ánh xạ URL theo dạng /[controller]/[action]/[id] – tương ứng với tên controller được ánh xạ đến / tên action method được triệu gọi / và tham số để truyền vào action method đó.
Với ASP.NET MVC Web Application thì mặc định controllers là HomeController, mặc định ControllerAction là Index và Id là rỗng
Khi ứng dụng ASP.NET MVC Web Application nhận được một URL, MVC FrameWork sẽ định giá các quy tắc định tuyến trong tập hợp RouteTable.Routes để quyết định Controller nào sẽ điều khiển request.
MVC Framework sẽ chọn controller bằng cách định giá các quy tắc trong bảng định tuyến theo trật tự sẵn có.
Route Instances
Quy tắc ánh xạ được đăng ký bằng cách khai báo thêm một Route instances vào System.Web.Mvc.Route Table’s Route colletion.
Class Route này có một số thuộc tính mà bạn có thể sử dụng để cấu hình (configure) quy tắc ánh xạ của bạn. Bạn có thể “set” những thuộc tính đó theo cách truyền thống của .NetFramework 2.0
mvc router 2
Hoặc bạn có thể tận dụng tính năng object initializer của .NetFramework 3.5 trở lên
mvc router 3
Như hình trên ta có thể thấy các thuộc tính trong lớp Route cụ thể như sau:
Thuộc tính Url trong lớp Route dùng để khai báo một Pattern URL – một quy tắc ánh xạ URL để khi một URL được yêu cầu đến web của chúng ta, MVC Framework sẽ tự động ánh xạ URL đó đến Pattern này và phân tích các thành phần trong URL đó để biết đâu là Controller, đâu là Action Method và đâu là tham số đầu vào cho Action Method đó. Bạn không bị giới hạn bởi một tham số duy nhất mà chúng ta có thể có một bất kỳ số lượng tham số nào mà bạn muốn có trong URL.
Ví dụ bạn có thể sử dụng quy tắc ánh xạ “/Blogs/[Username]/Archie /[Year]/[Month]/[Day]/[Title]” để mã hóa một URL yêu cầu đến và MVC Framework sẽ tự động phân tích và truyền những tham số như là Username, Year, Month, Day và Title đến Action Method trong Controller của chúng ta.
Thuộc tính Default trong class Route dùng để khai báo một tập giá trị mặc định được sử dụng để xử lý các URL được yêu cầu đến không có các giá trị tham số như đã định ở thuộc tính Url. Ví dụ quy tắc ánh xạ URL bên trên chúng ta khai báo 2 tham số mặc định trong Url là Action và Id. Điều này có nghĩa là nếu một URL: “/Quanly/” được yêu cầu đến thì hệ thống ánh xạ sẽ mặc định sử dụng “Index” như là một tên Action Method trong QuanlyController, cụ thể là ActionMethod Index() trong QuanlyController sẽ được thực thi xử lý khi người dùng yêu cầu Url “/Quanly/”. Tương tự, nếu như Url “/Quanly/Danhsachgt” được yêu cầu thì một giá trị tham số null sẽ được sử dụng cho Action Method Danhsachgt().
Thuộc tính RouteHandler trong class Route khai báo một IRouteHandler cụ thể được sử dụng để xử lý yêu cầu sau khi URL được mã hóa và xác định được quy tắc ánh xạ thích hợp. Trong ví dụ trên chúng ta chỉ cho MVC Framework rằng chúng ta muốn sử dụng class System.Web.Mvc.MvcRounte Handler để xử lý các URL mà chúng ta đã cấu hình. Lý do cho việc này là chúng ta muốn chắc rằng hệ thống ánh xạ URL được sử dụng cho cả hai trường hợp được người dùng yêu cầu là MVC và non-MVC (WebForms).
Ngoài ra còn một thuộc tính nữa trong class Route mà chúng ta sẽ tìm hiểu sau trong bài viết này. Nó cho phép chúng ta xác định trước những điều kiện cần thiết để áp dụng cho một quy tắc ánh xạ cụ thể. Ví dụ chúng ta có thể chỉ muốn quy tắc ánh xạ chỉ áp dụng cho HTTP cụ thể, hoặc chúng ta có thể dùng Regular Expression như những tham số để lọc những quy tắc ánh xạ phù hợp …
Route Rules Evaluation

Thứ Sáu, 21 tháng 8, 2015

Entity


6. https://thientampt.wordpress.com/2014/10/26/phan-biet-html-partial-html-renderpartial-html-action-va-html-renderaction/

Phân Biệt Html.Partial(), Html.RenderPartial(), Html.Action(), và Html.RenderAction()

Nói chung, Html.Partial() và Html.RenderPartial() dùng để chèn sub view có nội dung tĩnh hoặc nội dung được render với dữ liệu lấy từ parent view. Ngược lại, Html.Action() và Html.RenderAction() dùng để chèn sub view được render với dữ liệu sinh ra từ kết quả thực thi action method trên controller.
Sự khác biệt duy nhất giữa Html.Partial() và Html.RenderPartial() là Html.Partial() trả về một chuỗi được encoded (MvcHtmlString class) trong khi Html.RenderPartial() render và write trực tiếp sub view vào trong output stream. Điều này cũng đúng cho Html.Action() và Html.RenderAction(). Vì Html.Partial() và Html.Action() trả về một chuỗi nên chúng có thể được viết trực tiếp trong Razor như sau
@Html.Partial(“ViewName”)
@Html.Action(“ActionName”, “ControllerName”)
Trong khi đó, Html.RenderPartial() và Html.RenderAction() trả về void nên phải được gọi như là một method trong Razor và do đó phải được đặt trong cặp dấu {} như sau
@{ Html.RenderPartial(“ViewName”); }
@{ Html.RenderAction(“ActionName”, “ControllerName”); }
Khi truyền view name cho Html.Partial() và Html.RenderPartial() thì asp.net mvc sẽ tìm kiếm sub view ở “~/Views/ControllerName/ViewName.cshtml” trong đó “ControllerName” là tên controller mà gọi parent view hoặc ở “~/Views/Shared/ViewName.cshtml”.
Khi sub view cần render không nằm trong những location nêu trên thì phải truyền virtual path cho Html.Partial() và Html.RenderPartial() như ví dụ sau
@Html.Partial(“~/Views/Account/SubViews/AccountPartial.cshtml”)
@{ Html.RenderPartial(“~/Views/Shared/Account/AccountPartial.cshtml”); }


1. Add
DanhMuc dm= new DanhMuc();
dm.TenDanhMuc = tendanhmuc;
dc.DanhMuc.InsertOnSubmit(dm);
dc.SubmitChange();

1. Where
 //
        // GET: /Lop/Details/5

        public ActionResult Details(int id = 0)
        {
            Lop lop = db.Lops.Find(id);
            if (lop == null)
            {
                return HttpNotFound();
            }
            return View(lop);
        }
....................................

 using(var db =new ERMMATBAOGROUPDataContext())
            {
                Employee emp = db.Employees.Where(c=>c.IDMonAn.Equals(ID)).FirstOrDefault();
                //db.Employees.Single(dm => dm.madanhmuc == madanhmuc);
                if(emp != null)
                {
                    rs = true;
                }
            }

1b. MonAn ma = new MonAn();
      ma = de.MonAns.Single(c => c.IDMonAn.Equals(ID));

2. And &&
        protected void LoadUser()
        {
            string user = CTX.RequestQueryString("User", string.Empty);

            Employee empl = new Employee();

            using (var db =new ERMMATBAOGROUPDataContext())
            {
                empl = db.Employees.Where(c => c.e_username.Equals(user) && c.e_disable.Equals(false)).FirstOrDefault();

                tbNgaySinh1.Text = date;
                tbDateCMND.Text = string.Format("{0:dd/MM/yyyy}",empl.e_date_CMND);

                bool gender = empl.e_gender;

                if (gender)
                    {
                    rlGender.SelectedValue = "1";
                }
                else
                {
                    rlGender.SelectedValue = "0";
                }
        }

3. Load combox list
        protected void LoadRole()
        {
            string user = CTX.RequestQueryString("User", string.Empty);
            cblRoles.Items.Clear();
            List<aspnet_Role> listRoles = new List<aspnet_Role>();
            using (var db =new ERMMATBAOGROUPDataContext())
            {
                listRoles = db.aspnet_Roles.Where(c => true).ToList();
            }

            foreach (var role in listRoles)
            {
                cblRoles.Items.Add(new ListItem(role.RoleName,role.RoleId.ToString()));
            }

            List<aspnet_UsersInRole> listUsersInRole = GetRolesByUser(user);
        }

3b.
        protected void LoadDept()
        {
            DDLOffice.Items.Clear();
            List<MBG_Dept> a_roles = new List<MBG_Dept>();

            using (var db = new ERMMATBAOGROUPDataContext())
            {
                a_roles = db.MBG_Depts.Where(c => true).ToList();
            }

            DDLOffice.DataSource = a_roles;
            DDLOffice.DataTextField = "DeptName";
            DDLOffice.DataValueField = "Deptid";
            DDLOffice.DataBind();
        }


4. Delete
aspnet_UsersInRole itemdelete = db.aspnet_UsersInRoles.Where(c => c.RoleId.ToString().Equals(sitem.RoleId.ToString()) && c.UserId.ToString().Equals(sitem.UserId.ToString())).FirstOrDefault();

                            if (itemdelete != null)

                            {

                                db.aspnet_UsersInRoles.DeleteOnSubmit(itemdelete);

                                db.SubmitChanges();

                            }

Thứ Tư, 25 tháng 3, 2015

Java

27. Lấy danh sách Job
        List<String> listRegistrant = new ArrayList<String>();
        for(Map<String, Object> obj : t_ConferenceDao.getRegistrant("")){
            listRegistrant.add(String.valueOf(obj.get("input_user_name")));
        }
        mainForm.setlistRegistrant(listRegistrant);
 
26. Xuất ra Output display system.out.println("asf");
 
25. Form - Controller - EditService - Dao - Hit - SQL
NutritionCareControll
EditService
DAO
24. = = =
=== vua kiem tra value vua kiem tra type object
[8:26:05 AM] Ta Thai Binh: == chi kiem tra value
[8:26:13 AM] Ta Thai Binh: equal: kiem tra object
[8:26:33 AM] Vinh mùa xuân (spring, not autumn): hơ hơ... độc quá.. cám ơn a
[8:26:39 AM] Ta Thai Binh: no tuong dung equal trong java

23. on change
$('.formEnabled').on('change', function(event) {

            // 編集したアイテムのname属性の値を取得
            var editItemName = event.target.name;

            // 編集したレコード内、name属性editedの値を更新する
            var editItemFlag = editItemName.replace(/\..*/g, '.edited');
            if (editItemFlag === editItemName) {
                editItemFlag = editItemFlag + '.edited';
            }
22.   <!-- 機能固有ボタン -->
  <table class="table_layout w140 hx250">
   <tr id="funcBtnIndividualRow">
    <td class="t-top">
     <!-- ボタン種別が"2":機能固有 の場合表示 -->
     <c:forEach items="${mainForm.funcBtnList}" var="list" varStatus="status">
      <c:if test="${list.btn_type == '2'}">
       <input type="submit" id="${list.btn_cd}" name="${list.btn_cd}" class="btnFunc btnFuncIndividual ${list.css_class}" value="${list.btn_name}"/>
      </c:if>
     </c:forEach>
    </td>
   </tr>
  </table>
21. 
        for (var i = 0; i < $orgBtns.length; i++) {
            var $orgBtn = $orgBtns.eq(i);

            var btnId = $($orgBtn).val();
            var customCss = $($orgBtn).data('css-class');

20. Tùy hứng argment
// 対象のボタンタグを取得
            var target = $('#funcBtnCommon').find('#' + targetBtn);

19. Gán tham chiếu và lấy giá trị mảng

    function setCustomerInspSelectEvent(){

        $("#dispItemMultiSelectInspection").unbind('change');
        $("#dispItemMultiSelectInspection").change(function() {

        // リクエストパラメータを定義        -    Define the request parameters
        var postData = {};
        //var postParam = {};
         // イベントID
        postData = 'func=refreshInspTable';

         // 入力項目のリスト
        var $inputItemList = $('.patientCommon').find('input');
        // inputタグの入力値を設定
        for (var i=0; i < $inputItemList.length; i++) {
            var $inputItem = $inputItemList.eq(i);

            // ラジオボタンの場合、スキップ
            if ($inputItem.attr('type') == 'radio') {
                continue;
            }

18. 
<form:form id="inspTable" modelAttribute="mainForm">
<table class="table_100per_layout">
    <tbody>
    <c:forEach items="${mainForm.dataList}" var="item" varStatus="status">
   <tr class="inspectionList">
       <form:hidden path="dataList[${status.index}].inspection_set_id"/>
       <form:hidden path="dataList[${status.index}].inspection_id"/>
       <form:hidden path="dataList[${status.index}].disp_seq"/>
       <form:hidden path="dataList[${status.index}].inspection_cd"/>
       <form:hidden path="dataList[${status.index}].inspection_name"/>
       <form:hidden path="dataList[${status.index}].inspection_sname"/>
       <form:hidden path="dataList[${status.index}].inspection_unit"/>
       <form:hidden path="dataList[${status.index}].inspection_ll"/>
       <form:hidden path="dataList[${status.index}].inspection_ul"/>
       <form:hidden path="dataList[${status.index}].inspection_normal_range"/>
       <form:hidden class="down_value" path="dataList[${status.index}].calc_inspection_ll"/>
       <form:hidden class="up_value" path="dataList[${status.index}].calc_inspection_ul"/>

    <td class="w170">
      <label><c:out value="${item.inspection_name}"/></label>
    </td>

17.     function setInspectionTextboxEvent() {

        $(".inspection_value").unbind('change');
        $(".inspection_value").change(function() {
            var up_value = $(this).closest('tr').find('.up_value').val();
            up_value = parseFloat(up_value);
            var down_value = $(this).closest('tr').find('.down_value').val();
            down_value = parseFloat(down_value);
            if ($(this).val() != '') {
                var thisValue = parseFloat($(this).val());
                if (thisValue >= down_value && thisValue <= up_value) {
                    $(this).closest('tr').find('.colorChange').attr("class","w30 colorChange");
                }
                else {
                    $(this).closest('tr').find('.colorChange').attr("class","w30 colorChange changeColerpink");
                }
            }
        });
16. Vị trí các file trong dự án Kondateman


15.  Hàm gọi hàm function call function
function setCustomerInspSelectEvent(){

        $("#dispItemMultiSelectInspection").unbind('change');
        $("#dispItemMultiSelectInspection").change(function() {

        // リクエストパラメータを定義
        var postData = {};
        //var postParam = {};

14. Link hay
https://drive.google.com/open?id=0By2E2VW6zaaYNHpUdVktNFk1Yjg&authuser=0
http://docs.spring.io/spring/docs/2.5.x/reference/spring-form.tld.html


13. Khai báo mảng…












List<String> addressInputDateTimeList = new ArrayList<String>();






Date date = DateTimeToString.toDate(dateTime, "format của chuỗi dateTime")




String date = DateTimeToString.convert(dateTime, "format mong muốn");

















12.  <select class="w185 searchPersonByCd searchPersonByNameKana openSearchPersonDlg" data-dlg-param="site_cd">

        <c:forEach items="${siteList}"








         var="item" varStatus="status">








          <c:if test="${item.site_cd == mainForm.site_cd}">






            <option value="<c:out value="${item.site_cd}"/>" selected><c:out value="${item.site_name}"/></option>

          </c:if>










          <c:if test="${item.site_cd != mainForm.site_cd}">






            <option value="<c:out value="${item.site_cd}"/>"><c:out value="${item.site_name}"/></option>


          </c:if>










        </c:forEach>










       </select>























13 obj3.parent().parent().find('.colorChange').removeClass("changeColorWhite").addClass("changeColerpink");














14 <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery/ui/jquery.ui.combobox.js"></script>

10. Include
<% @ include file="/common/header.jsp" %>
9. Ví dụ tiếp theo
sau khi biến được truyền từ A.jsp, tại B.jsp ta code:
<%= request.getParameter("name") %>
thay bằng ${param.name}
hoặc thay bằng thay bằng ${param[name]}




8. Express Language
sample.jsp
1. Đọc giá từ file XML, biến servlet
 <body>
This is a sample.</br>
This is Blog <%= config.getInitParameter("blog") %>
<% out.println("Vietnam"); %>

2. Đọc giá trị global
Image name:
<%= ((Image) request.getAttribute("imageName")).getName() %>
<% pageContext.setAttribute("scope", "Page Context"); %>
page of the: <%= pageContext.getAttribute("scope") %>
Đây nè trym: ${pageScope.scope }
Nè nữa trym: ${requestScope.student.name}

<%=pageContext.findAttribute ("otherScope") %>

Đọc biến toàn cục trong web.xml:  <%= application.getInitParameter("account") %> hoặc
${initParam.account}

Đây nữa nè trym: ${ 4 + 5 }
 .
XML file
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <servlet>
    <servlet-name>Hello World</servlet-name>
    <servlet-class>hung.servlet.HelloWorld</servlet-class>
    <init-param>
       <param-name>myParam</param-name>
       <param-value>hungbktt@gmail.com</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>Hello World</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app> 

20. Link, tài liệu về Java
http://docs.spring.io/spring/docs/2.5.x/reference/spring-form.tld.html
19. Key board - Phím tắt
Ctrl+0 --> xem  file
[4/21/2015 8:12:36 AM] modani: Ctrl+Shift+R --> tim class
[4/21/2015 8:12:50 AM] modani: Ctrl+Shift +T --> tim file jar
[4/21/2015 8:13:03 AM] modani: Ctrl+H --> tim tu trong project
[4/21/2015 8:13:28 AM] modani: Ctrl + F --> tim tu trong file
7. Getter setter





6. Cookie

Cookie cookie  new Cookie("location", "Vietnam");
response.addCookie(cookie);

for (Cookie c: request.getCookies()){
        System.out.println(c.getName());
        System.out.println(c.getValue());

}

.

5. session
Clear session
session.invalidate();

Đặt hạn thời gian session
<session-config>
         <session-timeout>15</session-timeout>
 </session-config>

session.setMaxInactiveInterval(900);

HttpSession session = request.getSession();
session.setAttribute("username", username);

 Lấy nè:
HttpSession session = request.getSession();
String  username = (String) session.getAttribute("username");


4. Application  Initialization Parameter
Trong file Web.xml

 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <context-param>
  <param-name>account</param-name>
  <param-value>ducky</param-value>
  </context-param>

 
  <servlet>
      <servlet-name>Hello World</servlet-name>
      <servlet-class>ducky.servlet-</servlet-class>
     
      <init-param>
          <param-name>song</param-name>
          <param-value>I am yours</param-value>   
    </init-param>

  </servlet>
</web-app>

ServletContext context = this.getServletContext();
String account = context.getInitParameter("song");


3.Servlet Initialization Parameter

ServletConfig config = this.getServletConfig(); 
//Hoặc this.getServletConfig().getServletContext();

String song = config.getInitParameter("song"); 

PrintWriter writer = response.getWriter();
writer.println("Username or Password is incorrect...!!!");

2. 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String username = request.getParameter("username");
        String password = request.getParameter("password");
       
        PrintWriter writer = response.getWriter();
        DatabaseManagement dm = new DatabaseManagement();
       
        if(dm.checkUser(username, password)){
            writer.println("Welcome " + username + " o VN");
        }
        else{
            writer.println("Username or Password is incorrect...!!!");
        }
    }

import java.util.Scanner;

public class Main {
          public static void main (String[] args) {
                     System.out.print("Hello World\n);
                     System.out.printIn("Age: 23");
                     System.out.printf("Ten %s \t Tuoi: %d, "Do Manh", 23);
                     System.out.format("Ten %s \t Tuoi: %d\n, "Do Manh", 23);
           }
}

B. Sử dụng Eclipse:
1. Trích 1 hàm ra riêng function method:
Refactor/Extract Local Variable...