Servlet之javaweb应用(二)
1). 把開發選項切換到 JavaEE
2). 可以在 Window -> Show View 中找到 Package Explorer, 并把其拖拽到開發區的左邊
3). 在 Servers 面板中新建 Tomcat 服務器. 一定要關聯到 Tomcat 安裝的根目錄
4). 新建一個 Dynamic Web Project(如果沒有,下載Eclipse組件。或者去Eclipse官網下載Eclipse for javaEE IDE)。?其中 Target Runtime 需選擇 Tomcat7.0?
5). 開發 Java WEB 應用
6). 可以通過 run on server ?來運行 WEB 項目.?
二.、Servlet 的 HelloWorld
1). 創建一個 Servlet 接口的實現類.?
public class HelloServlet implements Servlet
2). 在 web.xml 文件中配置和映射這個 Servlet
?
<!-- 配置和映射 Servlet --><servlet><!-- Servlet 注冊的名字 --><servlet-name>helloServlet</servlet-name><!-- Servlet 的全類名 --><servlet-class>com.mk.HelloServlet</servlet-class></servlet> <servlet-mapping><!-- 需要和某一個 servlet 節點的 serlvet-name 子節點的文本節點一致 --><servlet-name>helloServlet</servlet-name><!-- 映射具體的訪問路徑: / 代表當前 WEB 應用的根目錄. --><url-pattern>/hello</url-pattern></servlet-mapping>?
三、 Servlet 容器: 運行 Servlet、JSP、Filter 等的軟件環境
1). 可以來創建 Servlet, 并調用 Servlet 的相關生命周期方法.?
2). JSP, Filter, Listener, Tag ...
四、Servlet 生命周期的方法: 以下方法都是由 Serlvet 容器負責調用.
1). 構造器: 只被調用一次. 只有第一次請求 Servlet 時, 創建 Servlet 的實例. 調用構造器.?
這說明 Serlvet 的單實例的!
2). init 方法: 只被調用一次. 在創建好實例后立即被調用. 用于初始化當前 Servlet.?
3). service: 被多次調用. 每次請求都會調用 service 方法. 實際用于響應請求的.?
4). destroy: 只被調用一次. 在當前 Servlet 所在的 WEB 應用被卸載前調用. 用于釋放當前 Servlet 所占用的資源.?
五、 ?web.xml 文件中load-on-startup 參數
1). ?配置在 servlet 節點中:
<servlet><!-- Servlet 注冊的名字 --><servlet-name>secondServlet</servlet-name><!-- Servlet 的全類名 --><servlet-class>com.atguigu.javaweb.SecondServlet</servlet-class><!-- 可以指定 Servlet 被創建的時機 --><load-on-startup>2</load-on-startup></servlet>2). load-on-startup: 可以指定 Serlvet 被創建的時機. 若為負數, 則在第一次請求時被創建.若為 0 或正數, 則在當前 WEB 應用被
Serlvet 容器加載時創建實例, 且數字越小越早被創建.?
六、?web.xml 文件中serlvet-mapping
1). 同一個Servlet可以被映射到多個URL上,即多個 <servlet-mapping> 元素的<servlet-name>子元素的設置值可以是同一個
Servlet的注冊名。?
2). 在Servlet映射到的URL中也可以使用 * 通配符,但是只能有兩種固定的格式:
一種格式是“*.擴展名”,另一種格式是以正斜杠(/)開頭或以“/*”結尾。*.擴展名這種形式優先級別最低
或
<servlet-mapping> <servlet-name>secondServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>注意: 以下的既帶 / 又帶"*.擴展名"的不合法.?
<servlet-mapping> <servlet-name>secondServlet</servlet-name> <url-pattern>/*.action</url-pattern> </servlet-mapping>?
七、ServletConfig: 封裝了 Serlvet 的配置信息, 并且可以獲取 ServletContext 對象
1).?web.xml 文件中配置 Serlvet 的初始化參數
<servlet><servlet-name>helloServlet</servlet-name><servlet-class>com.mk.HelloServlet</servlet-class><!-- 配置 Serlvet 的初始化參數。 且節點必須在 load-on-startup 節點的前面 --><init-param><!-- 參數名 --><param-name>user</param-name><!-- 參數值 --><param-value>root</param-value></init-param><init-param><param-name>password</param-name><param-value>1230</param-value></init-param><load-on-startup>-1</load-on-startup> </servlet>
2). 獲取初始化參數:?
? getInitParameter(String name): 獲取指定參數名的初始化參數
? getInitParameterNames(): 獲取參數名組成的 Enumeration 對象.?
? ?
String user = servletConfig.getInitParameter("user"); System.out.println("user: " + user);Enumeration<String> names = servletConfig.getInitParameterNames(); while(names.hasMoreElements()){String name = names.nextElement();String value = servletConfig.getInitParameter(name);System.out.println("參數" + name + ": " + value); }?
3). 獲取 Serlvet 的配置名稱(了解)
String getServletName():?獲取當前Servlet在web.xml中配置的名字
?
八、ServletContext
1). SerlvetContext獲取
①.在javax.servlet.Filter中直接獲取
? ?ServletContext context = config.getServletContext();
②.在HttpServlet中直接獲取
? ServletContext context =this.getServletContext()
③.在其他方法中,通過HttpRequest獲得
? ?ServletContext context =request.getSession().getServletContext();
④.在SerlvetConfig中獲取
? ?ServletContext servletContext = servletConfig.getServletContext();
2). 該對象代表當前 WEB 應用: 可以認為 SerlvetContext 是當前 WEB 應用的一個大管家. 可以從中獲取到當前 WEB 應用的各個方面的信息.
①. 獲取當前 WEB 應用的初始化參數
設置初始化參數: 可以為所有的 Servlet 所獲取, 而 Servlet 的初始化參數只用那個 Serlvet 可以獲取.?
方法:
getInitParameter(String name)
getInitParameterNames()
代碼:
②. 獲取當前 WEB 應用的某一個文件在服務器上的絕對路徑, 而不是部署前的路徑
getRealPath(String path);
代碼:
③. 獲取當前 WEB 應用的名稱:?
getContextPath()
代碼:
④. 獲取當前 WEB 應用的某一個文件對應的輸入流.?
getResourceAsStream(String path): path 的 / 為當前 WEB 應用的根目錄.?
代碼:
⑤. 和 attribute 相關的幾個方法:
添加屬性:setAttribute(String name,Object ob);
獲得到值:getAttribute(String):Object
刪除屬性:removeAttribute(String name)
九、GET 請求和 POST 請求
1). 使用GET方式傳遞參數:
①. 在瀏覽器地址欄中輸入某個URL地址或單擊網頁上的一個超鏈接時,瀏覽器發出的HTTP請求消息的請求方式為GET。?
②. 如果網頁中的<form>表單元素的 method 屬性被設置為了“GET”,瀏覽器提交這個FORM表單時生成的HTTP請求消息的請求方式也為GET。?
③. 使用GET請求方式給WEB服務器傳遞參數的格式: ?
http://www.mk.com/counter.jsp?name=lc&password=123
④. 使用GET方式傳送的數據量一般限制在 1KB 以下。?
2). 使用 POST 方式傳遞參數:
①. POST 請求方式主要用于向 WEB 服務器端程序提交 FORM 表單中的數據: form 表單的 method 置為 POST
②. POST 方式將各個表單字段元素及其數據作為 HTTP 消息的實體內容發送給 WEB 服務器,傳送的數據量要比使用GET方式傳送的數據量大得多。 ?
POST /counter.jsp HTTP/1.1
referer: http://localhost:8080/Register.html
content-type: application/x-www-form-urlencoded
host: localhost:8080
content-length: 43
name=zhangsan&password=123 ? ? ? ? ? ? ?--請求體中傳遞參數.?
十、如何在 Serlvet 中獲取請求信息
1). Servlet 的 service() 方法用于應答請求: 因為每次請求都會調用 service() 方法
public void service(ServletRequest request, ServletResponse response)?throws ServletException, IOException
ServletRequest: 封裝了請求信息. 可以從中獲取到任何的請求信息.
ServletResponse: 封裝了響應信息, 如果想給用戶什么響應, 具體可以使用該接口的方法實現.?
這兩個接口的實現類都是服務器給予實現的, 并在服務器調用 service 方法時傳入.?
2). ServletRequest: 封裝了請求信息. 可以從中獲取到任何的請求信息.
①. 獲取請求參數:?
> String getParameter(String name): 根據請求參數的名字, 返回參數值.?
若請求參數有多個值(例如 checkbox), 該方法只能獲取到第一個提交的值.?
> String[] getParameterValues(String name): 根據請求參數的名字, 返回請求參數對應的字符串數組.?
> Enumeration getParameterNames(): 返回參數名對應的 Enumeration 對象,?
類似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.?
> Map getParameterMap(): 返回請求參數的鍵值對: key: 參數名, ?value: 參數值, String 數組類型.?
②. 獲取請求的 URI:
③. 獲取請求方式:?
String method = httpServletRequest.getMethod(); System.out.println(method); //GET④. 若是一個 GET 請求, 獲取請求參數對應的那個字符串, 即 ? 后的那個字符串.?
?
String queryString = httpServletRequest.getQueryString(); System.out.println(queryString); //user=mk&password=123456&interesting=game&interesting=party&interesting=shopping?
⑤. 獲取請求的 Serlvet 的映射路徑?
String servletPath = httpServletRequest.getServletPath(); System.out.println(servletPath);⑥. 和 attribute 相關的幾個方法?
3). HttpServletRequest: 是 SerlvetRequest 的子接口. 針對于 HTTP 請求所定義. 里邊包含了大量獲取 HTTP 請求相關的方法.?
?
4). ServletResponse: 封裝了響應信息, 如果想給用戶什么響應, 具體可以使用該接口的方法實現.?
①. getWriter(): 返回 PrintWriter 對象. 調用該對象的 print() 方法, 將把 print() 中的參數直接打印
到客戶的瀏覽器上.?
②. 設置響應的內容類型: response.setContentType("application/msword");
③. void sendRedirect(String location): 請求的重定向. (此方法為 HttpServletResponse 中定義.)
總結
以上是生活随笔為你收集整理的Servlet之javaweb应用(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Varial Hosting推出了他们的
- 下一篇: lol电脑配置推荐最佳?