1.为什么有jsp规范
Servlet技术产生后,在使用时最麻烦的是使用大量的out.print语句来输出页面。这样的形式在系统变更、维护、预览效果时都不能方便快捷的完成任务,于是推出JSP这种技术,用来将Servlet中负责显示的语句抽取出来。
Servlet向客户端浏览器返回一个HTML页面代码如下(大量的out.print语句,太过繁琐):
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
2.什么是JSP
Sun公司制定的一种服务端动态页面技术的组件规范。JSP是一个以“.jsp”为后缀的文件,在该文件中,主要是HTML和少量的java代码。JSP文件会被容器换成一个Servlet类,然后执行。
如下图,就是一个jsp被编译成的class文件,是一个servlet类,系统自动命名为:jsp文件名_jsp.class
转义成Servlet时的规则:成为Servlet中servlce()方法的out.write语句(方法名为_jspService)
3.如何编写JSP
1.写一个以".jsp"为后缀的文件
2.在该文件中可以包含如下内容:
-HTML(css,JavaScript)
-注释
-java代码
-指令
-隐含对象
4.JSP页面中的HTML代码
JSP页面中的HTML包括
-HTML标记
-CSS
-JavaScript
向编写HTML一样编写即可
作用:控制页面在浏览器中的显示效果
转义成Servlet时的规则:成为Servlet中servlce()方法的out.write语句
5.JSP页面中的注释
- 显式注释(HTML注释):直接使用HTML风格的注释:<!- - 注释内容- ->
- 隐式注释:直接使用JAVA的注释://、/*……*/
- JSP特有的注释:<%- - 注释内容- -%>
JSP自己的注释和HTML注释的区别:JSP自己的注释可以阻止java代码的执行,JSP特有的注释在百分号后面有2个横线,注意区分JSP的小脚本。
HTML注释中如果包含java代码,这些java代码也会被执行(展示如下图)
6.JSP页面中的Java 代码
包含以下三种
- JSP表达式
- JSP小脚本
- JSP声明
编写位置:页面任意位置
作用:控制页面中可变内容的产生
6.1JSP表达式
语法规则:<%= .....%>
合法内容:变量,变量加运算符组成的表达式,有返回值的方法
转义成Servlet时的规则:在service()方法中用out.print语句输出该变量、表达式方法的值
示例如下:
<p>The square root of 5 is<%=Math.sqrt(5)%></p>
//转换成如下代码
out.write("<p>The square root of 5 is");
out.write(Math.sqrt(5));
out.write("</p>");
7.JSP小脚本
语法规则:<% ... %>
合法内容:能够写在方法里的Java代码片段都可以作为小脚本
转义成Servlet时的规则:原封不动成为Servlet类的service()方法里面的一段代码
<%
String name = request.getParameter("name");
if (name!=null&&!name.equals("")){
%>
<p>your name is<%= name%></p>
<%
}
%>
//转换成如下代码插入到service()方法中
String name = request.getParameter("name");
if (name!=null&&!name.equals("")){
out.write("<p>your name is");
out.print(name);
out.write("</p>");
}
8.JSP声明
语法规则:<%! ... %>
合法内容:成员属性和成员方法的声明
转义为Servlet时的规则:成为JSP页面转译成的Servlet类中成员属性或成员方法
9.JSP页面中的指令
语法规则:<%@指令名 属性=值 %>
常用指令:
-page指令
-include指令
-taglib指令
作用:控制JSP在转译成Servlet类时生成的内容
10.page 指令
作用:用于导包、设置页面属性
<%--导包--%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%--设置response.setContentType()方法的参数值--%>
<%@ page ContentType="image/gif" %>
<%--设置容器读取该文件时的编码--%>
<%@ page pageEncoding="utf-8" %>
11.include指令
作用:在JSP页面转换成Servlet时,能够将其他文件包含进来。可以包含JSP文件,也可以是静态的HTML文件。
通过该语句能方便的在每个JSP页面中包含导航栏、版权声明、logo等。
语法:<%@include file ="url" %>
例如:
<%@ include file = "head.html" %>
12.如何将静态页面转换为动态页面
- 拷贝静态页面代码置JSP页面
- 添加page指令pageEncoding和contentType
- 修改页面内容与目标页面一致
- 将需要动态生成的内容删除,替换为java代码