一、简介
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计。是在静态网页html中嵌入java代码段形成的文件,JSP是一种运行在服务器端的脚本语言,是一种动态网页技术(网页中的数据可以修改)。
它是在传统的HTML文件中加入Java程序和JSP标记后构成的,具有JAVA和Web的双重特性。
1、在没有学习JSP技术之前,要想实现动态网页,只能用Servlet,将一句一句的HTML语句嵌入到Servlet中,工作量比较大:
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        login log= (login) request.getSession().getAttribute("login");
        int num=(int)this.getServletContext().getAttribute("contextNum");
        //System.out.println("main:"+num);
        response.setContentType("text/html;charset=utf-8");//设置浏览器编码格式
        response.getWriter().write("<html>");
        response.getWriter().write("<head>");
        response.getWriter().write("<title>");
        response.getWriter().write("Login");
        response.getWriter().write("</title>");
        response.getWriter().write("</head>");
        response.getWriter().write("<body bgcolor=\"aqua\">");
        response.getWriter().write("<center>");
        response.getWriter().write("<h3>");
        response.getWriter().write("欢迎你"+log.getAccount());
        response.getWriter().write("<br>");
        response.getWriter().write("浏览量:"+num);
        response.getWriter().write("</h3>");
        response.getWriter().write("<form action='show' method='get'>");
        response.getWriter().write("<input type='submit' value='查看个人信息'>");
        response.getWriter().write("</form>");
        response.getWriter().write("</center>");
        response.getWriter().write("</body>");
        response.getWriter().write("</html>");
    }
2、我的第一个JSP程序:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>jsp</title>
  </head>
  <body  bgcolor="aqua">
<h3>
  <%
    out.println("Today is the Seventieth Anniversary of the founding of the People's Republic of China.");
  %>
</h3>
  </body>
</html>

在嵌入JAVA代码的时候只需添加<% %>即可。
3、servlet更适合逻辑处理,jsp更适合响应结果
一般情况下,servlet从数据库获得的数据会以请求转发的形式传递到jsp页面(页面有显示的功能),最终以一定的形式呈现给用户。当然在不传递数据的时候,servlet也可以重定向到一个jsp页面。
二、脚本和注释
1、jsp脚本
(1)<% java代码 %>
<h3>
  <%
    out.println("Today is the Seventieth Anniversary of the founding of the People's Republic of China.");
  %>
</h3>
在页面输出:

<h3>
  <%
    int a=9,b=9;
    System.out.println(a*b);
  %>
</h3>
在控制台输出运算结果。
会被翻译到service方法内部。
翻译后为:
 int a=9,b=9;
    System.out.println(a*b);
(2)<%=java变量或表达式>
表达式必须是合法的java表达式并且要有返回值
<h3>
  <%=123%>
</h3>

  <%int a=9;%>
  <%=(a*a)%>

会被翻译到service方法内部的out.println();
即:输出到页面。
(3)<%! java代码 %>
  <%! String string="Today is the Seventieth Anniversary of the founding of the People's Republic of China.";%>
  <%=string%>

加! 号后会被翻译到成员的位置。
2、注释:
(1)隐藏注释:<%-- --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>myjsp</title>
</head>
<body>
    This my Jsp.
<%
    int i=12;
    //这是一个单行注释
    /*
这是一个多行注释
     */
%>
<%--
  这是一个JSP注释
--%>
<%=i%>
</body>
</html>
其中<%-- --%>被称为隐藏注释,在方便才重新设计人员阅读程序的同时,又保证了程序的安全性,因为在客户端是看不到注释内容的。
(2)HTML注释:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>myjsp</title>
</head>
<body>
    This my Jsp.
<%
    int i=12;
    //这是一个单行注释
    /*
这是一个多行注释
     */
%>
<%--
  这是一个JSP注释
--%>
<%=i%>
</body>
</html>

HTML注释可以在浏览器查看
(3)JAVA注释://和/* */写在<% %>内部:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>myjsp</title>
</head>
<body>
    This my Jsp.
<%
    int i=12;
    //这是一个单行注释
    /*
这是一个多行注释
     */
%>
<%=i%>
</body>
</html>
用户看不到注释的内容
三、运行原理
1、JSP的运行流程

(1)第一次请求一个JSP页面时,需要将JSP文件转换为JAVA的Servlet文件并编译为class文件,在以后的请求中如果页面没有经过任何改动,那么可以直接调用class文件,这就是第一次请求JSP页面会有延迟的原因。
(2)JSP页面是运行在客户端还是服务器
JSP是一种运行在服务器的脚本语言(servlet也是),不要以为在访问jsp页面的时候要输入jsp页面的名字就以为它是运行在客户端。在客户端发出请求后jsp页面会在服务器内被转化为java代码,并编译为class文件,最终返回html文件给客户端,浏览器解析后呈现给用户。
2、JSP与Servlet:
JSP本质上是实现了javax.servlet.jsp.HttpjspPage接口,或者javax.servlet.jsp.JspPage的JAVA类。间接实现了Servlet接口。因此,JSP的本质就是Servlet。
3、JSP与Servlet的异同点:
(1)相同点:
JSP本质上是Servlet(JSP不能被虚拟机执行,Servlet可以),JSP是在Servlet基础上发展起来的。
(2)不同点:
JSP擅长页面显示,Servlet擅长于逻辑控制。