javaWeb學習日記_18:JSP基礎

1. jsp的作用:
  * Servlet:
    > 缺點:不適合設置html響應體,需要大量的response.getWriter().print("<html>")
    > 優點:動態資源,可以編程。
  * html:
    > 缺點:html是靜態頁面,不能包含動態信息
    > 優點:不用爲輸出html標籤而發愁
  * jsp(java server pages):
    > 優點:在原有html的基礎上添加java腳本,構成jsp頁面。

2. jsp和Servlet的分工
  * JSP:
    > 作爲請求發起頁面,例如顯示錶單、超鏈接。
    > 作爲請求結束頁面,例如顯示數據。
  * Servlet:
    > 作爲請求中處理數據的環節。

3. jsp的組成
  * jsp = html + java腳本 + jsp標籤(指令)
  * jsp中無需創建即可使用的對象一共有9個,被稱之爲9大內置對象。例如:request對象、out對象
  * 3種java腳本:
    > <%...%>:java代碼片段(常用),用於定義0~N條Java語句!方法內能寫什麼,它就可以放什麼!
    > <%=...%>:java表達式,用於輸出(常用),用於輸出一條表達式(或變量)的結果。response.getWriter().print( ... );這裏能放什麼,它就可以放什麼!
    > <%!...%>:聲明,用來創建類的成員變量和成員方法(基本不用,但容易被考到),類體中可以放什麼,它就可以放什麼!


    案例:演示jsp與servlet分工!

form.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'form.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
<form action="/day11_1/AServlet" method="post">
	整數1:<input type="text" name="num1"/><br/>
	整數2:<input type="text" name="num2"/><br/>
	<input type="submit" value="提交"/>
</form>
  </body>
</html>

AServlet.java

package cn.itcast.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AServlet extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 獲取參數
		String s1 = request.getParameter("num1");
		String s2 = request.getParameter("num2");
		// 轉換成int類型
		int num1 = Integer.parseInt(s1);
		int num2 = Integer.parseInt(s2);
		
		// 運算
		int sum = num1 + num2;
		
		// 把結果保存到request域中
		request.setAttribute("result", sum);
		
		// 轉換到result.jsp
		request.getRequestDispatcher("/jia/result.jsp").forward(request, response);
	}
}

result.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'result.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
<%
	Integer result = (Integer)request.getAttribute("result");
%>
<%=result %>
  </body>
</html>

 

4. jsp原理(理解)
  * jsp其實是一種特殊的Servlet
    > 當jsp頁面第一次被訪問時,服務器會把jsp編譯成java文件(這個java其實是一個servlet類)
    > 然後再把java編譯成.class
    > 然後創建該類對象
    > 最後調用它的service()方法
    > 第二次請求同一jsp時,直接調用service()方法。
  * 在tomcat的work目錄下可以找到jsp對應的.java源代碼。
  * 查看jsp對應java文件:
    > java腳本
    > html
5. jsp註釋
  * <%-- ... --%>:當服務器把jsp編譯成java文件時已經忽略了註釋部分!
  <!--fdsafdsa-->:html註釋

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