JSP原理
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet。
JSP最终也会被转换成为一个Java类,JSP本质上就是一个Servlet。
源码分析
//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//JSPService
public void _jspService(.HttpServletRequest request,HttpServletResponse response)
内置对象
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:当前
HttpServletRequest request; //请求
HttpServletResponse response; //响应
输出页面前增加的代码
response.setContentType("text/html"); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this. request, response, null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
_jspx_out = out;
主要:以上的对象可以在JSP页面中直接使用
JSP执行流程:点击查看
在JSP页面中:只要是JAVA代码就会原封不动的输出;
如果是HTML代码,就会转换为:
out.write("<html>\r\n");
输出到前端。
JSP基础语法
jsp表达式及注释
格式:
<%= 变量或者表达式%>
<%--JSP注释内容--%>
<!--HTML注释-->
JSP和HTML注释区别:JSP的注释不会在客户端显示,HTML的会显示在客户端
用法:
<%--JSP表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式%>
--%>
<%= new java.util.Date()%>
jsp脚本片段
格式:
<%
//代码
%>
用法:
<%--jsp脚本片段--%>
<%
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
out.println("<h1>Sum=" + sum + "</h1>");
%>
其他写法
<%
int x = 666;
out.println(x);
%>
<%--下面也能输入x的值--%>
<%
out.println("这也可输出x:" + x);
%>
<hr>
<%--在代码中嵌入HTML元素--%>
<%
for (int i = 0; i < 5; i++) {
%>
<h1>Hello,打工人 <%=i%></h1>
<%
}
%>
<%--EL表达式的写法--%>
<%for (int i = 0; i < 5; i++) {%>
<h1>Hello,打工人</h1>
<%}%>
jsp声明
格式:
<%!
//代码!
%>
用法:
<%!
static {
System.out.println("Loading Servlet!");
}
private int globalVar = 0;
public void cc() {
System.out.println("进入了方法cc");
}
%>
注意:JSP声明会被编译到JSP生成的Java类中,其他的就会被生成到_jspService方法中
JSP指令
- page指令: 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
- include指令: 包含其他文件
- taglib:引入标签库的定义
<%@page %>
<%--指定一个JSP页面处理错误--%>
<%@page errorPage="error/500.jsp" %>
<%--表示当前页是否可以作为其他 JSP 页面的错误页面:false或true--%>
<%@page isErrorPage="false" %>
<%--导入包--%>
<%@page import="" %>
<%@include %>
<%--@include会将两个页面合二为一;两个页面里的变量名不能相同否则500错误--%>
<%@ include file="/common/header.jsp"%/>
<h1>网页主体</h1>
<%--jsp:include拼接页面,本质还是两个页面;设置相同的变量名不会报错--%>
<jsp:include page="/common/header.jsp"/>
<h1>网页主体</h1>
注意:使用jsp:include拼接页时,两个页面可以设置相同的变量名及方法名,而**@include回报500错误**