JSP技术
在动态网页开发中,经常需要动态生成HTML内容。为了克服Servlet的这些缺点,Oracle公司推出了JSP技术
JSP技术全名是JAVA Server pages,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码是与JAVA代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。
JSP技术的特点:跨平台、业务代码相分离、组件重用、预编译。
一、JSP运行原理
JSP的工作模式是请求/响应模式,客户端首先发出HTTP请求,JSP程序收到请求后进行处理并返回处理结果。
当第一次访问jsp页面时,会向一个servlet容器(tomcat等)发出请求,servlet容器先要把 jsp页面转化为servlet代码(.java),再编译成.class 文件 再进行调用。当再次访问jsp页面时 跳过翻译和编译的过程 直接调用
二.JSP基本语法
JSP声明语句用于生命变量和方法,它以"<%!“开始,以”%>"结束,语法如下:
<%! 定义的变量或方法 %>
在chapter06项目的WebContent目录下创建一个名称为example01.jsp的文件,代码如下:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <%! int a=1 , b=2; %> <%! public String print(){ String str = "itcast"; return str; } %> <body> <% out.println(a+b); %> <br /> <% out.println(print()); %> </body> </html>
运行结果:
三.JSP注释
同其他各种编程语言一样,JSP也有自己的注释方式语法如下:
<%-- --%>
在chapter06项目的WebContent下创建名称为example02的JSP页面:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>jsp注释</title> </head> <body> <!-- 这是个HTML注释 --> <%-- 这是个JSP注释 --%> </body> </html>
四.JSP指令
page指令:在JSP页面中,经常需要对页面的某些特性进行描述:
<%@ page 属性名1 = "属性值1" 属性名2= " 属性值2 "......%>
include指令:在实际开发时,有时需要在JSP页面静态包含一个文件,例如HTML文件,文本文件等
<%@ include file="被包含的文件地址"%>
在chapter06项目的WebContent目录下创建两个JSP页面文件date.jsp和include.jsp,在include.jsp文件中使用include指令将date.jsp文件包含其中:
date.jsp:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <body> <% out.println(new java.util.Date().toLocaleString()); %> </body> </html>
include.jsp:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <body> 欢迎你建玮,现在的时间是: <%@ include file = "date.jsp" %> </body> </html>
运行结果:
5.JSP隐式对象
out对象:在JSP页面中,经常需要向客户端发送文本内容,这时需要使用out对象来实现;
在chapter06项目的WebContent目录下创建一个名称为out的JSP文件:
out.jsp:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <body> <% out.println("first line<br />"); response.getWriter().println("second line<br />"); %> </body> </html>
运行结果:
pageContext对象:使用该对象可以访问其他8个隐式对象;
在chapter06项目的WebContent目录下创建一个名称为pageContext.jsp;
pageContext.jsp:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <body> <% //获取request对象 HttpServletRequest req =(HttpServletRequest) pageContext.getRequest(); //设置page范围内属性 pageContext.setAttribute("str", "Java",pageContext.PAGE_SCOPE); //设置request 范围内属性 req.setAttribute("str", "Java Web"); //获取page范围属性 String str1 = (String)pageContext.getAttribute("str",pageContext.PAGE_SCOPE); //获取的request 范围属性 String str2 = (String)pageContext.getAttribute("str",pageContext.REQUEST_SCOPE); %> <%="paga范围:"+str1 %><br /> <%="request范围: "+str2 %><br /> </body> </html>
运行结果: