1 jsp介绍
jsp是一种开发网页的技术,它基于html和java,需要借助于服务器运行。
jsp网页和html网页的区别和联系简单说就是:可以在jsp里面写java代码,而html不可以;jsp需要html,html不需要jsp。
2 jsp构成
jsp网页由3大基础构成:
- jsp标签或标记
- html/css
- java
2.1 jsp标签
- jsp标签用于定义设置jsp网页的功能或特性,常用标签有8个,如下:
- 3个指令标签:page、include、taglib
- 5个动作标签:jsp:include、jsp:param、jsp:forward、jsp:plugin、jsp:useBean
jsp指令标签的语法格式:
<%@ 标签名 属性名1=“属性值1” 属性名2=“属性值2” ......%>
如:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
jsp动作标签的语法格式:
<标签名 属性名1=“属性值1” 属性名2=“属性值2” ....../>
或者
<标签名 属性名1=“属性值1” 属性名2=“属性值2” ......>
相关内容
</标签名>
如:
<jsp:forward page="xxx.html"> </jsp:forward>
2.2 html/css
jsp需要html/css技术为其页面排版、设计风格、设计样式,
3.java
- 用于功能逻辑实现
- 定义数据放在<%! %>里;
- 写代码放在<% %>里;
- 写变量值放在<%= %>里;
- 注释说明
- jsp代码用:<%-- --%> 这种注释的代码,在查看源码时不会显示。
- html代码用:<!-- -->
- css代码用:/* */
- java代码用://或者/* */
4.jsp指令标签
jsp的指令标签主要有3个:page、include、taglib
4.1page
语法格式:
<%@ page 属性1=“值1” 属性2=“值2” ......%>
page指令标签是对整个jsp文件的设置,约有15个属性,一般在整个文件的前面引用,属性不能重复设置。
4.2include
- include指令标签用于静态方式引入本项目里的其他文件到本jsp页面里,如引入项目里的一个html、jsp、txt文件到本页面。
- 需要注意的是,为了防止乱码被引入的文件开头需用添加page指令标签设置编码格式,
- <%@ page pageEncoding="utf-8"%>或<%@ page pageEncoding="gbk"%>等
- 因为是静态引用,在编译阶段执行,所以定义的数据不能和本jsp文件冲突。
- 如果在引用有些标签和本jsp文件的效果有冲突,会被引用的文件标签格式去掉。
4.3 taglib
用于引用自定义jsp标签
5.jsp动作标签
jsp的主要动作标签有5个:jsp:include、jsp:param、jsp:forward、jsp:plugin、jsp:useBean
jsp动作标签的语法格式:
<标签名 属性名1=“属性值1” 属性名2=“属性值2” ....../>
或者
<标签名 属性名1=“属性值1” 属性名2=“属性值2” ......>
相关内容
</标签名>
5.1 jsp:include
jsp:include动作标签和include的指令标签一样都是用来引用本项目里的其他文件到jsp文件中,有2个属性:page和flush
格式:<jsp:include page="要打开的文件路径"></jsp:include>
和include指令标签对比:
include是静态方式引用(编译时),jsp:include是动态方式执行(运行时);
<jsp:include page="test.jsp"></jsp:include>
5.2 jsp:include动作标签与include指令标签异同
相同地方:
作用一样,都是在jsp文件里用于引用另一个本项目中的文件或封装好的jsp文件;
不同地方:
- include是静态方式引用,jsp:include是动态方式执行;
- include 是用file属性来设置要引用的文件路径,jsp:include是用page属性来设置要引用的文件路径。
- jsp:include 引用html和txt等非jsp文件时容易乱码。
- jsp:include 多了个一flush属性,用于缓冲数据,有2个值:true和false,true表示设置缓冲,fasle表示不设置缓冲,当jsp页面的数据很多时最好设置缓冲,如下
<jsp:include page="test.jsp" flush="true"></jsp:include>
5.3 jsp:forward
jsp:forward标签用于jsp页面跳转,只有一个属性:page,跳转后浏览器地址不会变化。格式
<jsp:forward page="文件路径"></jsp:forward>
<jsp:forward page="test.jsp"><jsp/jsp:forward>
5.4 jsp:param
jsp:param 标签不单独使用,作为其他标签的子标签使用,用于传递参数。
与jsp:include标签结合使用
格式:
<jsp:forward page="jsp/a.jsp">
<jsp:param value="放假了!!!" name="xxx"/>
</jsp:forward>
接收:
<%
String x=request.getParameter("xxx"); //获取传来的数据
%>
6.jsp内置对像
6.1 out
作用
用于将信息或数据发送给网页或web,以及相应设置
常用方法
- out.getBufferSize() 获取缓存区大小
- out.getRemaining() 获取缓存区剩余大小
- out.print() 输出数据,比如网页上。没有空格
- out.println(); 输出数据,比如网页上。尾部有空格
- out.write() 输出数据,比如网页上。没有空格
- out.flush() 输出数据并清空缓存
原理
out对象默认会先把数据发送给缓冲区,再发送给输出端。默认缓冲区大小为8192个字节,缓冲区大小可以设置,比如通过page指令标签里的【buffer=””】来设置。
6.2page
作用
获得和处理当前jsp类,是this的另一种用法。
常用方法
page.getClass(); 获取当前jsp页面类
<%=page.getClass()%>
6.3request
作用
- 用于保存和处理一次性的即时数据,比如页面跳转时两个页面间传递数据,
- 只对目标路径有效。提交方式:get方式和post方式,get方式是公开的,
- 传递的数据浏览器地址会看到,post方式是保密的,
- 传递的数据浏览器地址看不到,默认是get方式。
- 处理中文乱码(高版本8.0以上服务器不需要)
byte[] b=str1.getBytes("iso-8859-1"); //转换成编码格式iso-8859-1(低版本tomact默认的编码格式)
String str2=new String(b,"utf-8"); //把字节数组转换成和网页一样的编码格式
常用方法
- request.setCharacterEncoding() 设置编码格式
- request.setAttribute() 保存对象数据或保存属性
- request.getAttribute() 读取对象数据或读取属性
- request.removeAttribute() 删除保存的属性
- request.getAttributeNames() 读取所有属性名
- request.getParameter() 读取传递的String类型数据
- request.getParameterNames() 读取一组已设置的参数名
- request.getParameterValues() 读取一组已设置的参数值
- request.getInputStream() 调用输入流
- request.getCookies() 获得Cookies
- request.getSession() 获得Session
- request.getRemoteHost() 获取客户端地址
- request.getRemotePort() 获取客户端端口
- request.getServerName() 获取服务端地址
- request.getServerPort() 获取服务端端口
1. 保存对象数据或保存属性
读取对象数据或读取属性
2.request.getAttributeNames() 读取一组属性名
(3)request.getParameter() 读取数据
(4)request.getParameterNames() 读取一组参数名
(5)request.getParameterValues() 读取一组参数值
(6)
- request 保存和传递数据只对目标路径有效,如果没有设置,表示有效范围为当前路径或当前页面,
- jsp:forward标签的跳转方式是属于当前路径,form标签和a标签的跳转方式是属于指定路径。
6.4 response
作用
用于动态响应网页或web的请求,比如发数据给网页,并获得响应结果。
常用方法
- esponse.setHeader("refresh", "1"); 每1秒自动刷新一次网页
- response.setHeader("refresh", "3;url=http://www.baidu.com"); 3秒后跳转到百度页面
- sendRedirect("out.jsp"); //页面跳转(重定向方式)
- response.setContentType(); 设置网页类型
- response.setBufferSize(); 设置缓存区大小
- response.getBufferSize() 获取缓存区大小
- response.getOutputStream() 调用输出流
- response.addCookie(); 添加Cookie
- setContentType("application/msword;charset=utf-8"); //把当前网页保存为word文档
6.5 session
作用
用于保存和处理用户的信息或数据。
原理
- 一个用户(session)是指一个客户端(一个浏览器)从打开到关闭的整个阶段。
- 一个用户对应一个session对象。当一个浏览器访问服务器的时候,
- 服务器会为每个浏览器生成一个专门的编号(ID)
- ,并为其保存一定时长,Tomcat保存的默认时长为30分钟。
常用方法
- session.getId() 获取用户编号(ID)
- session.isNew() 判断是不是新用户,值为true表示新用户,为false标识旧用户。
- session.setAttribute() 保存数据或保存属性
- session.getAttribute() 获取数据或获取属性
- session.removeAttribute() 删除属性
- session.getLastAccessedTime() 获取用户上次访问时间,单位是毫秒。
- session.getMaxInactiveInterval() 获取用户有效时长,单位是秒。
- session.setMaxInactiveInterval() 设置用户有效时长,单位是秒。如果值是负数表示无限长。
session保存的数据存在于同一个用户,也就是同一个客户端,也就是同一个浏览器,不能跨用户访问。
常用方法:
setAttribute("xxx", "12345"); //设置数据
getAttribute("xxx"); //读取数据
isNew(); //判断当前是不是新用户,true表示新用户,false表示旧用户。
getId(); //获得session对象编号
getLastAccessedTime(); //获得用户最近访问时间
getMaxInactiveInterval(); //获得用户有效时间(秒)
setMaxInactiveInterval(5); //设置用户有效时间(负数表示无限长)
invalidate(); //注销用户
removeAttribute("xxx"); //删掉属性
6.6application
作用
用于保存和处理整个项目的信息或数据。
原理
application以项目全局变量形式保存数据,每个客户端(浏览器)共用同一个变量。
常用方法
- application.setAttribute() 保存数据或属性
- application.getAttribute() 读取数据或属性
- application.removeAttribute() 删除属性
常用方法:
setAttribute("xxx", "12345"); //设置数据
getAttribute("xxx"); //读取数据
removeAttribute("name"); //删掉属性