目录:
目录
[1 JSP基础知识架构](#1 JSP基础知识架构)
[1 指令标识](#1 指令标识)
[1 Page命令](#1 Page命令)
[2 Including指令](#2 Including指令)
[3 taglib指令](#3 taglib指令)
[2 脚本标识](#2 脚本标识)
[1 JSP表达式](#1 JSP表达式)
[2 声明标识](#2 声明标识)
[3 代码片段](#3 代码片段)
[3 JSP注释](#3 JSP注释)
[1 HTML注释](#1 HTML注释)
[2 带有JSP表达式的注释](#2 带有JSP表达式的注释)
[3 隐藏注释](#3 隐藏注释)
[4 动态注释](#4 动态注释)
[4 动作标识](#4 动作标识)
[1 包含文件标识](#1 包含文件标识)
[2 请求转发标识](#2 请求转发标识)
[3 传递参数标识](#3 传递参数标识)
[2 JSP内置对象知识架构](#2 JSP内置对象知识架构)
[1 request对象](#1 request对象)
[2 response对象](#2 response对象)
[3 session对象](#3 session对象)
[4 application对象](#4 application对象)
[5 out对象](#5 out对象)
[6 其他对象](#6 其他对象)
[3 留言薄项目应用](#3 留言薄项目应用)
1 JSP基础知识架构
1 指令标识
指令标识:被服务器解释并执行的语句,不会输出任何内容到网页,用于设定JSP网页信息。
语法:<% 指令名称 属性1="xxx" 属性2="yyy"%>
小贴士:这个语句在jsp头上就能看到。
1 Page命令
Page命令:用于定义jsp页面的相关属性,当jsp被服务器解析成servlet时会转为java代码
语法:<% page 属性1="xxx" 属性2="yyy"%>
小贴士:page指令有15个属性,例如:language, extends, import, pageEncoding等。
2 Including指令
Including指令:在1个jsp中包含另1个jsp。
语法:<% including file="path""%>
小贴士:常用于包含banner和脚注等部分。NoNo 那是动作标识
3 taglib指令
taglib指令:声明jsp使用的标签库。
语法:<% taglib prefix="" uri="" %>
小贴士:常见的有jstl:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2 脚本标识
包含3部分,jsp表达式,声明标识,脚本程序,用于生成动态网页内容。
1 JSP表达式
用于向页面输出信息,语法:
<% =表达式 %>
下面在程序中试一试。新建dynamic web project,包含web.xml,之后新建index.jsp
html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%String m="abc";%>
<%=m %>
<br>
<%=1+2 %>
</body>
</html>
在tomcat运行,没问题。
这里说明,%%里可以写任意的java语句,不一定非要输出。而且java语句浏览器是看不到的,服务器发给浏览器的html是这样的
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
abc
<br>
3
</body>
</html>
这说明java语句虽然没有输出,但占了一行。只是这一行没有在页面上显示。
把代码改一下:
html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%String m="abcde我";%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=m %>
<br>
<%=1+2 %>
</body>
</html>
定义语句放到body外,这时候是
总之是写到哪,哪多一行空。
2 声明标识
声明标识:在JSP页面中定义全局变量或方法,整个页面都可访问。语法:
<%! 代码%>
3 代码片段
代码片段:上面其实已经用到了,语法:
<% 代码 %>
代码片段在请求的处理期间被执行,注意:声明和代码片段在jsp页面内都有效,但声明中的变量和方法创建后直到服务器关闭才结束,而代码片段的关闭jsp页面就结束了。
这是不是就是脚本程序?
3 JSP注释
注释也是需要注意的一块。
1 HTML注释
不显示在网页,但查看浏览器源代码时能看到,格式为//
2 带有JSP表达式的注释
在代码片段中加入的注释,有单行注释//,多行注释/* */, 提示文档注释/** */
需要考察其可见性。以后再做。
3 隐藏注释
为了不在浏览器源代码显示注释信息,为了保密性,整了个隐藏注释的写法
<%-- --%>
这个查看源代码也看不到。
4 动态注释
由于HTML注释对JSP嵌入的代码不起作用,可以利用这一点,组成构成动态的HTML注释。也就是在注释里写JSP语句。
4 动作标识
1 包含文件标识
语法:<jsp:include>
没搞明白这个和including指令有啥区别。
2 请求转发标识
语法:<jsp:forward>
作用:将请求转发到其他资源,转发后当前页面不再执行。
3 传递参数标识
语法:<jsp:param>
作用:可作为其他标识的子标识,用于为其他标识传递参数,这个有点复杂。
2 JSP内置对象知识架构
Java使用对象前,先要实例化这个对象,这个比较繁琐,为了简化,JSP提供了一些内置对象。一共有9个内置对象。
1 request对象
用于处理http请求的各项参数。
(1)访问请求参数
request有个getParameter方法可获取参数。
html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试JSP内部对象</title>
</head>
<body>
<a href="del.jsp?id=1&user=">转到del页面</a>
</body>
</html>
新建del.jsp
html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
id=<%=request.getParameter("id") %>
</body>
</html>
看下效果,确实传过来了。
点击后
(2)在作用域管理属性
这里是传递attibute,和上面的有点类似。
写入用set 提取用get
(3)获取cookie
cookie就是小段的文本信息。浏览器将cookie以键值形式保存到客户端。
要注意cookie和session的区别。
(4)解决中文乱码问题
参数传递应该带上编码方式,这样能避免乱码。
(5)获取客户端信息
有一系列的函数能用于获取客户端信息。比如IP地址,端口号,主机名等。
(6)显示国际化信息
浏览器可向web服务器指定其所用的本地语言,jsp可以获取这个信息并作出相应回应。
2 response对象
该对象用于响应客户请求,向客户端输出信息。该对象在jsp页面内有效。
(1)重定向网页
这个和转发不同。
(2)处理HTTP文件头
常用的有禁用缓存,设置页面自动刷新和定时跳转网页。
(3)设置输出缓冲
通常,服务器不会将输出内容直接写到客户端,而是先写到缓冲区。该对象可以设置缓冲。
3 session对象
session的意思是会话。
(1)创建和获取客户的会话
主要通过属性set和get来实现。
(2)移除属性
使用remove即可。
(3)销毁session
用invalidate
(4)会话超时管理
主要是为了避免超时后发生错误,进行声明周期判断。
4 application对象
用于保存公有数据。类似于全局变量。
(1)访问初始化参数
在web.xml里以<context-param>定义。
(2)管理环境属性
方法和session类似,但有效范围更大。
5 out对象
用于在web浏览器输出信息。
(1)向客户端输出数据
out.print方法。
out.println方法。
(2)管理响应缓冲
这个比较特别。没怎么见过,应该有用且不复杂。
6 其他对象
(1)获取会话范围的pageContext对象
用于获取对象的对象。
(2)读取web.xml的config对象
主要用于获取服务器配置信息。
(3)应答或请求的page对象
page对象代表jsp本身,可看做this指针的代名词
(4)获取异常信息的exception对象
用于处理jsp文件执行时发生的错误和异常。
3 留言薄项目应用
下面通过一个实例,来测试这两章知识内容。
根据需求,制作一个网页,包含一个form,里面有留言人,和留言板,然后点击能提交,并显示在网页上。
html
<%-- 本注释在浏览器看不到 仅供开发者使用 --%>
<%-- 本程序用于理解jsp基础知识 --%>
<%-- 实现了一个留言板网页 本网页内容只能共单机使用 其他人访问是看不到的 --%>
<%-- --%>
<%-- 首先是jsp头 用到了page指令 用于定义jsp页面的属性 --%>
<%-- 该行在eclipse可用模板定义 --%>
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%-- 用于指定html4 --%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>签写留言信息</title>
<%-- js片段 本句中language为h4 h5会警告 --%>
<script language="javascript">
<%-- 用于检查填写内容是否为空 --%>
function checkNull(form){
for(i=0;i<form.length;i++){
if(form.elements[i].value == ""){ //form的属性elements的首字e要小写
alert("很抱歉,"+form.elements[i].title + "不能为空!");
form.elements[i].focus(); //当前元素获取焦点
return false;
}
}
}
</script>
</head>
<body>
<%-- session对象 out对象的使用 --%>
<%
if(session.getAttribute("message")!=null){
out.println(session.getAttribute("message").toString());
}
%>
<br><hr></hr>
<%-- form控件 --%>
<form name="form1" method="post" action="deal.jsp" onSubmit="return checkNull(form1)">
留言人名:
<input name="author" type="text" id="author" size="30" title="留言人"><br>
留言内容:
<textarea name="content" cols="70" rows="10" title="留言内容" id="content"></textarea><br>
<input name="Submit" type="submit" value="签写留言"> <%-- 提交事件 --%>
<input name="Submit2" type="reset" value="重置"> <%-- 重置form --%>
</form>
</body>
</html>
html
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%
/* request对象 用于处理http请求的各项参数 */
request.setCharacterEncoding("GB18030");
//获取留言人
String author=request.getParameter("author");
//获取留言内容
String content=request.getParameter("content");
//组合留言信息
String message="["+author+"]说:"+content+"<br>";
//当前session内容不为空 则追加信息
if(session.getAttribute("message")!=null){
message+=session.getAttribute("message").toString();
}
//将追加的信息房放入session中
session.setAttribute("message",message);
//response 转到index.jsp
response.sendRedirect("index.jsp");
%>
思路:
点击提交后,form会转到deal.jsp,之后用session提取message并追加,之后显示,在重新转回index.jsp
这个网页的缺点是,不能多客户端互动,只能自己看自己的。session时间到后,就会清空数据。