JSP是一种运行在服务器端的脚本语言,是用来开发动态网页的技术,它是JAVA Web 程序开发的重要技术。本章介绍JSP技术的相关概念以及如何开发JSP程序,主要内容包括JSP技术简介、JSP的处理过程、JSP语法、JSP的内置对象、每种对象的使用方法和使用技巧,以及简单web应用程序的开发设计。

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。

 举例如下:

<% @ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=GBK" %>

注释:
 HTML的注释:

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

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

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

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

JSP脚本元素:用来嵌入Java代码的,主要用来实现页面的动态请求
(1)小脚本:在JSP页面里嵌入一段Java代码

 语法:<% Java代码 %>

<html>
<%
    out.println(30*20);
%>
</html>

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

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

<html>
    <%=30*20%>
</html>

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

 语法:< % ! Java 代码 %>

 

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

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

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

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

 常用方法:

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

<%
    out.print("hello USTH");
%>

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

 常用方法:

 

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

 常用方法:

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

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

 常用方法:

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

session.setAttribute("name","admin");

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

String name=(String)session.getAttribute("name");

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

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

 常用方法:

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

application.setAttribute("LOGINED_USER",new ArrayList();

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

 

if(application.getAttribute("LOGINED_USER")!=null){
    List loginedUsers = (List) application.getAttribute("LOGINED_USER");
}

四、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页面的时候,编译器就不认识这些标签,只把这些标签当作文本来处理,虽然编译通过,但是会导致运行时错误。

一、JSP动作

动作是特殊的标记,通过一个动作标记可以实现多行Java代码实现的效果。可以动态插入文件、重用JavaBean组件、导向另一个页面等。

动作元素和指令元素不同,动作元素是在客户端请求时动态执行的,每次有客户端请求时可能都会被执行一次,而指令元素是在编译时被编译执行,它只会被编译一次。

jsp:useBean

useBean动作用于创建引用,并将现有的Bean组件嵌入JSP。

jsp:useBean>

– useBean动作用于创建引用,并将现有的Bean组件嵌入JSP 。

– useBean的语法:

<jsp:useBean id=”BeanName” class=”BeanClass” scope=”page|request|session|application”/>

例如,<jsp:useBean id=“book” class=“com.web.beans.Book” scope=“page” />

在执行时,Web容器会检查这个JavaBean的对象是否已经存在,如果存在就使用存在的JavaBean对象,反之生成一个新的JavaBean对象。相对于:

<% com.web.beans.Book book=null;

 <% com.web.beans.Book book=null;

      if(pageContext.getAttribute(“book”)==null){

             book=new com.web.beans.Book();

             pageContext.setAttribute(“book”,book);

      }else{

            book=(Book)pageContext.getAttribute(“book”);

      }

%>

I jsp实现 <jsp:useBean id=”book” class=”com.csdn.beans.Book” scope=”session”/>

II java代码 Book book=session.getAttribute(“book”);

If(book==null){

       Book book=new Book();

       Session.setAttribute(“book”,book);

}

Return book;

上面的I II这两个功能一样

jsp:setProperty

setProperty动作用于设置useBean中指定的Bean的属性的值。setProperty动作指定JavaBean的名称、属性名、属性值和参数,用于赋给Bean的属性。

setProperty的语法:

<jsp:setProperty name="BeanAlias"    
    property="PropertyName"     value="Value"

       param="Parameter“

/>

Out.println(bean对象.getxxxx()); 具有输出的功能

<jsp:setProperty name=“book” property=“name” value=“Java SE程序设计精讲”/>
等价于<%book.setName(“Java SE程序设计精讲”);%>

(2)<jsp:setProperty name=“book” property=“name” param=“bookName”> 用request对象中的参数bookName的值给JavaBean中的name属性赋值。等价于
<%book.setName(request.getParameter(“bookName”))%>

(3)<jsp:setProperty name=“book” property=“name”>
request对象中的参数名称和JavaBean中属性名一样。等价于<%book.setName(request.getParameter(“name”))%>

星号(*)字符可用于指定Bean的所有属性。

<jsp:setProperty name=“book” property=“*” />

jsp:include

include动作用于将其他HTML页面或JSP页面中的内容合并到当前页面,或将其中的文件插入到当前页面。

不带参数的include动作:

<jsp:include page=”weburl” flush=”true”/>

带参数的include动作:

<jsp:include page=”weburl” flush=”true”>

<jsp:param name=”ParamName” value=”ParamValue”/>

jsp:include

二、JSP有三种注释方式

HTML注释(输出注释):指在客户端查看源代码时能看见注释。例如,

JSP页注释(隐藏注释):指注释虽然写在JSP程序中,但不会发送给客户,因此在客户端查看源代码时不能看见注释。这样的注释在JSP编译时被忽略掉。

<%–this is a JSP comment.it will only be seen in jsp code–%>

Java注释:只能出现在Java代码区中,不允许直接出现在页面中。//单行注释 /多行注释/


一个好奇的人