1. Servlet基礎
Servlet是在服務器上運行的小程序。一個Servlet就是一個Java類,並且可以通過“請求-響應”辯稱模型來訪問這個駐留在服務器內存裏的Servlet程序。
2. Tomcat容器等級
Tomcat容器分爲四個等級,Servlet的容器管理Context容器,一個Context對應一個Web工程。
3. 創建Servlet
Servlet接口有3個方法:init()、Service()、destroy(),GenericServlet是一個與協議無關的抽象類,HttpServlet是一個實現了http協議的抽象類,我們自定義Servlet一般要重寫doGet()和doPost()方法
(1). 創建一個類繼承HttpServlet類
(2). 重寫doGet()或者doPost()方法(也可以覆蓋其他方法)
(3). 在web.xml中註冊Servlet
例如:
public class FirstSerlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("get請求------");
resp.setContentType("text/html;charset:UTF-8");
PrintWriter pw = resp.getWriter();
pw.print("<h1>hello---get</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("post請求------");
PrintWriter pw = resp.getWriter();
pw.print("<h1>hello---post</h1>");
}
}
在web.xml中配置:
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.thr.servlet.FirstSerlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/FirstServlet</url-pattern>
</servlet-mapping>
JSP文件:
<a href="servlet/EclipseServlet">get方式跳轉Servlet</a>
<form action="servlet/EclipseServlet" method="post">
<input type="submit" value="post方式跳轉Servlet">
</form>
Servlet中如果遇到中文亂碼顯示問題,可以在doPost()或者doGet()中開頭加入以下語句即可解決:
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
4. Servlet生命週期
(1). 初始化階段,調用init()方法。
(2). 響應客戶請求階段,調用service()方法。由service()方法根據提交方式選擇執行doGet()或者doPost()方法。
(3). 終止階段,調用destroy()方法。
5. Tomcat裝載Servlet的三種情況
(1). Servlet容器啓動時自動裝載某些Servlet,實現它只需要在web.xml文件中的<Servlet></Servlet>之間添加如下代碼:<loadon-startup>1</loadon-startup>,數字越小表示優先級別越高。
(2). 在Servlet容器啓動後,客戶首次向Servlet發送請求。
(3). Servlet類文件被更新後,重新裝載Servlet。
一個Servlet的方法執行順序:構造方法--->init()方法--->doGet()方法或者doPost()方法--->停止服務器執行destroy()方法。
6. Servlet與九大內置對象
7. Servlet路徑跳轉
絕對路徑:放之四海而皆準的路徑
相對路徑:相對與當前資源的路徑
(1). 超鏈接和表單跳轉
當使用超鏈接訪問地址時,如:
<span style="white-space:pre"> </span><a href="/servlet/HelloServlet">訪問HelloServlet</a>
那麼,它會直接訪問服務器下的路徑:http://localhost:8080/servlet/Helloworld。
當修改爲:
<a href="servlet/HelloServlet">訪問HelloServlet</a>
訪問就變成了:http://localhost:8080/應用名/servlet/Helloworld。
使用絕對路徑訪問可以使用path變量:
<%
String path = request.getContextPath();
%>
<a href="<%=path%>/servlet/訪問HelloServlet">訪問HelloServlet</a>
也是可以達到相同目的的。這個path表示的是項目的根目錄。
表單中action的URL地址寫法,和超鏈接是完全一致的。
(2). web.xml的設置
在web.xml中的<url-pattern>標籤中,記住要使用"/"開頭,這裏的"/"表示的是項目的根目錄
(3). Servlet的跳轉
請求重定向的方式:
使用request.getContextPath()獲取上下文對象。
<span style="white-space:pre"> </span>response.sendRedirect(request.getContextPath() + "/test.jsp");
服務器內部跳轉:
記得前面加上"/",表示的是項目根目錄。
request.getRequestDispatcher("/text.jsp").forward(request, response);
或者使用
request.getRequestDispatcher("../text.jsp").forward(request, response);
8. 獲取初始化參數
在web.xml中配置Servlet時,可以配置一些初始化參數。而在Servlet中可以通過ServletConfig接口提供的方法來取得這些參數。
在<Servlet>標籤內配置:
<span style="font-family:Microsoft YaHei;"> <init-param>
<param-name>item</param-name>
<param-value>NBA</param-value>
</init-param></span>
然後在需要取得初始化參數的Servlet中的init()方法中使用:
<span style="font-family:Microsoft YaHei;"> String item = getInitParameter("item");</span>
即可取得我們設定的NBA。9. MVC
MVC模式:MVC(Model、View、Controller),是軟件開發過程中比較流行的設計思想。旨在分離模型、控制、視圖。是一種分層思想的體現。
10. Model2
JavaWeb的Model2開發模型就是MVC思想的體現。