JSP基础语法
关于JSP基础语法主要介绍下面5个内容:
- Jsp简介
- 常用动态网站开发技术
- Jsp页面元素构成
- Jsp的声明周期
- 阶段项目
1、JSP简介
JSP全名是Java Server Pages,其根本是一个简化的Servlet设计,他实现了在Java当中使用HTML标签。Jsp是一种动态网页技术标准也是JAVAEE的标准。JSP与Servlet一样,是在服务器端执行的。
2、常见动态网站开发技术对比
- Jsp: Java平台,安全性高,适合开发大型的,企业级别的Web应用程序。
- Asp.net: .Net平台,简单易学。但是安全性以及跨平台性差。
- Php: 简单,高效,成本低开发周期短,特别适合中小企业的Web应用开发。(LAMP: Linux+Apache+MySQL+PHP)
3、Jsp页面元素构成
3.1 Jsp指令
- 1、page指令
通常位于jsp页面的顶端,同一个页面可以有很多个page指令。
page指令的语法:
%@ page 属性1="属性值" 属性2="属性值1,属性值2"... 属性n="属性值n"%>
下面是最常用的属性
属性 | 描述 | 默认值 |
---|---|---|
language | 指定JSP页面使用的脚本语言 | Java |
import | 通过该属性来引用脚本语言中使用到的类文件 | 无 |
contentType | 用来指定JSP页面所采用的编码方式 | text/html,ISO-8859-1 |
contentType="text/html; charset=utf-8"
- 2、include指令(JSP 包含指令)
将一个外部文件嵌入到当前的JSP文件中,同时解析这个页面 中的JSP语句。这是一种非常常用的组织页面的方式。例子,下面是一个 nav.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <navclass="navbar navbar-inverse navbar-fixed-top"> ... </nav>
可以将该 JSP 文件导入到你想可以显示它的页面中,代码如下:
<%@ include file="nav.jsp" %>
这些公共的 .jsp 文件都会放在一个固定的文件夹中。
同样的道理,head 标签中de各类静态资源定义、底部页面版权声明信息也可以抽取到公共文件中,那么对于任意的一个页面,它的结构是固定的:
<html> <head> <%@ include file="common/head.jsp" %> </head> <body> <%@ include file="common/nav.jsp" %> <%@ include file="common/footer.jsp" %> </body> </html>
- 以上是静态的引入页面,可以动态的引入:使用 jsp:include 动作
<jsp:include page="common/head.jsp" />
和包含指令不同的是,jsp:include 在每次请求当前 JSP 文件的时候,才将目标 JSP 文件包含进来(包含指令则是在编译的时候),再看下一个例子:
<jsp:includepage="file_name"> <jsp:paramname="parameter_name"value="parameter_value"/> </jsp:include>
我们可以通过 jsp:include ,将某个参数传给目标 JSP 文件。在目标 JSP 文件中,parameter_name 变量就可以像上下文中的变量一样被使用: ${parameter_name}
- 3、taglib指令
使用标签库定义新的自定义标签,在JSP页面中启动定制的行为。
3.2 Jsp注释
在JSP中用到的注释一共有三种类型:
-
HTML的注释:
// 客户端可见(但是需要点击查看源文件) -
JSP注释:
<%– jsp注释 –%> // 客户端不可见 -
可在JSP脚本中使用的脚本注释:
// 单行注释
/**/ 多行注释
何为脚本,在<% %> 中的可被认为是脚本(也是客户端不可见的)
3.3 Jsp脚本
Jsp脚本就是在JSP页面中执行的java代码。
语法:
<% Java代码 %>
例如:
3.4 Jsp声明
Jsp声明就是指在JSP页面中定义变量或者方法。
语法:
<%! Java代码 %>
举例:
<%! String s ="张三";// 声明了一个字符串变量 int add(int x,int y)// 声明了一个返回整型的函数,实现了两个整数的求和 { return x+y; } %>
以后可以对这个声明的变量和函数进行调用。
3.5 Jsp表达式
就是在JSP页面中执行的表达式。
语法:
<%= 表达式 %>
// 注意: 表达式不以分号结束
举例:
<%! String s ="张三";// 声明了一个字符串变量 int add(int x,int y)// 声明了一个返回整型的函数,实现了两个整数的求和 { return x+y; } %> <br> 你好,<%=s %><br> x+y=<%=add(10,5) %><br>
4、JSP页面生命周期
jspService()就是用来处理用户请求。
jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步问题,由于该Servlet始终驻于内存,所以响应非常快。
下面是一个具体的实例,来了解JSP生命周期。
首先建立一个WEB PROJECT,项目的首页就是index.jsp 先将此项目部署到tomcat上。同时记忆,在tomcat下的work文件夹保存了比如servlet程序编译的.class文件都放在了这个文件夹中。这是你去查看,你是不会发现该.jsp文件被变为字节码文件的,为什么呢?因为你还没有访问它,所以jsp引擎不会将其转换成servlet,并生成字节码文件。
做一个项目,使页面返回一个九九乘法表,首先创建一个新的.jsp页面:
<%@ page language="java"import="java.util.*" contentType="text/html; charset=utf-8"%> <% String path = request.getContextPath(); String basePath = request.getSchema()+"://"+ request.getServerName()+":"+ request.getServerPort()+ path +"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'exercise.jsp' starting page</title> <meta http-equiv="param" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="style.css"> --> </head> <body> <%! // 返回九九乘法表对应的HTML代码,通过表达式来调用,在页面上显示 String printMultiTable() { String s =""; for(int i=1;i<=9;i++){ for(int j =1; j <= i; j++) s += i +"*"+j +"="+(i*j)+"  "; s +="<br>";// 追加换行标签 } return s; } // 使用脚本的方式.JSP内置out对象 void printMultiTable2(JspWriter out)throwsException{ for(int i=1;i<=9;i++){ for(int j =1; j <= i; j++) out.println(i +"*"+j +"="+(i*j)+"  "); out.println("<br>");// 追加换行标签 } %> <h1>九九乘法表</h1> <hr> <%=printMultiTable()%> <br> <% printMultiTable2(out);%><!--脚本以;号结束--> </body> </html>