1 JSP简介
1.1 JSP定义
JSP,全名Java Server Pages,其根本是一个简化的Servlet设计,它实现了在Java当中使用HTML标签。
JSP是一种动态网页技术标准,也是Java EE的标准。
JAP与Servlet一样,是在服务器端执行的。
1.2 常见动态网站开发技术对比
- JSP:Java平台,安全性高,适合开发大型的,企业级的Web应用程序。
- Ssp.net:.Net平台,简单易学,但是安全性以及跨平台性差。
- PHP:简单、高效,成本低且开发周期短,特别适合中小型企业的Web应用开发。(LAMP:Linux+Apche+MySQL+PHP)
2 JSP页面元素构成
JSP页面由指令、表达式、小脚本、声明、注释、静态内容等组成。
其中,<% %>、<%! %>、<%= %>属于Scriptlet(脚本小程序)。
2.1 指令元素
- page指令:通常位于JSP页面的顶端,同一个页面可以有多个PAGE指令。
- include指令:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。
- taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
page指令语句:
1 <%@ page 属性1="属性值" 属性2="属性值" ... 属性n="属性值"%> 2 //language属性:指定JSP页面时用的脚本语言,默认值为java,如language="java" 3 //import属性:通过该属性来引用脚本语言中使用到的类文件,默认值为无,如import="java.util.*" 4 //contentType属性:用来指定JSP页面所采用的编码方式,默认值为text/html,ISO-8859-1 5 //一般是用中文就用contentType="text/html; charset=utf-8" 6 //综上,一般JSP页面的第一行就是: 7 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
实例:
1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 2 //新创建的web项目,jsp文件中默认为以上属性,当前“ISO-8859-1”不能在页面输入中文,否则会报错 3 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 4 //建议改为以上指令,可以显示中文
2.2 注释
1 //HTML注释//客户端可见 2 <!-- HTML注释 -->
1 //JSP注释//客户端不可见 2 <%-- HTML注释 --%>
1 //JSP脚本注释//客户端不可见 2 //单行注释 3 /**/多行注释
实例:
1 <!-- HTML注释 --> 2 <%--JSP注释 --%> 3 <% 4 //java脚本注释 5 /* 6 多行注释 7 */ 8 %>
运行程序(记得要先发布到Tomcat服务器,再运行),查看源代码,如下:
(只出现了HTML的可见注释)
2.3 JSP脚本
作用:在JSP页面中执行的Java代码,可以定义局部变量、编写语句等。
1 <% Java代码 %>
但在程序中过多出现<% %>会导致代码混乱,所以在新版本的JSP中提供了一种scriptlet标签,使用此便签可以完成与<% %>相同的功能。
1 <jsp:scriptlet> 2 Java代码 3 </jsp:scriptlet>
实例:
1 <body> 2 <h1>祁俊辉</h1> 3 <hr> 4 <% 5 out.println("我是祁俊辉"); 6 %> 7 </body>
运行结果:
(在HTML中嵌入JAVA语句)
2.4 JSP声明
作用:在JSP页面中定义全局变量、方法、类,但要注意,不能出现任何的其他语句。
1 <%! Java代码 %>
实例:
1 <body> 2 <%! 3 String s="我是祁俊辉";//声明一个字符串对象 4 int add(int x,int y){//声明一个整型求和 5 return x+y; 6 } 7 %> 8 <h1>祁俊辉</h1> 9 <hr> 10 <% 11 out.println("我是祁俊辉"); 12 out.println(add(4,5)); 13 %> 14 </body>
运行结果:
2.5 JSP表达式
作用:在JSP页面中执行的表达式,即输出一个变量或一个具体内容。
1 <%= 表达式 %> //注意:表达是不以分号结束
实例:
1 <body> 2 <%! 3 String s="我是祁俊辉";//声明一个字符串对象 4 int add(int x,int y){//声明一个整型求和 5 return x+y; 6 } 7 %> 8 <h1>祁俊辉</h1> 9 <hr> 10 你好,<%=s %><br> 11 x+y=<%=add(10,5) %><br> 12 </body>
运行结果:
注:现在有两种输出方式:out.println()和<%= %>,但在实际开发中,为使HTML代码和Java代码相分离,所以尽量使用<%=%>。
3 JSP页面的生命周期
jspService()方法被调用出来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步问题,由于该Servlet是种驻于内存,所以想赢是非常快的。
4 实例:打印九九乘法表
1 <body> 2 <h1>九九乘法表</h1><br> 3 <%! 4 //使用Java普通方法实现打印九九乘法表 5 String printMultiTable(){ 6 String s=""; 7 for(int i=1;i<9;i++){ 8 for(int j=1;j<=i;j++){ 9 s+=i+"*"+j+"="+(i*j)+" ";//HTML空格代码为“ ” 10 } 11 s+="<br>";//追加换行 12 } 13 return s; 14 } 15 16 //JSP内置out对象,使用脚本方式调用,打印九九乘法表 17 void printMultiTable2(JspWriter out) throws Exception{ 18 for(int i=1;i<9;i++){ 19 for(int j=1;j<=i;j++){ 20 out.println(i+"*"+j+"="+(i*j)+" "); 21 } 22 out.println("<br>");//追加换行 23 } 24 } 25 %> 26 <hr> 27 <%=printMultiTable() %> 28 <br> 29 <% printMultiTable2(out); %> 30 </body>
运行结果: