Jsp基础
概念
1.引入度神概念:JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
2.博主俗人理解:由于Jsp的底层是由Servlet来实现的,在Jsp没有诞生之前,我们使用Servlet来进行编写动态Web页面,但要不停的在response里输出各种html格式的字符串,这样做实在是太麻烦,而且代码混乱,不利于维护,于是Sun公司便提供了Jsp来供我们使用,Jsp允许在页面其中执行java代码,并且封装好了九大隐式对象来供我们调用,来实现与浏览器的交互。这样我们便可以把页面代码放到jsp当中,而逻辑代码放在servlet中,代码变得清晰而易于维护了。
以下为一个显示时间的JSP,我们将Java代码嵌入到了JSP当中
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
时间:
š
<%
Date date=new Date();
String time=date.toLocaleString();
out.write(time);
%>
</body>
</html>
- JSP模板元素:JSP中的的html代码,被成为模板元素。
JSP脚本表达式:用于程序将数据输出到浏览器<%=变量或表达式%>
比如我们刚才的时间输出以out的方式将数据打印了出去,其实我们也可以这样输出
时间:
<%
Date date=new Date();
String time=date.toLocaleString();
out.write(time);
%>
<%=time %>
JSP脚本片段:<% XXXXXX %> 其中XXXXXX为java代码,以包含java代码的这种格式被称为脚本片段。
例如:
for(int i=0;i<10;i++)
{
system.out.println("hello,world");
}
- JSP声明:JSP声明的代码会声明到service方法的外面 <%! %>
例如:
<%!
public void print(){
System.out.println("hello,world");
}
%>
- JSP注释:格式:<%– –%>注释代码用
- JSP Page指令:Page指令用于定义JSP的各种属性,如我们刚才时间那段代码中的片段 <%@ %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
其中第一行定义的属性,该JSP的语言为Java,格式为text/html,浏览器应使用UTF-8来解码,本页面编码为UTF-8
第二行的属性为由于你在JSP脚本片段中执行Java代码时,用到了Data类,所以故将此包导入。
JSP 的Page指令中有多种属性,本文不具体介绍,请读者自己私下查看
- JSP Include指令(静态包含):字面意思,包含指令,可以将多个页面包含到一个JSP页面当中,例如
JSP1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
我是JSP1<br/>
JSP2
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
我是JSP2<br/>
JSP3
<%@include file="/demo/JSP1.jsp"%>
我是分隔线<br/>
<%@include file="/demo/JSP2.jsp"%>
输出结果:
我是JSP1
我是分割线
我是JSP2
JSP九大隐式对象
刚才我们说了,JSP的底层是由Servlet实现的,所以每个JSP页面在第一次被访问时,则先会编译成Servlet,在JSP编译成Servlet的同时,SUN公司为我们封装好了九大隐式对象来供我们使用,这也是为什么我们前文可以直接使用out.write(time);来向浏览器写入时间数据时,却不需要声明out对象和实例化out对象,因为这一切都由Sun公司为我们封装和实例化好了。我们只需要使用就行了。
- Request:请求对象
- Response:响应对象
- Session:会话对象
- Application:其实就是ServletContext
- Config:JSP配置对象
- Page:代表JSP本身的this
- Out:输出对象,带缓冲功能的JspWritter
- PageContext: JSP的作用域,可以用来保存数据,也可以可以获得其他八大隐式对象的引用。
- Exception:JSP异常对象
javaee的四大作用域
域用来划分生效范围,例如在Request域中存储了键为name值为张三的数据,一旦该整个请求响应结束,这数据消失,无法再获取。
- ServletContext域:Web应用范围。
- Session域:一个会话范围
- Request域:请求范围内
- Page域:一个JSP页面范围
PageContext获取其他域的数据
<% request.setAttribute("name","zhangsan");
String data=(String)pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);
out.write(data);
String data1=(String)pageContext.findAttribute("name");
out.write(data1);
%>
以上代码中,我们设定从PageContext域获取Request域的name数据,并且data和data1都正确输出,其中两种输出方式,第一种为指定从Requset域中读取键为name的数据,而第二种为自动在四大域中寻找键为name的数据。
JSP标签(Action)
带参数的跳转标签:
<jsp:forward page="/xxx(servlet)">
<jsp:param value="zhangsan" name="name"/>
</jsp:forward>
包含标签(动态包含):
<jsp:include page="/xxx.jsp"></jsp:include>
还有很多JSP标签,请私下自行研究
本人水平有限,如有错误请指正,我会及时修改