最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记:
- JSP三大指令:
- page ------>最复杂的一个指令,属性很多,常用的像import,language,pageEncoding等等
- include-------->静态包含,一般在一个网站不同网页上把相同的元素单独写在一个jsp中,其他页面直接用该命令导入,能大大减少重复代码提高访问速度
- taglib --------->一般用于导入标签库,比如jsp的jstl标签库,使用之前必须有此标签.
- JSP指令格式:
<%@page language="java" pageEncoding="utf-8"%>
` 以page指令为例,其他标签类同,可以写任意多个属性,甚至不写,习惯性放在jsp页面最上方,但是并不是必须写在页头,可以写在jsp页面任意位置.
- page常用属性:
- pageEncoding: 指定当前jsp页面的编码,在服务器(如tomcat)要把jsp编译成.java时需要使用pageEncoding
- contentType: 添加一个响应头,比如contentType="text/html;charset=utf-8"
注意:如果这两个标签只设置了一个,另一个默认成已设置的那个,如果都没设置,默认编码是iso,
3.import: 用于导包,如import="java.util.*";可以出现多个import.
4.errorPage: 设置出错时候的跳转页面,如errorPage="error.jsp"如果当前页面出现异常,就转发到error.jsp,注意是转发,地址栏不会有变化.
这里拓展一下,web.xml配置错误页面的知识,如果我们希望当出现比如404错误时,页面能够跳转到我们自定义的jsp上去,应该这样配置,在web.xml中添加:
<error-page>
<error-code>404</error-code>
<location>/myError404.jsp</location>
</error-page>
page中还有许多属性,比如language,info,并没有什么用处,至于其他的我貌似见都没见过了,不再赘述.
- include指令: 静态包含
< %@ include file=”/b.jsp” %>
它是在jsp编译成java文件时完成的,他们共同生成一个Java文件,一个.class文件, 引入的页面与当前页面融为一体,因为是编译时期就和合并,所以 file的内容不能够是变量.
在jsp中有一个动作标签也是include,它指的是动态导入,在页面请求时才合并,page的内容可以是变量.
<jsp:include page=”/b.jsp” flush=”true” />
- taglib: 导入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- prefix: 指定标签库在当前页面中的前缀,由我们自定义即可.
- uri: 指定标签库的位置
- JSP九大内置对象(不需要创建就可以直接使用):
- out : 等同于 response.getWriter(),用来向客户端(浏览器)发送文本信息,
- request: 就是指HttpServletRequest类的对象
- response: 就是指HttpServletResponse类的对象
- session: 是HttpSession类的对象,
- application:是ServletContext类的对象
- page: 指当前页面的对象,类似于"this"
- config: ServletConfig类的对象
- exception: 只能在错误页面中使用该对象,即在page指令中设置了isErrorPage="true",才可用
- pageContent:页面的上下文对象,是一个域对象
- pageContext 对象
servlet有三个域对象,jsp有四个域对象
- ServletContext:作用于整个应用程序,随服务器开启而存在,随服务器关闭而死亡
- session: 作用于整个会话(一个会话中对应一个用户);
- request: 作用于一次请求链中
- pageContext:作用于一个jsp页面,用于在当前jsp页面和jsp中使用的标签之间共享数据.
pageContext域对象可以代理其他域:
pageContext.setAttribute("name","张三",pageContext.SESSION_SCOPE);将名为张三的属性name存到了session域中
pageContext.getAttribute("name",pageContext.SESSION_SCOPE): 获取name时使用
pageContext.findAttribute("name"): 全域查找,查找顺序是:page-->request-->session-->application