一、JSP简介
1. 概念
JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,它实现了HTML语法中的Java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
JSP主要的作用是 简化HTML书写,同时动态生成页面。
2. JSP和Servlet的区别和联系
-
JSP的本质就是Servlet,JVM只能识别Java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的Java类;
-
JSP更擅长表现于页面显示,Servlet更擅长于逻辑控制。JSP是Servlet的一种简化,使用JSP只需要完成Controller层输出到客户端的内容如何在页面上显示,而Servlet是个完整的Java类,这个类的Service方法用于生成对客户端的响应;
-
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来,而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件;
-
Servlet中没有内置对象,JSP中的内置对象都是必须通过
HttpServletRequest
对象、HttpServletResponse
对象以及HttpServlet
对象得到。
3. JSP工作原理
问题:JSP为什么可以直接编写html代码并且使用Java reqeust对象呢?
-
JSP之所以可以编写html代码,其实本质上也是类似使用Servlet直接输出的,如
out.write("当前时间:<span style='color:red'>"+curTime+"</span>")
; -
JSP能直接使用request对象,是因为在JSP页面编写的Java代码经过编译后都在service方法内部,而在service方法之前就已经声明了request等对象了。
4. 与JS区别
JS是JavaScript 的缩写,是一种基于对象的客户端脚本语言,在服务器端执行,与asp、php是同一个级别的。主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。JS可以直接嵌入到html代码中进行解析执行,能够产生很多动态的效果。
二、JSP基本语法
1. 注释
<!--- 这个是html注释,注释html代码 -->
<%-- 这个是jsp的注释,注释java代码 --%>
2. 脚本片段
格式:<%-- 脚本片段,java代码 --%>
<%-- 脚本片段 --%>
<% for(int j = 0 ; j < 5 ;j++){%>
Hello World!!!<br>
<%}%>
总结:在脚本片段中书写的Java代码,会翻译到java文件中的_jspService
方法中
3. 脚本声明
格式:<%! 脚本声明,Java代码 %>
<%-- 脚本声明 --%>
<%! int i = 0 ;%>
总结:脚本声明书写的java代码会翻译在类的成员位置上
4. 脚本表达式
格式:<%= 表达式 %>
作用:代替response向页面输出内容
<%-- 脚本表达式 --%>
<%= "Hello world!" %>
总结:脚本表达式书写的Java代码,会被翻译到Java文件中的_jspService
方法内,被out.print
输出到页面
5. 企业动态开发实践
JSP本质是Servlet,即JSP和Servlet都可以开发动态资源,处理请求与响应,那以后到底使用JSP还是Servlet?
- JSP:编写html布局代码方便,所以主要负责显示布局动态资源数据
- Servlet:全部都是是Java代码,所主要主要负责产生动态资源数据
JSP与Servlet配合使用,用户请求Servlet负责从数据库获取数据,存储到域对象里面,之后跳转到JSP页面显示布局动态资源数据。
三、JSP EL表达式 / JSTL核心标签库
JSP页面显示动态资源数据,页面会充斥着<% %>
等元素,导致页面代码非常混乱,所以将页面上所有<% %>
等全部使用非常简洁的技术代替,让JSP代码写起来简洁和统一:
-
页面上的脚本表达式
<%= java代码 %>
,使用EL技术代替; -
页面上的脚本代码片段
<% java代码; %>
的循环、条件判断等,使用JSTL技术代替。
四、代码中使用JSP
1.
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
path=WebName (当前站点名称)
;basePath= http://localhost:8080/WebName/
。
这样写的好处在于可以为当前的链接使用绝对路径,如:<a href="<%=basePath%>index.jsp">跳回首页</a>
;在jsp页面还可以使用以下代码:<base href="<%=basePath%>" />
,它指定了当前页面的默认地址为basePath,所以<a href="index.jsp">跳回首页</a>
,即真实的跳转路径为:http://localhost:8080/WebName/index.jsp。