JavaWeb——Servlet
Servlet:
Java類必須符合一定的規範:
- a.必須繼承 javax.servlet.http.HttpServlet
- b.重寫其中的 doGet()或doPost()方法
- doGet(): 接受 並處 所有get提交方式的請求
- doPost():接受 並處 所有post提交方式的請求
Servlet要想使用,必須配置
Serlvet2.5:web.xml
Servle3.0: @WebServlet
Serlvet2.5:web.xml:
專案的根目錄:WebContent 、src
<a href="WelcomeServlet">所在的jsp是在 WebContent目錄中,因此 發出的請求WelcomeServlet 是去請求專案的根目錄。
Servlet流程:
請求 -><url-pattern> -> 根據<servlet-mapping>中的<servlet-name> 去匹配 <servlet> 中的<servlet-name>,然後尋找到<servlet-class>,求中將請求交由該<servlet-class>執行。
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="WelcomeServlet">WelcomeServlet</a><br/>
<form action="/WelcomeServlet" method="post">
<input type="submit" >
</form>
</body>
</html>
WelcomeServlet
package b1;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WelcomeServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("doPost...");
this.doGet(req, resp);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>b1.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/WelcomeServlet</url-pattern>
</servlet-mapping>
</web-app>
2個/:
jsp:/ localhost:8888
web.xml: / http://localhost:8888/專案名/
1.回顧純手工方法建立第一個Servlet
步驟:
- 編寫一個類,繼承HttpServlet
- 重寫doGet()、doPost()方法
- 編寫web.xml 中的servlet對映關係
2.藉助於Eclipse快速生成Servlet
直接新建Servlet即可!(繼承、重寫、web.xml 可以藉助Eclipse自動生成)
Servlet3.0,與Servlet2.5的區別:
Servlet3.0不需要在web.xml中配置,但 需要在 Servlet類的定義處之上編寫 註解@WebServlet("url-pattern的值")
匹配流程: 請求地址 與@WebServlet中的值 進行匹配,如果匹配成功 ,則說明 請求的就是該註解所對應的類
3. /
專案根目錄:WebContent、src(所有的構建路徑)
例如:
WebContent中有一個檔案index.jsp
src中有一個Servlet.java
如果: index.jsp中請求 <a href="abc">...</a> ,則 尋找範圍:既會在src根目錄中找 也會在WebContent根目錄中找
如果:index.jsp中請求<a href="a/abc"></a>,尋找範圍:先在src或WebContent中找a目錄,然後再在a目錄中找abc
- web.xml中的 /:代表專案根路徑——————http://localhost:8888/Servlet25Project/
- jsp中的/: 伺服器根路徑——————http://localhost:8888/
構建路徑、WebContent:根目錄
4.Servlet生命週期:5個階段
- 載入
- 初始化: init() ,該方法會在 Servlet被載入並例項化的以後 執行
- 服務 :service() ->doGet() doPost
- 銷燬 :destroy(), Servlet被系統回收時執行
- 解除安裝
init():
a.預設第一次訪問 Servlet時會被執行 (只執行這一次)
b.可以修改為 Tomcat啟動時自動執行
i.Servlet2.5: web.xml
<servlet>
...
<load-on-startup>1</load-on-startup>
</servlet>
其中的“1”代表第一個。
ii.Servlet3.0
@WebServlet( value="/WelcomeServlet" ,loadOnStartup=1 )
service()
->doGet() doPost :呼叫幾次,則執行幾次
destroy()
關閉tomcat服務時,執行一次。
package org.lanqiao.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WelcomeServlet extends HttpServlet{
@Override
public void init() throws ServletException {
System.out.println("init...");
//獲取當前Servlet的初始化引數
String value = super.getInitParameter("servletparamname") ;
System.out.println("當前Servlet的引數servletparamname的值是:"+value);
//獲取當前Web容器的初始化引數
ServletContext servletContext = super.getServletContext() ;
String globalValue = servletContext.getInitParameter("globalParam") ;
System.out.println("當前Web容器的 引數globalValue的值是:"+globalValue);
}
@Override
public void destroy() {
System.out.println("destroy....");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service的具體實現(doGet...doPost..)...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("doPost...");
this.doGet(req, resp);
}
}
5 Servlet API :
由兩個軟體包組成: 對應於HTTP協議的軟體包、對應於除了HTTP協議以外的其他軟體包
即Servlet API可以適用於 任何 通訊協議。
我們學習的Servlet,是位於javax.servlet.http包中的類和介面,是基礎HTTP協議。
6.Servlet繼承關係
ServletConfig:介面
- ServletContext getServletContext():獲取Servlet上下文物件 application
- String getInitParameter(String name):在當前Servlet範圍內,獲取名為name的引數值(初始化引數)
a.ServletContext中的常見方法(application):
- getContextPath():相對路徑
- getRealPath():絕對路徑
- setAttribute() 、getAttribute()
- String getInitParameter(String name);在當前Web容器範圍內,獲取名為name的引數值(初始化引數)
Servlet3.0方式 給當前Servlet設定初始值:
@WebServlet( .... , initParams= {@WebInitParam(name="serveltparaname30",value="servletparavalue30") } )
注意,此註解只 隸屬於某一個具體的Servlet ,因此無法為 整個web容器設定初始化引數 (如果要通過3.0方式設定 web容器的初始化引數,仍然需要在web.xml中設定)
HttpServletRequest中的方法:(同request),例如setAttrite()、getCookies()、getMethod()
HttpServletResponse中的方法:同response
Servlet使用層面:
注1:Eclipse中在src建立一個Servlet,然後重寫doGet() doPost()就可以 (doGet() doPost()只需要編寫一個)。
注2:介面類空實現:實現類只需要重寫需要的方法,不使用的不需要重寫
相關文章
- JavaWEB - ServletJavaWebServlet
- JavaWeb Servlet Http協議 HttpServletRequestJavaWebServletHTTP協議
- 初識Javaweb之Servlet以及TomcatJavaWebServletTomcat
- JavaWeb中的Tomcat,Servlet詳解JavaWebTomcatServlet
- JavaWeb開發基礎Servlet APIJavaWebServletAPI
- java基礎學習:JavaWeb之ServletJavaWebServlet
- JavaWeb三大元件(Servlet、Filter、Listener)JavaWeb元件ServletFilter
- JavaWeb基礎總結:Servlet專題JavaWebServlet
- JavaWeb學習筆記~01.ServletJavaWeb筆記Servlet
- JavaWeb三大元件之Servlet詳解JavaWeb元件Servlet
- javaweb關於jsp、servlet基礎筆記JavaWebJSServlet筆記
- JavaWeb開發Servlet之getParameter和getAttribute的區別,JavaWebServlet
- JavaWeb基礎(day15)( http + tomcat + servlet + 響應)JavaWebHTTPTomcatServlet
- Java學習筆記-Day52 JavaWeb、Tomcat、ServletJava筆記WebTomcatServlet
- 走進JavaWeb技術世界4:Servlet 工作原理詳解JavaWebServlet
- 專攻知識小點——回顧JavaWeb中的servlet(二)JavaWebServlet
- JavaWeb之Servlet、攔截器、監聽器及程式設計思想JavaWebServlet程式設計
- JavaWeb開發之建立Servlet無法自動更新web.xml配置JavaWebServletXML
- javaweb練手專案jsp+servlet簡易購物車系統JavaWebJSServlet
- Servlet系列:(一)servlet原理剖析Servlet
- Servlet 規範和 Servlet 容器Servlet
- 96.Servlet Servlet生命週期Servlet
- javawebJavaWeb
- Javaweb專案使用本地servlet啟動,可以彈出主頁,跳轉到controller報404解決方案JavaWebServletController
- Servlet第二篇【Servlet呼叫圖、Servlet細節、ServletConfig、ServletContext】ServletContext
- Servlet概述Servlet
- JavaWeb——JDBCJavaWebJDBC
- Servlet操作OracleServletOracle
- Servlet 新手教程Servlet
- Servlet-HelloWorldServlet
- Servlet筆記Servlet筆記
- Servlet_6Servlet
- Servlet 規範Servlet
- 初學ServletServlet
- Servlet入門Servlet
- Java之ServletJavaServlet
- Servlet 如何工作Servlet
- Servlet3.0新特性-非同步處理Servlet、FilterServlet非同步Filter