1. JavaWeb JSP技术
1.1. JSP简介
1.1.1. 什么是JSP
JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。在JSP中java代码与HTML共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容。
1.1.2. 为什么出现JSP技术
1997年Java Web中只有servlet,生成html技术也需要在servlet中完成,虽然servlet也可以完成所有的输出工作,但是使用过程比较麻烦,部署也比较复杂。为了克服这些缺点1999年SUN公司推出了JSP技术。该技术在生成HTML代码的时候相比servlet方便了许多。
1.1.2. 对于servlet和JSP技术的理解:
servlet:在java代码中嵌入html代码,更擅长编写java业务代码JSP:在html中嵌入java代码,更擅长页面展示。
1.2. jsp运行原理
jsp在第一次被访问时会被Web容器翻译成servlet,即jsp本质上就是Servlet过程。
第一次访间---->helloservlet.jsp----helloservlet_jsp.java---->编译运行被翻译后的servlet在Tomcat的work目录中可以找到,使用IDEA会单独为项目维护一个目录。
通过观察发现jsp会转化为java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init、service、 destory,并且将html代码通过java方式输出给浏览器。
1.3. JSP脚本和注释
1.3.1. JSP脚本
1.<%java代码%> ----- 内部的java代码翻译到service方法的内部
2.<%=java变量或表达式> -----会被翻译成service方法内部out.print()
3.<%!java代码%> ----会被翻译成servlet的成员的内容
1.3.2. JSP注释
1. Html注释:<!--注释内容--> ---可见范围jsp源码、翻译后的servlet、页面显示html源码
2. 2.java注释://单行注释 /*多行注释*/ --可见范围jsp源码 翻译后的servlet
3. 3.jsp注释:<%--注释内容--%> -----ī可见范围 jsp源码可见
1.4. jsp指令(3个)
jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:
1.4.1. page指令
属性最多的指令(实际开发中page指令默认)属性最多的一个指令,根据不同的属性,指导整个页面特性。
格式:
javascript
<%@ page 属性名1="属性值1" 属性名2="属性值2" ...%>
常用属性如下:
(1)language:jsp脚本中可以嵌入的语言种类;
(2)contentType:response.setContentType(text/html;charset=UTF-8);
(3)session:是否jsp在翻译时自动创建sessionimport:导入java的包;
(4)errorPage:当当前页面出错后跳转到哪个页面。
javascript
<%@ page import="com.zzs.session.SessionServlet " %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<%@include file="/include.jsp" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>hello jsp</h2>
<!-- html注释 -->
<jsp:include page="/include1.jsp"></jsp:include>
<%
//java单行注释
/*
java多行注释
*/
String str = "hello jsp";
int i = 0;
i++;
%>
<%-- jsp注释 --%>
<%="变量i=" + i%>
<%!int x = 0;%>
</body>
</html>
1.4.2. include指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp五面中格式:
javascript
<%@ include file="被包含的文件地址"%>
javascript
<jsp:include page="/include1.jsp"></jsp:include>
1.4.3. taglib指令
在jsp页面中引入标签库(jst1标签库、struts2标签库)格式:
javascript
<%@ taglib uri="标签库地址"prefix="前缀"%>
javascript
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
1.5. JSP隐式对象概述
1.5.1. 什么是JSP隐式对象
当jsp被翻译成servlet的时候,service方法内部有九个对象定义并初始化,这九个对象被称为隐式对象。
1.5.2. 九大隐式对象
1.5.3. 九大隐式对象-out对象
1.5.4. JSP九大隐式对象-epageContext对象
pageContext对象就是jsp页面的上下文对象
(1)pageContext是一个域对象
setAttribute(String name, Object obj)
getAttribute(String name)
removeAttrbute(String name)
(2)pageContext可以向指定的其他域中存取数据
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
findAttribute(String name)//获取顺序依次从pageContext域,request域
javascript
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
// pageContext.setAttribute("name","xiaoming");
// pageContext.setAttribute("name","zhangsan",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("name","lisi",PageContext.SESSION_SCOPE);
pageContext.setAttribute("name","wangwu",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("name",PageContext.REQUEST_SCOPE)%>
<%=pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE)%>
<%=
pageContext.findAttribute("name")
%>
</body>
</html>
1.5.5. JSP标签
(1)页面包含(动态包含):
javascript
<jsp:include page="被包含的页面"/>
(2)请求转发:
javascript
<jsp:forward page="要转发的资源"/>