什么是jsp?
目录一、JSP的介绍二、JSP的本质三、JSP的常用脚本1.声明脚本2.表达式脚本3. 代码脚本4、JSP九大内置对象5、jsp四大域对象一、JSP的介绍JSP的全称是Java Server Pages,即Java的服务器页面JSP的主要作用是代替Servlet程序回传HTML页面的数据二、JSP的本质JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览
目录
一、JSP的介绍
JSP的全称是Java Server Pages,即Java的服务器页面
JSP的主要作用是代替Servlet程序回传HTML页面的数据
二、JSP的本质
JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏输入路径),Tomcat服务器会将此JSP页面翻译成为一个Java源文件,并对其进行编译成为.class字节码文件(一个.java,一个.class),当打开.java文件时发现其中的内容是:
而HttpJspBase类直接继承于HttpServlet类,即JSP翻译出来的Java类间接继承于HttpServlet类,证明JSP页面是一个Servlet程序
三、JSP的常用脚本
1.声明脚本
格式:<%! java代码 %>
作用:可以写java代码
特点:不会再浏览器的页面中显示出来,仅存在于翻译后的java类中
<%--1.声明类属性--%>
<%!
private String name;
private static Map<String, Object> map;
%>
<%--2.声明类方法--%>
<%!
public int sum() {
return 12;
}
%>
<%--3.声明静态代码块--%>
<%!
static {
map = new HashMap<String, Object>();
map.put("key1", "value1");
}
%>
—————————
对应的翻译后的java源文件:
2.表达式脚本
格式:<%=表达式 %>
作用:在浏览器的JSP页面上输出数据(只有此脚本可以在浏览器的页面上输出数据)
特点:
(1) 所有的表达式脚本都会被翻译到对应的Java类的_jspService()方法中,故表达式脚本可以 直接使用_jspService()方法参数中的对象
(2) 表达式脚本都会被编译后的Java类中的out.print()方法输出到浏览器页面上
(3) 表达式脚本中的表达式不能以分号结束
<%=22 %> <br/>
<%="可以输出字符串" %> <br/>
<%=map %> <br/>
<%--使用_jspService方法中的对象--%>
<%=request.getParameter("username") %>
3. 代码脚本
格式:<% Java语句 %>
作用:在JSP页面中可以编写需要的Java代码
特点:
(1) 代码脚本翻译后都在_jspService方法中,故代码脚本可以直接使用此方法参数中的对象
(2) 可以由多个代码脚本块组合完成一个完整的Java语句
(3) 代码脚本还可以和表达式脚本一起组合使用,在JSP页面上输出数据
<%--1.if语句--%>
<%
int i = 1;
if (i == 1) {
System.out.println("我爱祖国!");
} else {
System.out.println("我很爱祖国!");
}
%> <br/>
<%--2.for循环语句--%>
<%
for (int j = 0 ; j < 3; j++) {
System.out.println("第" + j + "次循环");
}
%> <br/>
<%--3.使用_jspService方法参数中的对象--%>
<%
String username = request.getParameter("username");
System.out.println("username对应的值为:" + username);
%>
4、JSP九大内置对象
request:请求对象
response:响应对象
pageContext:JSP的上下文对象
session:会话对象
application:ServletContext对象
config:ServletConfig对象
out:JSP输出流对象
page:指向当前JSP的对象
exception:异常对象
5、 jsp四大域对象
域对象是指可以像Map一样存取数据的对象,四个域对象功能一样,只是对数据的存取范围不同
代码演示1:四个域对象存取数据的范围的不同(在web目录下创建scope1.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>scope1</title>
</head>
<body>
<h1>scope1.jsp页面</h1>
<%
//向四个域对象中分别保存数据
pageContext.setAttribute("key", "pageContext");
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
%>
<%-- <jsp:forward page=""></jsp:forward>是请求转发标签,
page属性设置请求转发的路径 --%>
<jsp:forward page="/scope2.jsp"></jsp:forward>
</body>
代码演示2:在web目录下创建scope2.jsp
<head>
<title>Title</title>
</head>
<body>
<h1>scope2.jsp页面</h1>
<%-- JSP页面中不加任何标签直接输入的内容被write方法输出在浏览器的页面上 --%>
pageContext域是否有值:<%=pageContext.getAttribute("key")%> <br>
request域是否有值:<%=request.getAttribute("key")%> <br>
session域是否有值:<%=session.getAttribute("key")%> <br>
application域是否有值:<%=application.getAttribute("key")%> <br>
</body>
运行结果1:
运行结果2:
注意:若四个域对象在使用时范围都可满足要求,则使用的优先顺序是(范围从小到大):
pageContext --> request --> session --> application
更多推荐
所有评论(0)