一.jsp概述
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。
三个概念
- html:静态内容
- servlet:服务器端的小应用程序,处理Java逻辑代码。主要作用是:
(1)获取表单数据
(2)处理业务逻辑
(3)分发转向 - jsp:编写输出动态内容,但不适合编写java逻辑。
通俗易懂:jsp = html + java
思考:
-
IE浏览器访问jsp页面时,Web服务器是如何调用并执行一个jsp页面的?
-
Web服务器在执行jsp页面时,是如何把jsp页面中的html排版标签发送到客户端的?
jsp页面中的java代码,服务器是如何执行的?
在执行 JSP 网页时,通常可分为两个时期:转译时期(Translation Time)和请求时期(Request Time)
转译时期:JSP网页转译成Servlet类。
请求时期:Servlet类执行后,响应结果至客户端。
转译期间主要做了两件事情:
将JSP网页转译为 Servlet 源代码(.java);
将Servlet源代码(.java)编译成 Servlet 类(.class)。
-
web服务器在调用jsp时,会给jsp提供一些什么java对象
jsp基本语法
jsp的脚本
小脚本<% java 代码 %>
表达式<%=2+3>
等价于out.print(2+3)
声明<%! 代码 %>
表示在类中定义全局成员和静态块。注释
jsp注释:<%-- 注释文字 --%>
不会返回到浏览器中
html注释:有的浏览器会返回到浏览器中jsp 3个指令
- page 指令
1.1、 import 和java代码中的import是一样的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
JSP会自动导入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
1.2、 session: 是否会自动创建session对象。默认值是true;
1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb.
1.4 errorPage: 如果页面中有错误,则跳转到指定的资源。
errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。
如果不写“/”则代表相对路径。
1.5、 isErrorPage: 是否创建throwable对象。默认是false;
1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8");
1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。
1.8、 isELIgnored: 是否支持EL表达式。 默认是false
<%@ page pageEncoding="gbk" %>
- Include 指令
静态包含:把其它资源包含到当前页面中。
<%@ include file="/include/header.jsp" %>
动态包含:
<jsp:include page="/include/header.jsp"></jsp:include>
两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静的就不用动的。
- taglib 指令
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- jsp 6个动作
<%
Student stu = new Student();
stu.setName("tom");
out.print(stu.getName());
//request.getRequestDispatcher("/7.jsp").forward(request, response);
%>
<jsp:useBean id="stu1" class="com.ky.entity.Student"></jsp:useBean>
<jsp:setProperty property="name" name="stu1" value="jerry"/>
<jsp:getProperty property="name" name="stu1"/>
<!-- http://localhost:8080/day11_02_jsp2/6.jsp?name=123 -->
<jsp:forward page="/7.jsp">
<jsp:param value="123" name="name"/>
<jsp:param value="333" name="pwd"/>
</jsp:forward>
-
jsp 9个内置对象
<body>
<%
//pageContext.setAttribute("p", "pp");
pageContext.setAttribute("p", "pp", PageContext.PAGE_SCOPE);
//pageContext.setAttribute("p", "pp", PageContext.REQUEST_SCOPE);
request.setAttribute("p", "request");
//pageContext.setAttribute("p", "pp", PageContext.SESSION_SCOPE);
//session.setAttribute("p", "session");
//pageContext.setAttribute("p", "pp", PageContext.APPLICATION_SCOPE);
application.setAttribute("p", "application");
//request.getRequestDispatcher("/2.jsp").forward(request, response);
//response.sendRedirect(request.getContextPath()+"/2.jsp");
pageContext.forward("/2.jsp");
%>
</body>
作用与范围: pageContext<request<session<application
使用规则:
- PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。
- ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
- HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
- ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。
EL表达式
<%
Student stu = (Student)request.getAttribute("s");
//out.print(stu.getName());
%>
${s.city.address } <!-- ${s}==pageContext.findAttribute("s") -->