Javaweb学习笔记之JSP技术(三)
欢迎访问我的blogThe Blog of DxhuaJSPJSP简介JSP全名Java Server Page,是为了简化Servlet的工作而出现的替代品在JSP中HTML和java代码共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容JSP产生的原因Servlet中也可以完成HTML的输出,但是当网页过于复杂,Servlet的使用和部署就比较困难,...
·
欢迎访问我的blogThe Blog of Dxhua
JSP
- JSP简介
JSP全名Java Server Page,是为了简化Servlet的工作而出现的替代品
在JSP中HTML和java代码共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容 - JSP产生的原因
Servlet中也可以完成HTML的输出,但是当网页过于复杂,Servlet的使用和部署就比较困难,为了克服这些困难,1999年SUN公司推出了JSP技术,该技术在生成HTML代码的时候相对
Servlet简单的多了 - 关于Servlet和JSP的理解(区别)
Servlet:在java代码中嵌入HTML代码,更擅长编写java业务代码
JSP:在HTML中嵌入java代码,更擅长页面展示 - JSP运行原理
jsp在第一次访问时会被web容器编译成Servlet,即jsp本质上是Servlet
过程:
第一次访问-------->HelloServlet.jsp----------->HelloServlet_jsp.java---->编译运行
被编译后的Servlet在TomCat的work文件下可以找到,使用IDEA会单独为项目维护一个项目
jsp会转换成java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init,service,destroy,并且将html代码通过java方式输出给浏览器 - JSP的脚本和注释
JSP的脚本(三种脚本的区别)
(1)<%java代码%> -------内部java代码被翻译到service方法的内部
(2)<%=java变量或表达式> ------会被翻译成service方法内部out.print(),并打印给浏览器
(3)<%!java代码%> --------会被翻译成servlet的成员内容
JSP的注释(三种注释的区别)
(1)Html注释: -----可见范围jsp源码,翻译后的servlet中,页面显示html源码
(2)java注释://单行注释;/多行注释/ -------可见范围jsp源码,翻译后的servlet
(3) jsp注释:<%–注释内容–%> -------可见范围jsp源码 - JSP指令
(1)page命令:属性最多的一个命令,根据不同的属性,指导整个页面的特性
格式:<%@ page 属性名1=“属性名值1” 属性名2=“属性名值2”%>
常用属性:
language:jsp脚本中可以嵌入的语言类型
ContentType:response.setContentType(“text/html;charset=utf-8”)
session:是否在jsp创建的时候自动创建session
import:导入的java包
errorPage:当发生错误后跳转到哪个界面
isErrorPage:是否将jsp设置为错误页面,为true时,可以接受当前错误
buffer:设置out的缓存空间,默认为8kb
(2)include指令
页面包含(静态界面)指令,可以将一个jsp页面包含到另个jsp界面中
格式:<%@ include file = “被包含的文件地址”%>
(3) taglib指令
在jsp页面中引入标签库(jst1标签库,struts2标签库)
格式<%@ taglib url="标签库地址 prefix=“前缀”%> - JSP隐式对象概述
当jsp被翻译成servlet的时候,service方法内部有个对象定义并初始,这九个对象被称为隐式对象
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
//加上request对象和response对象
//exception对象,表示JSP页面发生的异常,在错误页中才起作用
在<%java代码%>能使用的对象就是隐式对象
- 详解JSP中九大隐式对象
(1)out对象
在JSP中有四种输出方式
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
111111111
<%
response.getWriter().write("2222222");
out.write("3333333");
%>
<%="44444444444"
%>
</body>
</html>
这个的输出顺序为22222,1111111,3333333,44444444,因为为了减小服务器的压力,response有一个缓存区,out也有一个缓存区,通过response.getWrite().write()方法
输出的会直接存在response缓存区中,其他三种方式会先存在out的缓存区中,在存入response的缓存区,所以输出顺序就是这样的,通过buffer属性将out的缓存空间设置为0,顺序就会跟代码一样
(2)pageContext
pageContext对象就是JSP页面的上下文
pageContext对象是一个域对象
- setAttribute(String name,Object obj);
- removeAttribute(String name)
pageContext可以向指定的其他域中存储数据 - setAttribute(String name,Object obj,int scope)scope是设置pageContext对象的作用域范围,默认是只在当前JSP页面
- getAttribute(String name,int scope)
- removeAttribue(String name,int scope)
- findAttribute(String name)//获取顺序一次从pageContext域,request域,session域,application域
pageContext可以获取其他八大隐式对象
pageContext.getRequest();pageContext.getApplication()等。
(3)四大作用域的区别
page域:当前jsp页面范围
request域:一次请求
session域:一次会话
application域:整个web项目
- JSP标签
JSP标签用来控制JSP的行为,执行一些常用的JSP页面动作,通过标签可以实现很多行java代码才能实现的功能,比如请求转发功能
- 页面包含(动态包含) :<jsp:include page=“被包含的对象”/>
- 请求转发:<jsp:forward page=“要转发的资源”/>
静态包含和动态包含的区别
JSTL标签库
EL全名Expression language,它提供了在JSP中简化表达式的方法,让JSP的代码更加简化,可以嵌入到JSP页面内部,减少JSP脚本的编写
- EL表达式获取域中数据
jsp脚本:<%=request.getAttribute(name)%>
EL表达式替换上面的脚本: r e q u e s t S c o p e . n a m e E L 最 主 要 的 作 用 是 获 取 四 大 域 中 的 数 据 , 格 式 {requestScope.name} EL最主要的作用是获取四大域中的数据,格式 requestScope.nameEL最主要的作用是获取四大域中的数据,格式{EL表达式}
EL获得pageContext域中的值: p a g e C o n t e x t . k e y E L 获 得 r e q u e s t 域 中 的 值 : {pageContext.key} EL获得request域中的值: pageContext.keyEL获得request域中的值:{request.key}
EL获得session域中的值: s e s s i o n . k e y E L 获 得 a p p l i c a t i o n 域 中 的 值 : {session.key} EL获得application域中的值: session.keyEL获得application域中的值:{application.key}
- EL从四个域中获取某个值${key},—同样是从pageContext域,request域,session域,application域中依次获取属性,在某个域中获取到后将不再获取
- EL的内置对象
(1)pageScope,requestScope,sessionScope,applicationScope--------获取JSP中的域中数值
(2)param,paramValues-------接收参数,相当于request.getParameter(),request.getParameterValue()
(3)header,headerValues------获取请求头信息,相当于requset.getHeader(name)
(4)initParam-------获取全局初始化参数,相当于this.getServletContext().getInitParameter(name)
(5)cookie----WEB开发中cookie,相当于request.getCookies()–>cookie.getName()–>cookie.getValue()
(6)pageContext-----web开发中的pageContext,pageContext获得其他八大对象 - EL的执行表达式
在EL中可以执行java中的代码如 1 = 1 ; {1=1}; 1=1;{1>2}
有一个判断对象是否为空${empty 对象名}为空返回true,不为空返回false - JSTL的简介和基本配置
JSTL标准标签库,可以嵌入到jsp页面中使用标签的形式完成业务逻辑等功能,JSTL出现的目的同EL一样也是要替代jsp页面中的脚本代码,JSTL标准标签库有5个字库。但随着发展,目前常使用的是它的核心库
JSTL的五个标签库
配置
先下载JSTL标签库下载地址!(http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/)
http://java.sun.com/jsp/jstl/core
5. JSTL-if标签
<%--使用JSTL标签需要配合EL表达式使用--%>
<c:if test="${1+1==2}">
<%--如果test为true执行内部的代码,如果为false就不执行 --%>
表达式成立。执行内部语句
</c:if>
- JSTL-foreach标签
<%
List<User> list=new ArrayList<>();
User user1=new User();
user1.setName("小强");
user1.setSex("男");
User user2=new User();
user2.setName("小丽");
user2.setSex("女");
list.add(user1);
list.add(user2);
request.setAttribute("list",list);
//java代码实现for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getName());
}
for (User user : list) {
System.out.println(user.getName());
}
%>
<%--JSTL标签实现for循环--%>
<c:forEach begin="0" end="${list.size()-1}" var="i">
${list[i].name}
</c:forEach>
<c:forEach items="${list}" var="uesr">
${uesr.name}
</c:forEach>
更多推荐
已为社区贡献1条内容
所有评论(0)