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專案裡面資原始檔的讀取 部落格,我分開寫了,要不然篇幅太長。