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註釋