一、简介
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>
<h3> <%int a=9;%> <%=(a*a)%> </h3>
会被翻译到service方法内部的out.println();
即:输出到页面。
(3)<%! java代码 %>
<h3> <%! String string="Today is the Seventieth Anniversary of the founding of the People's Republic of China.";%> <%=string%> </h3>
加! 号后会被翻译到成员的位置。
2、注释:
(1)隐藏注释:<%-- --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>myjsp</title>
</head>
<body>
<h3>
This my Jsp.
</h3>
<%
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>
<!-- HTML注释-->
<h3>
This my Jsp.
</h3>
<%
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>
<h3>
This my Jsp.
</h3>
<%
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擅长于逻辑控制。