Jsp
1.jsp产生的原因
在web开发中,HTML只能写一些静态的页面,无法在其中嵌入从数据库中获得的数据。为了解决这个问题,因此引入的jsp。
2.什么是jsp
jsp的全名是Java Server Page,是一种建立在Servlet规范上的胴体网页开发技术。即jsp实质上就是servlet。
3.jsp可以做什么
在jsp文件中,HTML代码和Java代码可以共同存在,其中html代码用来实现页面中静态内容的展示,Java代码来实现网页中动态内容的展示。
注:根据上面的内容,可以得知,学习jsp,主要是学习:如何在jsp文件中嵌入Java代码。
jsp的运行原理
jsp的本质就是servlet。
过程:
1.当用户第一次在浏览器中输入要的访问的jsp资源,这时web应用服务器将会去在它目录中work文件夹中查找是否已经解析了该jsp,发现没有相应的Java文件。
2.这时,web应用服务器将它的web.xml文件中,查找处理的servlet(org.apache.jasper.servlet.JspServlet),将请求的jsp翻译文servlet。并保存到Tomcat的work目录中。
如:第一次访问–>helloServlet.jsp—->helloServlet_jsp.java—>编译运行
注:web.xml处理jsp的servlet配置如下:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
jsp的脚本和注释
1.jsp的脚本:指的就是在jsp文件中嵌入的Java代码。
2.在jsp文件中嵌入Java代码的方式:
a.<%java代码%>:内部的Java代码翻译到service方法的内部。
b.<%=Java变量或者表达式%>:会被翻译为service方法的内部out.print();
c.<%!java代码%>:会被翻译为servlet的成员内容(包括成员变量和成员函数)
3.jsp注释--->不同的注释可见范围是不同的
a.html注释:
<!-- 注释内容 -->
可见范围:jsp源码,翻译后的servlet,页面显示html源码
b.Java注释:
//或者/**/
可见范围:jsp源码,翻译后的servlet
c.jsp注释:
<%-- 注释内容 --%>
可见范围:jsp源码
jsp指令(3个)
1.jsp指令:指的是指导jsp翻译和运行的命令
2.具体的指令
2.1page指令
格式:<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
常用属性:
language:jsp脚本中可以嵌入的语言种类(ps:只支持java)
pageEncoding:当前jsp中文件本身的编码,内部包含了contentType
contentType:设置response.setContentType(text/html;charset=UTF-8)
session:是否jsp翻译是自动创建session
import:导入Java包
errorPage:当前页面为出错后跳转到那个页面
isErroePage:当前页面是一个处理错误的页面
2.2include指令(静态包含)
格式:<%@ include file="被包含的文件地址"%>
ps:这个指令可以,将一个jsp页面包含到另一个jsp页面中。
2.3taglib指令
格式:<%@ taglib uri="标签库地址" prefix="前缀"%>
ps:该指令用于在jsp页面中引入标签库
jsp的内置/隐式对象(9个)
1.在jsp被翻译为servlet后,service方法中有九个对象定义并且初始化完毕,因此在jsp中可以直接使用这九个对象
2.具体的内置对象
2.1out(JsWriter):主要用于页面输出
2.2request(HttpServlet):主要用于得到用户请求。
2.3response(HttpServletResponse):服务器向客户端的回应信息。
2.4config(ServletConfig):Servlet的配置,可以获得Servlet的初始化参数和获得ServletContext对象
2.4session(HttpSession):用来保存用户信息
2.5application(ServletContext):web应用的共享信息
2.6pageContext:jsp的页面容器
2.7exception:表示jsp页面所发生的异常,在错误页起作用
2.8page(Object):指页面转换后的servlet类的实例。
3.内置对象的介绍
3.1out对象
out对象的作用是向客户端输出内容(out.write())
out缓冲区默认是8kb,可以设置为0代表关闭out缓冲区,内容将直接写到respons缓冲区中
ps:out.write()和response.getwrite().write()之间的区别:out.write是将内容写到out缓冲区,最后在写到response缓冲区。而response.getwrite().write()是直接将内容写到response缓冲区中。
3.2pageContext对象
pageContext对象表示jsp、页面上下文对象,而page指的jsp翻译成servlet后的实例对象。
a.pageContext是一个域对象
setAttibute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext向指定的其他域对象中存取数据
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
findAttribute(String name):该方法将会依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找。
b.可以通过pageContext获得其他8大内置对象
例: 获取请求对象
pageContext.getRequest()
ps:域对象的总结(4个)
四个作用域对象及作用范围分别是:
pageContext:当前jsp页面范围
request:一次请求
session:一次会话
application(ServletContext):整个web应用
jsp标签
1.页面包含(动态包含):<jsp:include page="被包含的页面"/>
2.请求转发:<jsp:forward page="要转发的资源"/>
ps:动态包含与动态包含的区别:
首先:动态包含是使用标签来进行的,他的格式为:<jsp:include page="被包含的页面"/>;
而静态包含是通过指令来进行的,他的格式是:<%@ include file="被包含的文件地址"%>;他们都可以完成将一个页面包含到另一个页面的效果。
区别:
动态包含是将请求的页面先解析为servlet,然后再执行到<jsp:include page="被包含的页面"/>时,再将被包含的页面解析为servlet,包含进去请求的页面。(即会产生两个servlet)
静态包含则是先将两个页面拼接到一个jsp,后面再解析该jsp。(即只会产生一个servlet)