Servlet與Jsp

請求響應圖:


一:Servlet簡介與體系結構

Servlet是使用JAVA語言編寫的服務器端程序。Servlet主要運行在服務器端,並由服務器調用。

Servlet是單實例的,所以贏儘量少使用全局變量。

Servlet(接口)<——GenericServlet(抽象類)<——HttpServlet(抽象類)

二:Servlet實現方式:

方式一:實現Servlet接口,覆寫其中的方法

url倆種訪問方式:

第一種:訪問資源:http://localhost/HelloServlet/hello/login.html

第二種:訪問後臺路徑(直接與Servlet關聯)

方式二:繼承GeneriServlet類,覆寫service方法

方式三:繼承HttpServlet

根據要求可以覆寫doGet(xxx)doPost(xxx),service(xxx),如果覆寫了servicexxx)方法,則執行service(xxx)方法,不執行doGet(xxx)doPost(xxx)方法。



eg1:  
(1)<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>登錄頁面</title>  
</head>  
<body>  
   <form action="loginURL" method="post">  
            用戶名:<input type="text" name="username"/> <br/><br/>  
            密碼:<input type="password" name="pwd"/> <br/><br/>  
            <input type="submit" value="登錄"/>     
            <input type="reset" value="重置"/>  
   </form>  
</body>  
</html>  
  
(2)<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>歡迎頁面</title>  
</head>  
<body>  
   <h3>恭喜,登錄成功!</h3>  
</body>  
</html>  
  
(3)  
<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>失敗頁面</title>  
</head>  
<body>  
   <h3>用戶名或密碼錯誤,請重新登錄!</h3>  
   <a href="http://localhost/HelloWeb/hello/login.html">點擊跳轉</a>  
</body>  
</html>  
  
(4)package org.afanti.com;  
  
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 LoginServlet extends HttpServlet{  
    @Override  
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        doPost(req,resp);  
    }  
      
    @Override  
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        String username=req.getParameter("username");  
        String pwd=req.getParameter("pwd");  
        if("lily".equals(username) && "123789".equals(pwd)){  
            req.getRequestDispatcher("/hello/welcome.html").forward(req,resp);  
        }else{  
            req.getRequestDispatcher("/hello/fail.html").forward(req,resp);  
        }  
    }  
}  
(5)<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  
  <display-name>HelloWeb</display-name>  
  <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>  
    
  <servlet>  
      <servlet-name>firstServlet</servlet-name>  
      <servlet-class>org.LoginServlet</servlet-class>  
  </servlet>  
  <servlet-mapping>  
      <servlet-name>firstServlet</servlet-name>  
      <url-pattern>/hello/loginURL</url-pattern>  
  </servlet-mapping>  
</web-app>  

三:Servlet配置方式

方式一:註解配置   @WebServlet(urlPatterns={“/xxx”})方式二:web.xml(部署描述符)配置

注意:<load-on-startup>屬性的值爲0或正數指   明當容器啓動時就加載該Servlet,值越小,優先級越高;但是loadOnStartup的值爲負數或沒有此屬性時則當請求該Servlet時,才加載該Servlet.

加載(實例化):Servlet容器創建Servlet實例;

初始化:該容器調用init()方法;

服務:如果請求Servlet,則容器調用service()方法;

銷燬:銷燬實例之前調用destroy()方法。

“服務器端跳轉的路徑”可以是絕對路徑也可以是   相對路徑。服務器端如果是絕對路徑,要寫成: /跳轉路徑   ("/"代表的是上下文根目錄後的"/")如果客戶端跳轉的路徑使用的是絕對路徑,要寫成:

   /上下文根目錄/跳轉路徑

六:JSP(Java Server Page)

1. JSP:Java服務頁,JSP是一種動態頁面技術。JSP頁面存活於Web容器中。 JSP其實就是在HTML頁面中嵌入Java代碼。 JSP=HTML+Java代碼 2 JSP與Servlet的關係是什麼?    Servlet是JSP的前身,本質上是一樣的。    JSP頁面在運行時由Web容器先轉換成Servlet類, 然後編譯,再運行編譯好的.class文件,   最終轉換成HTML代碼發送給客戶端瀏覽器。

在HTML頁面中嵌入Java代碼:

使用Scriptlet代碼    1.<%!           Java類、方法、全局變量(或常量)      %>   2.<%         Java代碼(語句),局部變量      %>

    3.<%=變量或常量%>      // 輸出內容

<%@page import="java.net.URLDecoder"%>
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
</head>
<body>
   <%
      String username=request.getParameter("user");   // 獲取請求參數名爲user的參數值
      if("tom".equals(username)){
   %>
    	  <h3>歡迎Tom,你是我們的VIP用戶!你抓老鼠很厲害~~~</h3>
   <%
      }else{
   %>
    	  <h3>你是<%=username%>,不歡迎!!!</h3>
   <%
      }
   %>
    
</body>
</html>

七:JSP四種屬性範圍

(1) page屬性範圍:

    使用pageContext內置對象操作,但是習慣上將這種範圍稱爲page範圍。只在一個頁面中保存屬性,跳轉之後無效

(2)request屬性範圍

    在一個請求範圍內保存屬性,例如:服務器端跳轉後想要讓屬性保存下來,則可以使用request屬性範圍。

(3)session屬性範圍( Session代表客戶端與服務器端的一次會話,保存於服務器端。

  也就是屬性可以在一個會話範圍內保存,只要是  同一個會話,則無論是客戶端跳轉還是服務端跳轉,都可以保存。

(4) application屬性範圍

   將屬性設置到服務器中,這樣,所有會話都可以 訪問該屬性。不宜設置過多,因爲會影響服務器性能。


八:Cookie與Session

1)Cookie:  Cookie是Http header的一部分,其傳輸由HTTP協議控制;
                       要將Cookie發送到瀏覽器,需要調用HttpServletResponse的addCookie(cookie對象)方法;

                       注意:. 在客戶端每次向服務器端發送請求時都會將之前設置的Cookie隨着頭信息一起發送到服務器上;                                           Cookie由服務器端生成,但保存於客戶端。

(2)Cookie與Session關係:

   在Cookie中保存着一個SessionId(在Tomcat中的這個Cookie名爲JSESSIONID),這樣用戶在每次發出請求時都會將此SessionID發   送到服務器端,服務器端依靠此Cookie中保存着的SessionId來區分每一個不同的客戶端。


eg1:

(1).

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Cookie</title>
</head>
<body>
   <%
        Cookie cookie=new Cookie("mycookie","Hello,this is my cookie!");   // 生成一個Cookie對象
        response.addCookie(cookie);   // 將該Cookie發送給客戶端
   %>
</body>
</html>

(2).

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.Enumeration"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>獲取所有的請求頭信息(request headers)</title>
</head>
<body>
   <h3>所有的請求頭信息如下:</h3>
   <%
       Enumeration<String> enumers=request.getHeaderNames();   // 獲取所有的頭信息名稱
       while(enumers.hasMoreElements()){
    	   String headerName=enumers.nextElement();   // 獲取當前的頭信息名稱
    	   String headerValue=request.getHeader(headerName);
    	   out.println("<h4>"+headerName+"=============>"+headerValue+"</h4>");    // 輸出到瀏覽器
       }
       
       String sessionId=session.getId();
   %>
   <h3>當前的SessionId是:<%=sessionId%></h3>
</body>
</html>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章