第二章:Servlet入門
第1節:Servlet入門
知識點1:Servlet線程特性
1.Web應用服務器,爲每個客戶端的連接啓動一個線程來服務
2.第一次訪問Servlet時,服務器將創建一個該Servlet類的對象,並調用doXXX方法生成響應;多個客戶端訪問同一個Servlet時,不再創建新的對象,而且共用同一個Servlet對象。可以說,Servlet是多線程單例的。
知識點2:請求和響應接口
Web應用基於HTTP協議,HTTP協議基於請求/響應模型**
1.請求數據
通過瀏覽器給服務端的所有數據,稱爲請求數據
2.響應數據
通過服務器返回給客戶端的所有數據,稱爲響應數據
3.Servlet API中,定義了請求接口和相應接口,用來封裝和操作請求和響應數據
4.doXXX
服務器會創建請求對象和響應對象傳遞給doXXX方法,doXXX方法可以直接使用響應對象和請求對象
知識點3:利用Servlet對客戶端不同方式的請求做出動態響應
客戶端訪問服務器端Servlet有三種方式**
1.直接從地址欄輸入URL訪問
2.在網頁中點擊超級鏈接訪問
<a href="http://localhost:8080/0428-web-servlet/TestServlet">Go servlet</a>
3.在網頁中通過表單提交訪問
<--沒有指定method的表單,默認是get方式-->
<form action="http://localhost:8080/0428-web-servlet/TestServlet">
<input type="submit" value="提交"/>
</form>
</--指定method爲post的表單,提交方式爲post-->
<form action="http://localhost:8080/0428-web-servlet/TestServlet" method="post">
<input type="submit" value="提交"/>
</form>
4.編寫Servlet(doGet、doPost方法)
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 設置編碼
response.setContentType("text/html;charset=UTF-8");
// 得到ip
String ip = request.getRemoteAddr();
// 輸出ip
response.getWriter().print("您好,目前調用的是doGet方法,您的IP地址是:" + ip);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 設置編碼
response.setContentType("text/html;charset=UTF-8");
// 得到ip
String ip = request.getRemoteAddr();
// 輸出ip
response.getWriter().print("您好,目前調用的是doPost方法,您的IP地址是:" + ip);
}
總結:
1、直接使用URL訪問,是GET方式,調用doGet方法;
2、超級鏈接訪問,是GET方式,調用doGet方法;
3、表單提交訪問,取決form的method屬性的值,默認是get,指定爲post時,調用doPost方法;
知識點4: Servlet中獲取普通請求不同名或同名的參數的方法
(一)客戶端向服務器servlet傳遞請求參數的方式有2種
1.在url?name=value&name=value
直接在瀏覽器的地址欄輸入url?name=value&name=value
在a標籤裏:<a href=”url?name=value&name=value”>
2.form表單傳遞請求參數
(二)服務器會將請求參數封裝到請求對象中
當客戶端請求服務器端的Servlet時,請求參數都會被髮送到服務器,服務器Tomcat會將請求參數封裝到請求對象request中
(三)如何從請求對象中得到請求參數的值
1.在瀏覽器的地址欄輸入url?name=value&name=value,在servlet取得請求參數的值
//寫一個TestParamServlet,用於接收請求參數name,age的值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//調用請求對象的getParameter(name)方法得到請求參數的值
String name = request.getParameter("name");
String age = request.getParameter("age");
//把得到的請求參數的值顯示出來
PrintWriter printWriter = response.getWriter();
printWriter.print("name="+name);
printWriter.print("age="+age);
}
2.在a標籤裏:<a href=”url?name=value&name=value”>
<a href="/0428-web-servlet/TestParamServlet?name=zs&age=20">name和age請求參數</a>
3.form表單傳遞請求參數
<form action="/0428-web-servlet/TestParamServlet" method="post">
姓名:<input type="text" name="name"/><br/>
年齡:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/>
</form>
4.form表單傳遞同名的請求參數,在Servlet獲取多個值
<form action="/0428-web-servlet/TestParamServlet" method="post">
姓名:<input type="text" name="name"/><br/>
年齡:<input type="text" name="age"/><br/>
愛好:
<input type="checkbox" name="hobbies" value="吃"/>吃
<input type="checkbox" name="hobbies" value="喝"/>喝
<input type="checkbox" name="hobbies" value="玩"/>玩
<input type="checkbox" name="hobbies" value="樂"/>樂<br/>
<input type="submit" value="提交"/>
</form>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//設置請求接收參數使用UTF-8編碼進行解析,中文不會亂碼
request.setCharacterEncoding("UTF-8");
//調用請求對象的getParameter(name)方法得到請求參數的值
String name = request.getParameter("name");
String age = request.getParameter("age");
String[] hobbies = request.getParameterValues("hobbies");
for (String string : hobbies) {
System.out.println(string);
}
response.setContentType("text/html;charset=UTF-8");
//把得到的請求參數的值顯示出來
PrintWriter printWriter = response.getWriter();
printWriter.print("name="+name);
printWriter.print("age="+age);
}
(四)Get請求方式的中文亂碼的解決
1.server.xml配置參數:URIEncoding="UTF-8"
2.servlet:response.setContentType(“text/html;charset=UTF-8”);
(五)Post請求方式的中文亂碼的解決
1.servlet中:request.setCharacterEncoding(“UTF-8”);
2.servlet:response.setContentType(“text/html;charset=UTF-8”);
知識點5: Servlet初始化參數
(一)什麼是Servlet初始化參數
如果Servlet需要使用一些可以配置的參數,可以在創建Servlet時進行設置稱爲初始化參數;
(二)特點
1.一個Servlet可以配置多個初始化參數,
2.所有的初始化參數只能在當前Servlet類中使用;
(三)設置Servlet的初始化參數
web.xml中的servlet節點使用init-param進行設置
<servlet>
<description></description>
<display-name>TestInitParamServlet</display-name>
<servlet-name>TestInitParamServlet</servlet-name>
<servlet-class>com.tjetc.servlet.TestInitParamServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>中軟國際</param-value>
</init-param>
</servlet>
(四)在servlet中如何取得初始化參數的值
直接在servlet中調用getInitParameter(name)就能夠得到初始化參數的值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = getInitParameter("name");
System.out.println(name);
response.getWriter().append("Served at: ").append(request.getContextPath());
}
知識點6: 全局參數
(一)什麼是全局參數
在應用下的所有的servlet都能使用的參數稱之爲全局參數
(二)全局參數的特點
在應用下的所有的servlet都能使用全局參數
(三)設置全局參數
web.xml的節點進行配置
<context-param>
<param-name>company</param-name>
<param-value>中國移動公司</param-value>
</context-param>
(四)得到全局參數
ServletContext servletContext = getServletContext();
String company = servletContext.getInitParameter("company");
System.out.println(company);
知識點7: Servlet加載啓動選項
(一)什麼是servlet的啓動選項
在web.xml配置load-on-startup,代表在服務器Tomcat啓動的時候就調用servlet的構造方法實例化servlet.這就是servlet的啓動選項.
如果沒有設置該選項,默認是在第一次訪問servlet時調用servlet的構造方法實例化servlet.
(二)如何配置Servlet的啓動選項
在web.xml配置load-on-startup,
數值代表啓動的順序,越小越先啓動
<servlet>
<description></description>
<display-name>TestLoadServlet</display-name>
<servlet-name>TestLoadServlet</servlet-name>
<servlet-class>com.tjetc.servlet.TestLoadServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
知識點8: Servlet配置中通配符*的用法
(一)什麼是通配符配置
要訪問Servlet,必須爲Servlet配置<url-pattern>,可以使用通配符*進行配置,從而通配多種訪問模式
<url-pattern>可以配置多個.
(二)使用方式2種
1.*.擴展名 : 比如 .do、.action
在web.xml中url-pattern配置
<servlet-mapping>
<servlet-name>TestLoadServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
2.以 / 開頭,同時以 / 結尾,比如 / 、/admin/***
<servlet-mapping>
<servlet-name>TestLoadServlet</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
知識點9: web.xml中首頁及錯誤頁面等其他配置信息
(一)配置首頁
1.web.xml配置welcome-file-list->welcome-file
2.配置默認首頁:當不指定具體訪問路徑時,默認訪問默認首頁
3.將按照順序訪問,都不存在將報404錯誤
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
(二)配置錯誤頁面
當應用中出現響應錯誤或者異常時,可以跳轉到錯誤頁面
web.xml配置 error-page
1.錯誤碼
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
2.異常類型
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/exception.html</location>
</error-page>
知識點10:Servlet中獲取請求頭屬性的方法
知識點11:重要的請求頭屬性(請求長度、請求MIME類型、請求referer等)
1.Content-Length:獲得請求長度
2.Accept:瀏覽器能接受的MIME(它全名叫多用途互聯網郵件擴展(Multipurpose Internet Mail Extensions),最初是爲了將純文本格式的電子郵件擴展到可以支持多種信息格式而定製的。後來被應用到多種協議裏,包括我們常用的HTTP協議。MIME的常見形式是一個主類型加一個子類型,用斜線分隔。比如text/html、application/javascript、image/png等。在訪問網頁時,MIME type幫助瀏覽器識別一個HTTP請求返回的是什麼內容的數據,應該如何打開、如何顯示)類型
3.Referer:來路路徑,代表請求從哪個頁面轉過來的.