一、jsp概述
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。
jsp = html + java
html:静态内容
servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容--苦逼。
jsp:适合编写输出动态内容,但不适合编写java逻辑。
二、jsp的原理
三、jsp的最佳实践
Servlet:控制器。重点编写java代码逻辑 (获取表单数据、处理业务逻辑、分发转向)
JSP:代码显示模板。重点在于显示数据
四、jsp的基本语法
1、JSP模版元素
网页的静态内容。如:html标签和文本。
2、JSP的脚本
2.1、小脚本 <% java代码 %>
2.1、表达式 <%= 2+3 %> 等价于out.print(2+3);
3、JSP注释
JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量
网页注释:<!-- 网页注释 --> 特点:不安全,费流量
4、3指令
5、6动作
6、9内置对象*****
五、jsp的3个指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 2.0规范中共定义了三个指令:
l page指令
l Include指令
l taglib指令
语法:
<%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”。。。%>
或者:
<%@ 指令名称 属性1=“属性值1”%>
<%@ 指令名称 属性2=“属性值2”%>
如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" %>
<%@ page import="java.util.*" %>
1、page:
作用:用于定义JSP页面的各种属性(导包,指明输出内容类型,控制session)
属性:
1.1、import
和java代码中的import是一样的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
会自动导入以下的包:
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输出字符流。设置。输出数据的缓存大小, .
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
1. //开发时只写这一行就可以,其他默认
2. <%@ page pageEncoding="gbk" %>
2、include:
静态包含:把其它资源包含到当前页面中。
1. <%@ include file="/include/header.jsp" %>
动态包含:
<jsp:include page="/include/header.jsp"></jsp:include>
两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静的就不用动的。
3、taglib
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
六、jsp的6个动作
使用标签的形式来表示一段java代码。 如: <jsp:include page="2.jsp"></jsp:include>
l <jsp:include > 动态包含
l <jsp:forward> 请求转发
l <jsp:param> 设置请求参数
<%
request.getRequestDispatcher("/7.jsp").forward(request, response);
%>
//上下等价 (转发)
<!-- 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>
<!-- /7.jsp -->>
<%=request.getParameter("name") %>
<%=request.getParameter("pwd") %>
l <jsp:useBean> 创建一个对象
l <jsp:setProperty> 给指定的对象属性赋值
l <jsp:getProperty> 取出指定对象的属性值
<%
Student stu = new Student();
stu.setName("tom");
out.print(stu.getName());
//request.getRequestDispatcher("/7.jsp").forward(request, response);
%>
//上下代码等价
<jsp:useBean id="stu1" class="com.itheima.entity.Student"></jsp:useBean>
<jsp:setProperty property="name" name="stu1" value="jerry"/>
<jsp:getProperty property="name" name="stu1"/>
七、jsp的9个内置对象
指在JSP的<%=%> 和<% %>中可以直接使用的对象
对象名 | 类型 | 说明 |
request | javax.servlet.http.HttpServletRequest |
|
response | javax.servlet.http.HttpServletResponse |
|
session | javax.servlet.http.HttpSession | 由session="true"开关 |
application | javax.servlet.ServletContext |
|
exception | java.lang.Throwable | 由isErrorPage="false"开关 |
page | java.lang.Object当前对象this | 当前servlet实例 |
config | javax.servlet.ServletConfig |
|
out | javax.servlet.jsp.JspWriter | 字符输出流,相当于 printWriter对象 |
pageContext | javax.servlet.jsp.PageContext | 当前页面(其他页面不行) |
pageContext(重要)
1、本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据
void setAttribute(String name,Object o);
Object getAttribute(String name);
void removeAttribute(String name);
操作其它域对象的方法
void setAttribute(String name,Object o,int Scope);
Object getAttribute(String name,int Scope);
void removeAttribute(String name,int Scope);
scpoe的值:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
findAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找。
2、它可以创建其它的8个隐式对象
在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。
3、提供了的简易方法
pageContext.forward("2.jsp");
pageContext.include("2.jsp");
八、四大域对象:实际开发
PageContext : pageConext | 存放的数据在当前页面有效。 | 开发时使用较少。 |
ServletRequest: request | 存放的数据在一次请求(转发)内有效。 | 使用非常多。如:登录 |
HttpSession: session
| 存放的数据在一次会话中有效。 | 使用的比较多。如:存放用户的登录信息购物车功能。 |
ServletContext: application | 存放的数据在整个应用范围内都有效。 | 因为范围太大,应尽量少用。 |