JSP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP相关的知识,希望对你有一定的参考价值。
1 什么是jsp?
- jsp全称是Java Server Page,它和Servlet技术一样,都是sun公司定义的一种用于开发动态web资源的技术。
- jsp实际上就是Servlet。
- jsp这门技术最大的特点在于,写jsp就像在写html,但它和HTML相比,HTML只能为用户提供静态的数据,而JSP技术允许在页面中嵌套java代码,为用户提供动态数据。
- 为什么jsp技术也是一种动态的web资源的开发技术?
- 因为jsp技术允许在页面中嵌套java代码,以产生动态数据,并且web服务器在执行jsp的时候,web服务器会传递web相关的对象给jsp,jsp通过这些对象,可以和浏览器进行交互,所以jsp也是一种动态的web资源的开发技术。
2 HTML、Servlet和jsp
- HTML:静态页面,不能包含java代码,只能有HTML相关的标记。
- Servlet:可以写java戴安,做页面的输出,但是输出页面效率实在太低。
- JSP:有HTML和Servlet的特点,JSP既可以显示页面,也能包含java代码。
3 输出当前的时间
<%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>显示当前时间</title> </head> <body> <%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())%> </body> </html>
4 JSP的原理和生命周期
- JSP就是Servlet
5 JSP的语法
5.1 模板元素
- JSP中的模板元素是指JSP中的那些HTML。开发的时候先编写模板元素,因为它们决定了页面的布局和外观(前端现在很重要哦)。
5.2 java程序片段
- <%java程序%>,出现在JSP对应的service方法中。
5.3 java表达式
- <%=表达式%>
5.4 jsp声明
- <%! %>
- 作用:
- 声明变量,方法和静态方法,但开发中很少使用。因为Servlet是线程不安全。
5.5 jsp的注释
- <%-- 注释的内容 --%>
6 jsp指令
6.1 jsp指令的简介
- 指令是为jsp引擎设计的,只是告诉jsp引擎如何jsp页面中的其它部分(非指令部分)。
- 基本语法:<%指令 属性1="值1" 属性2="值2" %>
- 一般jsp指令都放在页面的顶部,但不是必须的。
- 指令的属性可以写一个指令中,也可以分开写。
- ①
- <%指令 属性1="值1" 属性2="值2" %>
- ②
- <%指令 属性1="值1" %>
- <%指令 属性2="值2" %>
- ①
6.2 page指令
- 属性:
- language:告知引擎,脚本用的是java,默认不写也可以。
- import:告知引擎,导入那些包。
- pageEncoding:告知引擎,翻译jsp时所用的码表。
- 常用形式:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
6.3 include指令(静态包含)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>显示当前时间</title> </head> <body> <%@include file="demo.jsp"%> </body> </html>
- 在翻译之前,先将demo.jsp中的源代码合到index.jsp中,然后直接翻译index.jsp。
6.4 taglib指令
- 导入外部的标签:比如自定义标签以及el和jstl表达式。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 其中:
- uri:表示外部标签的uri的地址。
- prefix:表示前缀。
7 jsp中的转发和包含
7.1 转发
- 内置标签
<jsp:forward page="demo.jsp"> <jsp:param name="name" value="hehe"/> </jsp:forward>
7.2 包含
- 静态包含:
<%@include file="demo.jsp"%>
- 动态包含:
<jsp:include page="demo.jsp"/>
8 JSP的九大内置对象
jsp隐含对象名称 | 对应的类型 |
request | javax.servlet.http.HttpServletRequest |
response | javax.servlet.http.HttpServletResponse |
session | javax.servlet.http.HttpSession |
application | javax.servlet.ServletContext |
config | javax.servlet.ServletConfig |
page | javax.servlet.http.HttpServlet |
exception | java.lang.Throwable |
out | javax.servlet.jsp.JspWriter |
pageContext | javax.servlet.jsp.PageContext |
9 PageContext
- 本身就是一个域范围,还能其他3个域对象的范围。
- 页面范围:
void setAttribute(String name,Object value)
void removeAttribute(String name);
Object getAttribute(String name)
10 JSP的最佳实践
- 不管是JSP还是Servlet,虽然都可以用于开发动态的web资源,但由于这2个技术各有各的特点,在长期的软件实践中,人们逐渐把Servlet作为web应用中的控制器组件来使用,而把jsp技术作为数据显示模板来使用。
- 其原因就在意,程序的数据通常要美化后再输出。
- 让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。
- 让Servlet既产生数据,又在里面嵌套HTML代码美化数据,同样会导致程序可读性差,难以维护。
- 因为最好的办法就是根据这2门技术的特点,让它们各自负责各自的擅长的,Servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示由jsp来做。
- 其中,除了jsp/Servlet这种开发模式,还有一种就是使用HTML+Freemaker,这样可以强制的在页面中不让程序员使用java代码。
以上是关于JSP的主要内容,如果未能解决你的问题,请参考以下文章