什么是JSP

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

  • JSP是一种Java servlet【JSP 的本质就是一个servlet】,主要用于实现Java web应用程序的用户界面部分。
  • 它和servelt 一样 可以提供 动态的HTML 响应。 不同的是 Servlet 以java代码为主,
    JSP 以 html 为主 然后内嵌少量的java 代码。   

一个JSP页面分为以下几部分组成:

一、静态内容:HTML静态文本

二、JSP指令

语法:<%@     %>

  • include指令:把另外一个文件完全包含入当前文件中

 <%@ include file = " Filename" %>

  • page指令:通过设置内部的多个属性来定义整个页面的属性

 语法:<%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>

 常用属性:

 language:指定JSP页面使用的脚本语言,默认为Java。

 import:通过该属性来引用脚本语言中使用得到的类文件。

 contentType:用来指定JSP页面所采用的编码方式,默认为text/html。

 举例如下:

扫描二维码关注公众号,回复: 3868562 查看本文章

 

  • 注释:

 HTML的注释:<!-- 这是注释,但客户端可以查看到 -->

 JSP注释:<%-- 这也是注释,但客户端不能查看到 --%>

 在JSP脚本中注释: <% //单行注释 %>

          <% /*多行注释 */ %>

三、JSP脚本元素和内置对象

  • JSP脚本元素:用来嵌入Java代码的,主要用来实现页面的动态请求

(1)小脚本:在JSP页面里嵌入一段Java代码

 语法:<% Java代码 %>

 

(2)表达式:对数据的表示,系统将其作为一个值进行计算和显示

 语法:<% = Java表达式/变量 %>

 

(3)方法声明:在JSP页面中定义Java方法

 语法:< % ! Java 代码 %>

 

  •  JSP内置对象:

 JSP 内置对象是 Web 容器创建的一组对象

 JSP 内置对象是可以直接在JSP页面使用的对象 ,无需使用“new”获取实例

 JSP 内置对象的名称是 JSP 的保留字

(1)out对象:用于向客户端输出数据

 常用方法:

 print():在页面中打印出字符串信息

  

(2)request对象:主要用于处理客户端请求

 常用方法:

 

(3)response对象:用于响应客户请求并向客户端输出信息

 常用方法:

 void sendRedirect (String location):将请求重新定位到一个不同的URL

(4)session对象:用来存储有关用户会话的所有信息

 常用方法:

 void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到session中

 

 Object getAttribute(String key):根据名称去获取session中存放对象的值

 

访问控制就是基于session来完成的。

(5)application对象:类似于系统的“全局变量”,用于实现用户之间的数据共享

 常用方法:

 void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到application中

 

 Object getAttribute(String key):根据键去获取application中存放对象的值

 

四、JSP动作:

  • 包含动作 

   <jsp:include   page="被包含页面的路径" >  9
   用来包含指定的 jsp 或者  html 页面,这个包含动作 也叫动态包含。 它会先把被包含页面 
   转换成对应的servlet  然后 再进行包含。所以这样有两个servlet 产生。
  包含页面 还可以向被包含的页面传递参数数据。   使用 <jsp:param  name=""  value="" />


<jsp:include page="demo1.jsp">
    <jsp:param value="liweijie" name="teacherName"/>
</jsp:include>

  

  • 转发动作   
   <jsp:forward   转发动作 
   <jsp:param   name=""  value="" />

<jsp:forward page="demo6.jsp">
         <jsp:param value="gggg" name="username"/>
         <jsp:param value="27" name="age"/>
 </jsp:forward>
<body>
    //demo6文件
  <h1> demo6.jsp </h1>
  username:<%=request.getParameter("username") %>
  age:<%=request.getParameter("age") %>
</body>

静态包含命令:<%@include file="xxx.jsp" %>,主页面会把子页面的源代码包含进来,然后整体编译成servlet。

动态包含命令:<jsp:include page="xxx.jsp">,主页面和子页面分别单独编译成相应的servlet。

所以,当子页面的代码发生变化后,通过静态包含命令引入该子页面的主页面需要重新编译。而通过动态命令包含该子页面的主页面就不需要重新编译。举个例子,现在有三个页面,分别为A.jsp,B.jsp和C.jsp。

在A.jsp中,静态包含<%@include file="C.jsp" %>

在B.jsp中,动态包含<jsp:include page="C.jsp">

那么,当C.jsp被修改之后,就需要重新编译C.jsp和A.jsp,而B.jsp不需要重新编译。

因此,对于内容会经常发生变化的子页面,通常使用动态包含命令来引用。

jsp页面中,通常需要包含各种标签库,例如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

为了管理的方便,我们把这部分代码抽出来,放到taglib.jsp中,其他的jsp页面包含taglib.jsp就可以了。这个时候需要特别注意的是,只能使用静态包含。原因是,每个jsp页面都用到了这些标签,如果使用动态包含,那么这些jsp页面和taglib.jsp是分别编译的,编译这些jsp页面的时候,编译器就不认识这些标签,只把这些标签当作文本来处理,虽然编译通过,但是会导致运行时错误。

猜你喜欢

转载自blog.csdn.net/q5706503/article/details/83549051
今日推荐