1 JSP概述
1、什么是JSP
JSP(Java Server Pages)是JavaWeb服务器得动态资源,它与html页面得作用是相同的,显示数据和读取数据。JSP其实就是一个Servlet。
2、JSP的作用
(1)Servlet
|——缺点:不适合设置html响应体,需要大量的response.getWriter().print(content);
|——优点:动态资源,可以编程。
(2)HTML
|——缺点:HTML是静态页面,不能包含动态信息
|——优点:不用为输出html标签而发愁
(3)JSP
|——优点:在原有HTML页面基础上添加Java脚本,构成JSP页面。
3、JSP和Servlet的分工
(1)JSP
|——作为请求发起发起页面,例如显示表单、超链接。
|——作为请求结束页面,例如显示数据。
(2)Servlet
|——作为请求中处理数据的环节。
4、JSP的组成
(1)JSP = html + Java脚本(代码片段) + JSP动态标签(指令)
(2)jsp中无需创建即可使用的对象一共有9个,被称为9大内置对象,例如:request对象、out对象
(3)3中Java脚本
|——<%...%>
:java代码片段(常用),用于定义0-N条Java语句。当成Java方法来看。
|——<%=...%>
:Java表达式,用于输出(常用),用于输出一条表达式(或变量)的结果。
|——<%!...%>
:声明,用来创建类的成员变量和成员方法(基本不用)。当作类来看。
2 JSP中Java脚本的演示
<!-- 它是jsp指令,也是一种特殊的标签 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- java代码片段 -->
<%
String path = request.getContextPath(); //获取项目名
/*
http://localhost:8080/jsplearn/
*/
String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<!-- 向页面输出basePath,即在每个锚标签 前加basePath,用处不大,知道就可 -->
<base href="<%=basePath %>">
<meta charset="UTF-8">
<title>FOOL!!!</title>
</head>
<body>
HHY fool!!!!<br>
<%
String str = "HHY big FOOL";
%>
<%
out.print(str);
%><br>
<%!
//项目中慎用
String str = "HHY FOLL!!!";
public void fun(){
System.out.print(str);
}
%>
<%=str %><br>
<%=this.str %><br>
<table align="center" border="1" width="60%">
<tr>
<th id="name">姓名</th>
<th id="description">描述</th>
</tr>
<%
for(int i = 0; i < 10; i++){
%>
<tr>
<td name="hhy">HHY</td>
<td name="description">FOOL</td>
</tr>
<%
}
%>
</table>
</body>
</html>
3 JSP和Servlet分工的案例
result.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Result</title>
</head>
<body>
<%
int n = (Integer)request.getAttribute("result");
%>
<%=n %>
</body>
</html>
form.jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form</title>
</head>
<body>
<form action="/jsplearn/AServlet" method="POST">
Integer1: <input type="text" name="int1"><br>
Integer2: <input type="text" name="int2"><br>
<input type="submit" value="submit">
</form>
</body>
</html>
AServlet.java代码
package org.lks.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class AServlet
*/
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String str1 = request.getParameter("int1");
String str2 = request.getParameter("int2");
try {
if(str1.matches("\\d+")) {
int n1 = Integer.parseInt(str1);
request.setAttribute("result", n1);
if(str2.matches("\\d+")) {
int n2 = Integer.parseInt(str2);
int sum = n1 + n2;
request.setAttribute("result", sum);
}else {
throw new NumberFormatException("the second number is not a Integer!");
}
}else {
throw new NumberFormatException("the first number is not a Integer!");
}
}catch(Exception e) {
throw e;
}
request.getRequestDispatcher("/jsp00/result.jsp").forward(request, response);
}
}
4 JSP原理
JSP其实就是一种特殊的Servlet。
(1)当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实就是一个servlet类)。
(2)然后再把java文件编译成.class文件
(3)然后创建该类对象
(4)最后调用它的service()方法
(5)第二次请求同一jsp时,直接调用service()方法。
以下为客户端第一次访问JSP时得过程。
在tomcat的work目录下可以找到jsp对应的.java源代码。
查看java对应得java文件:
(1)java脚本
(2)html
5 JSP中的注释
<%-- ... --%>
:当服务器把jsp编译成java文件时已经忽略了注释部分。