Java web -Servlet

1.servlet 概述

Servlet:運行在web服務器上的小的JAVA程序,用來接受和響應從客戶端發送過來的請求,通常使用HTTP協議。
使用Servlet:類實現Servlet接口,並部署到服務器。
入門程序

public class ServletDemo implements Servlet{

    /*
     * 用來處理客戶的請求,並且做出響應的方法
     * 
     * */   

        @Override
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
            // TODO Auto-generated method stub
            res.getWriter().println("hello servlet....");
        }
<?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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>WebExercise</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>
  <!-- servlet名稱 -->
    <servlet-name>test1</servlet-name>
    <!-- Servlet的全路徑 -->
    <servlet-class>com.itheima.a_servlet.ServletDemo</servlet-class>
  </servlet>
  <!-- Servlet的映射 -->
  <servlet-mapping>
    <servlet-name>test1</servlet-name>
    <!-- Servlet的訪問路徑 -->
    <url-pattern>/ServletDemo</url-pattern>
  </servlet-mapping>

</web-app>

查詢地址:http://localhost:8080/WebExercise/ServletDemo

2.使用ServletRequest接受參數

getParameter — 用於接受一個名稱對應一個值的數據
getparameterMap — 接受一個名稱對應多個值得數據
getParameterNames — 用於接受表單中的所有數據,Map的Key是表單提交的參數,Map的value是提交參數的值。
getParameterValues — 用於獲取表單中提交的所有參數的名稱。

2.1Servlet的實現關係

  • Servlet :接口
  • GenericServlet : 通用的接口
  • HttpServlet :Http接口,編寫一個類繼承HttpServlet,重寫doget和doPost。

2.2Servlet ->Service -> Dao

3.servlet的生命週期

生命週期:一個對象從創建到銷燬的過程
Servlet生命週期:Servlet從創建到銷燬的過程
*何時創建:用戶第一次訪問Servlet創建Servlet的實例。
*何時銷燬:當項目從服務器中移除的時候,或者關閉服務器的時候。
用戶第一次訪問Servlet的時候,服務器會創建一個Servlet的實例,那麼Servlet中的init方法就會執行,任何一次請求服務器創建一個新的線程訪問Servlet中的Service方法,在Service方法顳部根據請求的方式的不同調用DoXXX的方法(get請求調用doGet,,post調用doPost),當Servlet中服務器中移除,或者服務器關閉的時候,Servlet就會被銷燬。

3.1Servlet的相關配置

【啓動時創建Servlet】
Servlet默認是在第一次訪問的時候創建的,現在讓Servlet在服務器啓動的時候創建好,進行對Servlet的配置。
在web.xml中在標籤中進行配置:
*2 //Tomcat啓動就加載。
【URL-Pattern的配置】
URL-Pattern配置方式共有三種:
1.完全路徑匹配 : 以 / 開始 eg:/servletDemo04, /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目錄匹配 : 以 / 開始,需要以 * 結束。Eg:/* , /aaa/* , /aaa/bbb/*
3.擴展名匹配 : 不能以 / 開始,以* 開始的。eg:.do , .action ,
錯誤的寫法: /.do
*完全路徑匹配 > 目錄匹配 > 擴展名匹配

3.2開發中路徑的編寫

相對路徑:都是需要找位置的相對關係,不能以 / 開頭
* ./當前路徑 ../上一級目錄
* 使用相對路徑訪問:
絕對路徑:不需要找位置的相對關係,以 / 開始,
*絕對路徑中氛圍客戶端路徑和服務器端路徑:
*客戶端路徑:一定要加工程名 /day09/ServletDemo06
*服務器端路徑:不需要加工程名 /ServletDemo06

4.登錄5秒後,跳轉到另一個界面

【使用HTTP協議中的refresh頭信息】
Refresh可以定時頁面跳轉,需要使用程序設置頭信息纔可以。
【response中設置響應頭】
addHeader(String Name,String value);
setHeader(String name, String value);
例如:頭信息:xxx:aaa
【使用JS實現讀秒的效果】

<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Refresh" content="5;url =/WebExercise/demo5-refresh/index.html">
<title>success page</title>

<script type="text/javascript">
    var time = 5;
    window.onload = function(){
        setInterval('changeTime()',1000);
    }

    function changeTime(){
        time--;
        document.getElementById("s1").innerHTML = time;
    }
</script>

</head>
<body>
    <h1>success</h1>
    <h3>頁面將在<span id="s1">5</span>秒後跳轉</h3>

</body>
</html>

5登錄次數

【ServletContext對象】

用來存取數據,****ServletContext對象存取數據,存的數據都是有一定作用的範圍的,這種對象稱爲是域對象。
*setAttribute
*getAttribute
*removeAttribute

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        //      1.接收表單提交的參數
        String username = request.getParameter("username");
        String password = request.getParameter("password");
//      2.封裝實體對象
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);

//      3.調用業務岑處理數據
        UserService userService = new UserService();
        try {
            User existUser = userService.login(user);

//          4.根據處理結果顯示信息
            if (existUser == null) {
//              登錄失敗
                response.getWriter().println("fail");
            }else{
//              登錄成功
                response.getWriter().println("success");
//              記錄次數。
                int count = (int) this.getServletContext().getAttribute("count");
                count++;
                this.getServletContext().setAttribute("count", count);

                response.setHeader("Refresh", "5;url=/WebExercise/showCount");
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html;charset=utf-8");
        int count = (int)this.getServletContext().getAttribute("count");
        response.getWriter().println("<h1>您是第"+count+"爲登錄成功的用戶<h1>");
    }

6.總結

【ServletConfig】獲得Servlet的配置信息

getInitParameter(String name) — 獲得Servlet的初始化參數。
getIntParameterNames(String name); —- 獲得所有的Servlet的初始化參數的名稱。
getServletContext()
getServletName() — 獲得Servlet在web.xml中的配置的Name的值。
【ServletContext】是一個域對象
*作用範圍:整個web工程
*創建:服務器啓動的時候,tomcat服務器爲每個web項目創建一個單獨的ServletContext對象。
*銷燬:服務器關閉的時候,或者項目從服務器移除的時候。
-> ServletContext的作用:
*1.用來獲取全局初始化參數
*2.用來獲得文件的MIME的類型。
*3.作爲域對象存儲數據
*4.用來兌取Web項目下的文件

7.讀取Web工程下的文件

【需求】
現在有一個配置文件在web工程下 的src下,項目要發佈到tomcat中,需要編寫一段程序讀取文件。

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