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