javaServlet的構建,servlet,java前端和後端的通信 ...
1.什麼是Servlet
servlet就是java裡面一種類,只不過這種java類有一些特殊的應用,稱呼他為servlet
2.servlet的作用
可以讓瀏覽器直接通過一個路徑取訪問。(一般Java類做不到這一點)
3.如何寫一個servlet類
3.1.三種實現方式:
a.實現介面:javax.servlet.Servlet
b.繼承一個抽象類:javax.servlet.GenericServlet
c.繼承一個抽象類:javax.servlet.http.HttpServlet(常用)
註意:
Servlet中有五個抽象方法,最重要的就是service(ServletRequest arg0,ServletResponse arg1)
GenericServlet實現了其他四個方法,並添加了一些新的方法,但service() 方法沒有實現
HttpService中無抽象方法,將service()方法轉為doGet()方法和doPost()方法。所以在HttpServlet中調用doGet和doPost本質上都是在調用service方法,就是更加細化而已。
doGet()和doPost()方法中的參數也由原先的ServletResquest和ServletResponse變為HttpServletResquest和HttpServletResponse
4.servlet的生命周期
i. servlet是單例:在整個web項目運行期間,只會new一個對象。並且是當第一次訪問時創建(new)
ii. servlet對象的創建及銷毀(伺服器來做的):
a.預設情況下,第一次被訪問的時候tomcat創建servlet對象(調用無參構造器)
b.tomcat調用init(ServletConfig config)方法 ,在servlet對象實例化之後,tomcat伺服器會立馬調用這個方法給servlet的實例進行初始化工作。
c.客戶端訪問的時候,tomcat會調用service(ServletRequest req,ServletResponse res)方法
d.在銷毀servlet對象的時候會tomcat調用destroy()方法.
iii.如果想讓servlet在伺服器(tomcat或其他)開啟時就創建,可以在web.xml文件中配置
<servlet>
<servlet-name>LifeServletTest</servlet-name>
<servlet-class>全限定名(eg:com.sun.Servlet)</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<load-on-startup>中的數字 越小表示當伺服器啟動時就越先被創建
5.關於HttpServlet中的doGet()和doPost()方法
(其實可以記post的,因為常用的提交方式就是dopost和doget)
get方式:(數據拼接在url請求後,格式為:資源名?name=sss&passwd=111&age=22)
a.瀏覽器中輸入地址(URL)然後回車
b.超鏈接
c.頁面中引入的css樣式文件
d.頁面中引入的js的文件(javascript)
e.<img src="image/a.jpg" />
f.form表單中method="get"
g.ajax中可以設置非同步提交請求的方式為get
f.其他
post方式:(數據放在http請求的請求體內)
a.form表單中method=“post"
b.ajax中設置非同步提交請求的方式為post
c.其他
7.Servlet中接收客戶端傳過來的參數
i.格式
參數名稱=參數值
ii.獲取方式
String value=request.getParameter("key");
(這種傳參 參數的類型都是字元串)
如果客戶端中form表單用了多選框,就用數據接收
String [] values=requeset.getParameter("arr");
8.中文亂碼問題
a.需要修改tomcat中的配置文件,然後重新啟動tomcat伺服器.
server.xml:在這個文件中找到修改埠號的那個標簽,然後加入一個新的屬性URIEncoding="UTF-8",或者是寫GBK、GB2312
例如:
<Connector connectionTimeout="20000" port="8002" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="GBK"/>
b.在方法第一句加上req.setCharacterEncoding("GBK");//UTF-8
c.瀏覽器端亂碼時(寫在方法的第一第二行)
resp.setCharacterEncoding("GBK");
resp.setContentType("text/html;charset=GBK");
9.servlet跳轉
跳轉分為兩種形式(伺服器內部跳轉,和客戶端重定向)
a.伺服器內部跳轉(用到的是request對象)
i.通過request對象,獲取跳轉對象---》RequestDispatcher rq=request.getRequestDispatcher(page);
ii.跳轉---》rq.forward(request,response);
(一般簡寫:request.getRequestDispatcher(page).forward(req,res);)
b.客戶端重定向(用到的時response對象)
response.sendRedirece(page);//一般不用
註意:http請求都是無定向的,request存放的信息只有單次請求有效,所以重定向無法攜帶數據
10.前端如何找到Servlet
a.在web.xml中寫配置
<servlet>
<servlet-name>隨便起,跟下邊servlet-mappin中的一樣就行</servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>跟上邊一樣<servlet-name>
<url-pattern>/資源名(前端通過這個名找到後端噠)</url-pattern>
</servlet-mapping>
b.在類上寫註解@WebServlet("/資源名")
eg:@WebServlet("/Test")
public class Test extends HttpServlet {...}
emmmmm....一般都是用eclipse直接新建Servlet,上邊自己有,就不用自己配了
11.路徑問題
12.三個容器---------request、session、application
13.會話追蹤,將http無定向協議實現追蹤技術——session、cookie
14.URL重寫
15.Filter(過濾器)
16.Listener(監聽器)