標籤:java servlet jsp
一、JSP就是一個在伺服器端的設計面板
百科說:它是在傳統的網頁HTML(標準通用標記語言 (SGML)的子集)檔案(*.htm,*.html)中插入Java程式段(Scriptlet)和JSP標記(tag),從而形成JSP檔案,尾碼名為(*.jsp)。他實現了Html文法中的java擴張(以 <%, %>形式)。JSP與Servlet一樣,是在伺服器端執行的
我說:jsp不是程式設計語言。JSP的三個英文是java server pages的縮寫!
JSP是我們進行WEB開發的頁面工具。頁面開發,少不了圖形,圖形開發的時候有一個設計面板,你只需要將一個一個的控制項拖進這個設計面板內進行直觀設計,而不用自己寫代碼 ,如textbox,lable等等,jsp就相當於這個設計面板,JSP學習對比我們VB學習的可視化環境中的表單,控制項的設計。JSP會自動識別拖進來的控制項並將你的設計、布局轉化成java代碼,這樣就使得程式員可以專註於頁面的設計而省的去寫那些重複、繁瑣的代碼了,大大提高了開發效率。
二、、JSP 是Servlet的一個分支
在介紹JSP之前,先回顧一下Servlet。簡單地理解Servlet,它就是控制從WEB前端到資料庫背景一個管理器,它主要是做商務邏輯。其實你知道嗎?Servlet還可以控制WEB用戶端的“輸出”。這裡的輸出指的是和HTML+CSS一樣的“頁面輸出效果。”
看一下如下樣本:查詢學生的資訊
按照上篇部落格中servlet的邏輯來進行,首先需要一個WEB,然後一個Servlet,最後一個Dbmanager(這裡只示範到Servlet,所以不做資料庫連接)
<!--WEB中HTML代碼--><html> <head></head> <body> <h1> 根據出生日期段查詢 </h1> <form action="queryStudentServlet"> 出生日期 : <input type="text" name="beginDate"></input> 至 <input type="text" name="endDate"></input> <input type="submit" value="查詢學生"></input> </form> </body></html>
<!--Servlet中商務邏輯-->public class StudentServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);} public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String sBeginDate = request.getParameter("beginDate");String sEndDate = request.getParameter("endDate");Date beginDate = new Date();Date endDate = new Date();try {beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);}catch(Exception e) {e.printStackTrace(); } //System.out.println("sBeginDate=" + sBeginDate);//System.out.println("sEndDate=" + sEndDate);StudentManager studentManager = new StudentManagerImpl();List<Student> studentList = studentManager.findStudentList(beginDate, endDate);}
問題:在Servlet中查出了我們要查詢的資料,接下來需要顯示。怎麼顯示呢?
1、在WEB端寫好“顯示形式”,或表格,或者文本,或list。
2、在Servlet中寫好“顯示形式”。讓我們來看看Servlet中控制HTML的顯示
StringBuffer sbHtml = new StringBuffer();sbHtml.append("<html>");sbHtml.append("\n");sbHtml.append("<head>");sbHtml.append("\n");sbHtml.append("<title>學生查詢</title>");sbHtml.append("\n");sbHtml.append("table");sbHtml.append("\n");sbHtml.append("td ");sbHtml.append("\n");sbHtml.append("</head>");sbHtml.append("\n");sbHtml.append("<body>");sbHtml.append("\n");sbHtml.append("<h1>");sbHtml.append("\n");sbHtml.append("出生日期:" + sBeginDate + " 至 " + sEndDate + " 學生列表");sbHtml.append("\n");sbHtml.append("</h1>");sbHtml.append("\n");sbHtml.append("<hr>");sbHtml.append("\n");sbHtml.append("<table border=1>");sbHtml.append("\n");sbHtml.append("<tr>");sbHtml.append("\n");sbHtml.append("<td>學生代碼</td>");sbHtml.append("\n");sbHtml.append("<td>姓名</td>");sbHtml.append("\n");sbHtml.append("<td>性別</td>");sbHtml.append("\n");sbHtml.append("<td>出生日期</td>");sbHtml.append("\n");sbHtml.append("<td>聯絡電話</td>");sbHtml.append("\n");sbHtml.append("<td>家庭住址</td>");sbHtml.append("\n");sbHtml.append("<td>班級名稱</td>");sbHtml.append("\n");sbHtml.append("<td>年齡</td>");sbHtml.append("\n");sbHtml.append("</tr>");sbHtml.append("\n");for (Iterator<Student> iter=studentList.iterator(); iter.hasNext();) {Student student = iter.next();sbHtml.append("<tr>");sbHtml.append("<td>");sbHtml.append(student.getStudentId());sbHtml.append("</td>");sbHtml.append("<td>");sbHtml.append(student.getStudentName());sbHtml.append("</td>");sbHtml.append("<td>");sbHtml.append(student.getSex());sbHtml.append("</td>");sbHtml.append("<td>");sbHtml.append(new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthday()));sbHtml.append("</td>");sbHtml.append("<td>");sbHtml.append(student.getContactTel());sbHtml.append("</td>");sbHtml.append("<td>");sbHtml.append(student.getAddress());sbHtml.append("</td>");sbHtml.append("<td>");sbHtml.append(student.getClasses().getClassesName());sbHtml.append("</td>");sbHtml.append("<td>");long b = 1000L*60L*60L*24L*365L;long a = System.currentTimeMillis() - student.getBirthday().getTime();sbHtml.append(a/b);sbHtml.append("</td>");sbHtml.append("</tr>");}sbHtml.append("</table>");sbHtml.append("</body>");sbHtml.append("</html>");response.setContentType("text/html;charset=GBK");response.getWriter().println(sbHtml.toString());}
那麼這兩種形式如何抉擇呢?“商務邏輯”。我們需要分析資料。這些資料是什嗎?
是回傳資料。做過ASP.NET的朋友肯定會瞭解“html控制項”和“WEB控制項”的區別,在ASP.NET中我們有asp頁面通過WEB控制項來處理回傳資料。在這個基礎上,我們的JAVA 也是同樣借鑒了WEB控制項的優勢,使用java 編寫的“用於頁面顯示”的servlet。把這種特俗用途的servlet叫做JSP。把一個Servlet中的代碼分成“商務邏輯”+“頁面資料顯示”。商務邏輯就是一個標準的Servlet,“頁面資料顯示”這個servlet就是一個JSP。所以說JSP是Servlet的一部分。 這樣們就可以在JSP中寫“回傳資料”的顯示了。
三、JSP 和HTML 的區別
HTML(Hypertext Markup Language)文本標記語言,它是靜態頁面,和JavaScript一樣解釋性語言,為什麼說是解釋性 語言呢?因為,只要你有一個瀏覽器那麼它就可以正常顯示出來,而不需要指定的編譯工具,只需在TXT文檔中寫上HTML標記就OK。
JSP(Java Server Page)看這個意思就知道是Java服務端的頁面,所以它是動態,它是需要經過JDK編譯後把內容發給用戶端去顯示,我們都知道,Java檔案編譯後會產生一個class檔案,最終執行的就是這個class檔案,JSP也一樣,它也要編譯成class檔案!JSP不止要編譯,它還得要轉譯,首先把JSP轉譯成一個Servlet檔案,然後在編譯成class檔案。當使用者訪問JSP時就執行了class檔案。
但是值得提醒的是,JSP最終有伺服器端發送到WEB用戶端,都是也HTML得形式顯示的。
下面是通過尋找得出的幾點:
1.最簡單的區別就是,HTML能直接開啟,jsp只能發布到Tomact等伺服器上才能開啟。
2.定義上HTML頁面是靜態頁面可以直接運行,JSP頁面是動態網頁它運行時需要轉換成servlet。
3.他們的表頭不同,這個是JSP的頭“<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>”在表頭中有編碼格式和倒入包等。
4.在jsp中用<% %>就可以寫Java代碼了,而html沒有<%%>。
這裡還要提一下的是:WEB控制項和HTML 控制項,在使用JSP編寫用戶端的時候,要合理運用HTML控制項和WEB控制項,提高系統的效能。