JSP
程序员文章站
2022-06-01 21:10:35
...
JSP
1、简介
-
JSP(Java Server Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。
-
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。
-
JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
2、JSP在运行时转换的Servlet类
- index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
- index_jsp.java
- 我的电脑此文件的路径:
C:\Users\73256\.IntelliJIdea2018.2\system\tomcat\Unnamed_javaweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
/*---------------------------------此处部分代码省略-----------------------------------*/
//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//JSPService
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
return;
}
}
final javax.servlet.jsp.PageContext pageContext;//页面上下文
javax.servlet.http.HttpSession session = null;//session
final javax.servlet.ServletContext application;//applicationContext
final javax.servlet.ServletConfig config;//config
javax.servlet.jsp.JspWriter out = null;//out
final java.lang.Object page = this;//page:当前页面
javax.servlet.jsp.JspWriter _jspx_out = null;//请求
javax.servlet.jsp.PageContext _jspx_page_context = null;//响应
try {
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
//HTML代码,会被转换为下面的形式。
out.write("\n");
out.write("<html>\n");
out.write("<body>\n");
out.write("<h2>Hello World!</h2>\n");
//Java代码原封不动的转换
System.out.println("Hello World!");
out.write("</body>\n");
out.write("</html>\n");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
-
9大内置对象:可在JSP脚本中直接调用
- pageContext:可以取得任何范围的参数,保存的数据只在一个页面中有效
- request:客户端的请求,作用域为一次请求
- response: 响应
- session:存数据,保存的数据只在一次会话中有效,即从打开到关闭浏览器
- application:保存的数据在服务器中有效,从打开到关闭服务器
- config:主要作用是取得服务器的配置信息
- out :用于在Web浏览器内输出信息
- page :代表JSP本身
- exception:显示异常信息
3、JSP基础语法
3.1、JSP表达式
- 作用:用来将程序的结果,输出到客户端
- **格式:
<%= 变量或者表达式%>**
<%= "你好!"%>
3.2、JSP脚本片段
-
作用:写Java代码
-
格式:
<% Java代码%>
<%
int sum = 0;
for (int i = 0; i <=100 ; i++) {
sum+=i;
}
//将sum打印到页面
out.println("<h1>Sum="+sum+"</h1>");
%>
- 脚本片段之间也可嵌入HTML元素
<%
for (int i = 0; i < 5 ; i++) {
%>
<h1>Hello World!--=<%=i%></h1>
<%
}
%>
-
测试访问
3.3、JSP声明
-
作用:JSP声明中的代码会被编译到JSP生成的Java类中,即可以使用JSP声明定义其Java类的成员变量、方法、静态代码块等。
-
格式:
<%! Java代码 %>
<%!
static {
System.out.println("<h1>static代码块执行了!</h1>");
}
private String name="JSP";
public String getName(){
return "<span style=\"font-size: 30px\">"+name+"</span>";
}
%>
<%
for (int i = 0; i < 5; i++) {
out.write(getName());
%>
<span style="color: red;font-size: 30px">--=<%=i%></span><br>
<%
}
%>
-
测试访问:
3.4、JSP指令
指令 | 描述 |
---|---|
<%@ page … %> | 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入标签库的定义 |
- 合并网页
<%aaa@qq.com 合并三个页面,形成一个页面--%>
<%@include file="common/header.jsp"%>
<h1>网页主体</h1>
<%@include file="common/footer.jsp"%>
-
index_jsp.java中的代码
3.5、JSP标签
语法 | 描述 |
---|---|
jsp:include | 用于在当前页面中包含静态或动态资源 |
jsp:useBean | 寻找和初始化一个JavaBean组件 |
jsp:setProperty | 设置 JavaBean组件的值 |
jsp:getProperty | 将 JavaBean组件的值插入到 output中 |
jsp:forward | 从一个JSP文件向另一个文件传递一个包含用户请求的request对象 |
jsp:plugin | 用于在生成的HTML页面中包含Applet和JavaBean对象 |
jsp:element | 动态创建一个XML元素 |
jsp:attribute | 定义动态创建的XML元素的属性 |
jsp:body | 定义动态创建的XML元素的主体 |
jsp:text | 用于封装模板数据 |
- 拼接页面
<jsp:include page="/common/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/common/footer.jsp"/>
-
index_jsp.java中的代码
-
测试访问
3.6、EL表达式
-
格式:
${}
-
作用:获取数据、执行运算、获取web开发常用对象
<h1>${"Hello World!"}</h1>