【java】JSP --- 动态网页开发技术

1. 什么是JSP?

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

2. 为什么使用JSP?

JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势:

性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。
服务器调用的是已经编译好的JSP文件,而不像CGI/Perl那样必须先载入解释器和目标脚本。
JSP 基于Java Servlet API,因此,JSP拥有各种强大的企业级Java API,包括JDBC,JNDI,EJB,JAXP等等。
JSP页面可以与处理业务逻辑的 Servlet 一起使用,这种模式被Java servlet 模板引擎所支持。
最后,JSP是Java EE不可或缺的一部分,是一个完整的企业级应用平台。这意味着JSP可以用最简单的方式来实现最复杂的应用。

3. JSP的原理

  • jsp其实是一种特殊的Servlet
    • 当jsp页面第一次被访问时,服务器会把jsp编译成java文件
    • 然后再把java编译成.class
    • 然后创建该类对象
    • 最后调用它的service()方法
    • 第二次请求同一jsp时,直接调用service()方法。

4. JSP的优势

  • 与ASP相比:JSP有两大优势。首先,动态部分用Java编写,而不是VB或其他MS专用语言,所以更加强大与易用。第二点就是JSP易于移植到非MS平台上。
  • 与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
    与SSI相比:SSI无法使用表单数据、无法进行数据库链接。
  • 与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
  • 与静态HTML相比:静态HTML不包含动态信息。

5. JSP的脚本

1. <%  代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
2. <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
3. <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

6. JSP的三大指令

6.1 page

  • 配置JSP页面
pageEncoding和contentType:
* pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!
				在服务器要把jsp编译成.java时需要使用pageEncoding!
* contentType:它表示添加一个响应头:Content-Type!等同与
				response.setContentType(“text/html;charset=utf-8);

* import:导包!可以出现多次

errorPage和isErrorPage:
* errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定
* isErrorPage:它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!
				而且这个页面可以使用9大内置对象中的exception!

autoFlush和buffer
* autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新!
			默认为true,如果为false,那么在缓冲区满时抛出异常!
* buffer:指定缓冲区大小,默认为8kb,通常不需要修改!

* isELIgnored:是否忽略el表达式,默认值为false,不忽略,即支持!

* language:指定当前jsp编译后的语言类型,默认值为java。
* info:信息!
* isThreadSafe:当前的jsp是否支持并发访问!
* session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象!
* extends:让jsp生成的servlet去继承该属性指定的类!

6.2 include

  • 与RequestDispatcher的include()方法的功能相似!

  • <%@include%> 它是在jsp编译成java文件时完成的!他们共同生成一个java(就是一个servlet)文件,然后再生成一个class!

  • RequestDispatcher的include()是一个方法,包含和被包含的是两个servlet,即两个.class!他们只是把响应的内容在运行时合并了!

  • 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。

<%@include file="top.jsp"%>

6.3 taglib

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:指定标签库在本页面中的前缀!由我们自己来起名称!相当于一个别名
uri: 指定标签库的位置!
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 前缀的用法<c:if>

7. JSP的九大内置对象

	对象名			真实类型						作用
* pageContext		PageContext					当前页面共享数据,还可以获取其他八个内置对象

* request			HttpServletRequest			一次请求访问的多个资源(转发)

* session			HttpSession					一次会话的多个请求间,
												即HttpSession类的对象,
 												不是每个JSP页面中都可以使用,
 												如果在某个JSP页面中设置
												<%@page session=false%>,
												说明这个页面不能使用session。
												
* application		ServletContext				所有用户间共享数据

* response			HttpServletResponse			响应对象

* page				Object						当前页面(Servlet)的对象  this

* out				JspWriter					输出对象,数据输出到页面上,
												类似于response.getWriter(),
												用来向客户端发送文本数据;
											
* config			ServletConfig				Servlet的配置对象

* exception			Throwable					异常对象,只有在错误页面中可以使用这个对象;
  • pageContext的作用
Servlet中有三大域,而JSP中有四大域!
ServletContext:整个应用程序
session:整个会话(一个会话中只有一个用户)
request:一个请求链!
pageContext:一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据!

域对象
代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE);
全域查找:pageContext.findAttribute(“xxx”);从小到大,依赖查找!
获取其他8个内置对象:

8. JSP的动作标签

  • 动作标签是由tomcat(服务器)来解释执行!而html标签由浏览器来执行!

8.1 include

例如:<jsp:include page=“xxx”/>,用来包含指定的页面。

  • 假如有两个jsp. 分别为a.jsp和b.jsp,他们分别编码成Servlet,然后在执行Servlet时才会执行包含过程。这也是include指令与include标签的区别。

  • 注意:<jsp:include page="<%=myfile%>">,这是可以的!因为include指令是在执行时才完成的包含,在执行时已经可以确定myfile这个变量的值。

  • 该标签内部使用的是RequestDispatcher.include()方法完成的包含

8.2 forward

例如:<jsp:forward page=“xxx”/>,用来转发到指定页面

例如在a.jsp中存在如下内容:<jsp:fowrad page=“b.jsp”/>

a.jsp中的内容不会显示在浏览器上,而只是显示b.jsp的内容。而且在<jsp:forwad >标签下面的内容不会被执行。

8.3 param

<jsp:param>操作被用来以“名-值”对的形式为其他标签提供附加信息。
它和<jsp:include><jsp:forward><jsp:plugin>一起使用,方法如下:
<jsp:param name=”paramName” value=”paramValue”/>
其中,name为与属性相关联的关键词,value为属性的值。
  • 用来像其他页面传递信息。

例如:

<jsp:include page="come.jsp">//加载come.jsp
    <jsp:param name="number" value="<%=i%>" />//传递参数
</jsp:include>

8.4 其他

语法 描述
jsp:include 用于在当前页面中包含静态或动态资源
jsp:useBean 寻找和初始化一个JavaBean组件
jsp:setProperty 设置 JavaBean组件的值
jsp:getProperty 将 JavaBean组件的值插入到 output中
jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin 用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element 动态创建一个XML元素
jsp:attribute 定义动态创建的XML元素的属性
jsp:body 定义动态创建的XML元素的主体
jsp:text 用于封装模板数据

9. JSP的注释

语法 描述
<%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译
<!-- 注释 --> HTML注释,通过浏览器查看网页源代码时可以看见注释内容
<\% 代表静态 <%常量
%\> 代表静态 %> 常量
\' 在属性中使用的单引号
\" 在属性中使用的双引号
发布了361 篇原创文章 · 获赞 127 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41879343/article/details/103933952