1. 程式人生 > 實用技巧 >Python與Go中“類的歸一化設計”實現與對比

Python與Go中“類的歸一化設計”實現與對比

1、ServletContext(應用程式)

得到ServletContext的兩種方式:

/**
 * Servlet implementation class servletDemo
 */
@WebServlet("/servletDemo")
public class servletDemo extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public servletDemo() {
        
super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub
//得到servletcontext的第一種方式 ServletContext context = this.getServletConfig().getServletContext(); //第二種方式 context = this.getServletContext(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }

2、ServletContext域(這是一個容器,說明了應用程式範圍)

就比如一個人往一個應用程式裡面放東西,如果這個應用程式沒有退出,那麼其他人也可以訪問這個東西,示例如下:

ServletContextDemo1.java

 1 package test;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  * Servlet implementation class ServletContextDemo1
12  */
13 @WebServlet("/ServletContextDemo1")  //注意有了這個就不需要往web.xml檔案裡面新增路徑對映
14 public class ServletContextDemo1 extends HttpServlet {
15     private static final long serialVersionUID = 1L;
16 
17     /**
18      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
19      */
20     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
21         // TODO Auto-generated method stub
22         this.getServletContext().setAttribute("name", "bbb");
23     }
24 
25     /**
26      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
27      */
28     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
29         // TODO Auto-generated method stub
30         doGet(request, response);
31     }
32 
33 }
View Code

ServletContextDemo2.java

 1 package test;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  * Servlet implementation class ServletContextDemo2
12  */
13 @WebServlet("/ServletContextDemo2")    //注意有了這個就不需要往web.xml檔案裡面新增路徑對映
14 public class ServletContextDemo2 extends HttpServlet {
15     private static final long serialVersionUID = 1L;
16 
17     /**
18      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
19      */
20     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
21         // TODO Auto-generated method stub
22         String name = (String) this.getServletContext().getAttribute("name");
23         System.out.println(name);
24     }
25 
26     /**
27      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
28      */
29     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
30         // TODO Auto-generated method stub
31         doGet(request, response);
32     }
33 
34 }
View Code

先訪問ServletContextDemo1後訪問ServletContextDemo2控制檯就會輸出bbb。

中間報了一個錯:[X]和 [Y] 的servlet不能對映為一個url模式(url-pattern)

這是因為使用“建立Servlet”嚮導建立了一個Servlet,url-pattern,然後添加了一個 @WebServlet 註釋,它們可以代替到web.xml中的任何內容,但是你又在web.xml檔案裡面加了檔案對映路徑。

你應該使用一個或另一個,而不是兩者。從 web.xml 中刪除​​對映,然後繼續使用 @WebServlet 註釋。

2、通過getInitParameter獲得給所有應用程式配置的引數

在web.xml檔案裡面通過context-param標籤就可以給所有應用程式(也就是所有專案)新增引數。

<context-param>
      <param-name>data</param-name>
      <param-value>xxxx</param-value>
  </context-param>
  <context-param>
      <param-name>data1</param-name>
      <param-value>xxxxxxx</param-value>
  </context-param>

Java檔案:

package test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletContextDemo2
 */
@WebServlet("/ServletContextDemo2")    //注意有了這個就不需要往web.xml檔案裡面新增路徑對映
public class ServletContextDemo2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name = this.getServletContext().getInitParameter("data1");
        System.out.println(name);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

3、轉發

由於在Java檔案裡面寫html程式碼太麻煩,例如要向瀏覽器寫入<div color='red'></div>,那麼我們還需要轉成二進位制流,之後再輸出

write("<div color='red'></div>".getbytes()),太麻煩了,所以我們轉發給jsp處理。

注意:不可以通過上面講的ServletContext域設定引數的方式把所需資料帶給jsp處理,因為應用程式只有一個servlet,其他使用者使用servlet的時候可能會修改上一個使用者還沒來得及郵遞給JSP的資料。

4、資原始檔的訪問

資原始檔一般有兩種,一種是properties檔案,主要存放沒有關係的資料。另一種是xml檔案,用來存放有關係的資料

這一點看一下:在eclipse完成對Java_web專案裡面資原始檔的讀取 部落格,我分開寫了,要不然篇幅太長。