servlet一般筆記

WCATALINA_HOME指的是tomcat的安裝目錄,如C:/Tomcat6.0
bin目錄:控制tomcat的啓動與關閉,以及與啓動關閉有關的安全管理
conf目錄:配置文件
lib目錄:Tomcat容器使用的所有jar包和多個web應用程序共享的jar包
log目錄:Tomcat生成的日誌文件。日誌文件是按天爲單位生成
temp目錄:Tomcat用來存放臨時文件
webapps目錄: Tomcat默認的web應用程序存放位置
work目錄: Tomcat將jsp文件轉換爲java servlet的地方
...................................................................

執行效率高
支持多線程
功能強大
直接和服務器交互,在多個程序間共享數據
可移植性非常好
純JAVA開發,跨平臺運行
技術成熟

....................................................................

 //forward
this.getServletConfig().getServletContext()
.getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp")
.forward(req, resp);
這樣轉向不會丟失post信息。
...........................................................
定義

       public interface ServletConfig

       這個接口定義了一個對象,通過這個對象,
Servlet引擎配置一個Servlet並且允許Servlet獲得
一個有關它的ServletContext接口的說明。
每一個ServletConfig對象對應着一個唯一的Servlet。
............................................................
 public interface ServletContext

定義了一個Servlet的環境對象,通過這個對象,
Servlet引擎向Servlet提供環境信息。

一個Servlet的環境對象必須至少與它所駐留的主機是一一對應的。
在一個處理多個虛擬主機的Servlet引擎中
(例如,使用了HTTP1.1的主機 頭域),
每一個虛擬主機必須被視爲一個單獨的環境。
此外,Servlet引擎還可以創建對應於一組Servlet的環境對象。
..............................................................

定義

       public interface ServletRequest

       定義一個Servlet引擎產生的對象,通過這個對象,
Servlet可以獲得客戶端請求的數據。
這個對象通過讀取請求體的數據提供包括參數的名稱、
值和屬性以及輸入流的所有數據。
................................................................
定義

       public interface ServletResponse

       定義一個Servlet引擎產生的對象,通過這個對象,
Servlet對客戶端的請求作出響應。這個響應應該是一個MIME實體,
可能是一個HTML頁、圖象數據或其他MIME的格式。
...................................................................

 


...................................................................
sendredirect
resp.sendRedirect(req.getContextPath() + "/servlet_jsp/ServletUseJsp.jsp");
這樣轉向會丟失信息。
其中:req.getContextPath()是獲得"/工程名",就是工程根目錄。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
servlet聲明週期
? 只有一個對象
? 第一次請求的時候被初始化,只一遍
? 初始化後先調用init方法,只一遍
? 每個請求,調用一遍service?service?doGet/doPost。
        以多線程的方式運行
? 不要在servlet中設計成員變量。
? 卸載前調用destroy方法
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

6.亂碼
場合:頁面本身有中文的時候
解決辦法:servlet:resp.setContentType("text/html;charset=gbk");
Jsp: <%@ page contentType="text/html;charset=gb2312"%>
注意:一定要寫在PrintWriter out = resp.getWriter();之前
場合:解決get方式亂碼問題:
解決辦法:修改server.xml ?URIEncoding="GBK"
場合:解決post方式提交內容的亂碼
解決辦法:request.setCharacterEncoding("GBK");
注意:一定要寫在存取第一個參數之前 
不要調用response.setCharacterEncoding("GBK");
場合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文參數
解決辦法:<%request.setCharacterEncoding("GBK");%>
注意:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

ServletRequest中的方法:
public java.util.Map getParameterMap()
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Map<String, String[]> paramMap = request.getParameterMap();
Set<Map.Entry<String, String[]>> entries = paramMap.entrySet();
 for(Iterator<Map.Entry<String, String[]>> it = entries.iterator(); it.hasNext(); ) {
   
   Map.Entry<String, String[]> entry = it.next();
   
   String paramName = entry.getKey();
   
   out.print("<TR><TD>" + paramName + "/n<TD>");
   
   String[] paramValues = entry.getValue();
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

在servlet中定義:

HttpSession session = request.getSession(true);

.....................................................................
//設置Cookie

//1:服務器可以向客戶端寫內容
//2:只能是文本內容
//3:客戶端可以阻止服務器寫入
//4:只能拿自己webapp寫入的東西
//5:Cookie分爲兩種,
第一種:屬於窗口/子窗口(放在內存中的),
第二種:屬於文本(有生命週期的)
//6:一個servlet/jsp設置的cookies能夠被同一個路徑下面
或者子路徑下面的servlet/jsp讀到 (路徑 = URL)(路徑 != 真實文件路徑)
.....................................................................

http中cookie的值設置:
public Cookie(java.lang.String name,
              java.lang.String value)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
// Default maxAge is -1, indicating cookie applies only to current browsing session.
Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i);
   
response.addCookie(cookie);

cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i);
// Cookie is valid for an hour, regardless of whether user quits browser,
 reboots computer, or whatever.
cookie.setMaxAge(3600);
response.addCookie(cookie);

...................................................
servlet有2類。工程運行剛開始,就加載,還有一種是用戶請求,才運行性的。
查文檔。、、、、
加載先後順序:
context-param-》 listener—》 filter-》 servlet其他根據mapping先後。

...................................................................

通過servlet得到web.xml文件中的數據,那麼必須得到servlet的環境,也就是getServletContext()
然後再通過getInitParameter()才能得到參數值。
如果,通過ServletConfig然後直接通過getInitParameter是得不到的。
String username=this.getServletContext().getInitParameter("username");
String password=this.getServletConfig().getServletContext().getInitParameter("password");
上述是可以得到的,但是下面的是得不到的。

String username=this.getServletConfig().getInitParameter();是得不到配置參數的值的。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

通過Servlet得到的另一個頁面的數據,通過forward得到,
中間有其他頁面也會傳到。這個和jsp頁面時類似的。
所以經過forward傳過n個頁面,也能把起始頁面的信息,傳到末尾頁
.....................................................................
this.getServletConfig().getServletContext()
.getRequestDispatcher("/servlet/OnlyFowardServlet")
.forward(request, response);

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在jsp頁面中:
request.getRequestDispatcher("/index.jsp")
.forward(request,response);
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
 pageContext
  javax.servlet.jsp.PageContext 的實例,該對象代表該JSP 頁面上下文,
使用該對象可以訪問頁面中的共享數據。常用的方法有getServletContext()和getServletConfig()等。
  //使用pageContext 設置屬性,該屬性默認在page 範圍內
  pageContext. setAttribute("page" , "hello") ;
  //使用request 設置屬性,該屬性默認在request 範圍內
  request. setAttribute ("request" , "hello");
  //使用pageContext將屬性設置在request 範圍中
  pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);
  // 使用session將屬性設置在session 範圍中
  session.setAttribute("session" , "hello");
  //使用pageContext將屬性設置在session範圍中
  pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);
  //使用application將屬性設置在application範圍中
  application. setAttribute ("app" , "hello") ;
  //使用pageContext 將屬性設置在application 範圍中
  pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;

.......................................................................................

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章