1. 程式人生 > >JavaWeb複習(三)

JavaWeb複習(三)

文章目錄

三 建立和部署MVC Web應用

3.1 一個簡單應用的組成

​ 一個簡單Web應用包括html表單、servlet控制器、一個模型(普通Java類)、一個xml部署描述檔案、一個jsp檢視

3.2 步驟

3.2.1 分析使用者檢視以及高層體系結構

在這裡插入圖片描述

3.2.1.1對於訪問連結:

根據上圖:

​ 1:客戶請求訪問頁面

​ 2.容器找到html頁面

​ 3.容器把頁面返還給瀏覽器

3.2.1.2 對於訪問servlet:

根據上圖:

​ 4:客戶把請求資料傳送給容器

​ 5.容器根據url找到對應的servlet,並把請求傳遞給這個servlet

​ 6.servlet呼叫模型(普通java類)

​ 7.類返回一個結果,servelet把回答增加到請求物件

​ 8.servlet把請求轉給jsp

​ 9.jsp從請求物件得到答案

​ 10.jsp為生成容器生成頁面

​ 11.容器把頁面返回給使用者

3.3.2 建立專案的開發環境

​ MVC專案的標準層級結構

在這裡插入圖片描述

3.3.3 建立專案的部署環境

​ Tomcat的層級結構:
在這裡插入圖片描述

3.3.4 對Web應用各元件進行迭代開發和測試

3.3.4.1 構建和測試html表單

3.3.4.1.1 構建:

​ 舉個例子:

<html>
    <body>
        <h1>填寫表單</h1>
        <!--html認為/login就是要呼叫的servlet(客戶知道的url名),在專案目錄結構中並不存在-->
        <form name="haha" method="POST" action="/login">
            
            姓名:<input type="text" name="name">
            <br>
            性別:<input type="radio" name="sex" value="men"><input type="radio" name="sex" value="women"><br>
            
            <input type="SUBMIT">
        </form>
    </body>
</html>
3.3.4.1.2:部署和測試

​ 1.在開發環境中建立html,然後保持在專案名/web下

​ 2.把html檔案的副本放在tomcat/webapps/專案名中

​ 3.建立web.xml文件,儲存在開發環境專案名/etc下

<!--該部署檔案的主要目的是定義邏輯名與實際類檔案之間的對映-->
<web-app>
	<servlet>
    	<servlet-name>部署名</servlet-name>
        <servlet-class>類檔案的完全限定名</servlet-class>
    </servlet>
    
    <servlet-mapping>
    	<servlet-name>部署名</servlet-name>
        <!--.do只是一個約定-->
        <url-pattern>/使用者可知的url名.do</url-pattern>
    </servlet-mapping>
</web-app>

​ 4.把web.xml檔案的副本放在/tomcat/webapps/專案名/WEB-INF目錄下

​ 5.啟動tomcat(cd到tomcat主目錄,然後執行/bin/startup.sh)

​ 6.測試頁面(輸入http://localhost:8080/專案名)

3.3.4.2 構建控制器servlet第一個版本

3.3.4.2.1 編寫servlet

​ 利用html表單測試這個控制器(確保html頁面能適當呼叫servlet,且servlet能正確接收html引數)

package com.web

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

pulbic class TestServlet extends HttpServlet {
    //重寫doPost方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("haha<br>");
        //獲取表單中的name資訊(根據html標記中的name屬性匹配)
        String s = request.getParameter("name");
        out.println("he is " + s);
    }
}
3.3.4.2.2 編譯servlet

​ 命令如下:

//切到專案目錄下
cd project
//路徑根據不同的存放目錄是不同的,tomcat之後是相同的
//-d用來告訴編譯器,.class檔案放在適當包結構中的clases目錄下
javac -classpath /路徑/tomcat/common/lib/servlet-api.jar:classes:. -d classes src/com/web/testServlet.java
3.3.4.2.3 部署servlet

​ 建立.class檔案副本,把它移到tomcat/專案/WEB-INF/classes/com/web下

3.3.4.2.4 測試servlet

​ 重啟tomcat然後訪問網頁即可

3.3.4.3 為模型類構建測試類,構建並測試模型類

​ 例如:

package com.model;

public class Test{
    public String getName(String name) {
        String s = "hello, ";
        s = s + name;
        return s;
    }
}

3.3.4.4 servlet升級到第二版

3.3.4.4.1 改寫

​ 可以呼叫模型類,如下:

package com.web

import com.model.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

pulbic class TestServlet extends HttpServlet {
    //重寫doPost方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //新補充的內容:
        String s = request.getParameter("name");
        Test t = new Test();
        String s1 = t.getName(s);
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("haha<br>");
        //獲取表單中的name資訊(根據html標記中的name屬性匹配)
        out.println(s1);
    }
}
3.3.4.4.2 部署

​ 1.編譯servlet

​ 2.將servlet檔案的副本替換到之前的/tomcat/wabapps/專案/WEB-INF/classes/com/web下

​ 3.把模型的class檔案移動到/tomcat/wabapps/專案/WEB-INF/classes/com/model下

​ 4.重啟tomcat

​ 5.開啟瀏覽器瀏覽

3.3.4.5 構建jsp,servlet升級到第三版

​ 可以把表示分派到jsp完成

​ jsp程式碼如下:

<%@ page import="java.util.*" %>
<html>
    <body>
        <h1>這是一個標題</h1>
        <!-- <% %>標記裡有一些標準Java程式碼-->
        <%
        	<!--從這裡從請求物件得到一個styles屬性-->
        	String s = (String)resquest.getAttribute("styles");
        	out.print("<br>" + s);
        %>
    </body>
</html>

​ 然後將jsp檔案儲存在專案目錄/web下

​ 將它的副本移動到tomcat/專案名下

​ servlet程式碼修改為:

package com.web

import com.model.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

pulbic class TestServlet extends HttpServlet {
    //重寫doPost方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //新補充的內容:
        String s = request.getParameter("name");
        Test t = new Test();
        String s1 = t.getName(s);
        
        //response.setContentType("text/html");
        //PrintWriter out = response.getWriter();
        //out.println("haha<br>");
        //獲取表單中的name資訊(根據html標記中的name屬性匹配)
        //out.println(s1);
        
        //為請求物件增加styles屬性,供jsp使用
        request.setAttribute("styles", s1);
        //為jsp例項化一個請求分派器
        RequestDispatcher view = request.getRequestDispatcher("test.jsp");
        //使用請求分派器要求容器準備好jsp,並向jsp傳送請求和響應
        view.forward(request, response);
    }
}

​ 重新部署servlet即可,重啟tomcat檢視

轉載請註明出處!!!

如果有寫的不對或者不全面的地方 可通過主頁的聯絡方式進行指正,謝謝