JSP基础详解

1.JSP的地位

JSP结合了Servlet和JavaBean技术,充分继承了Java的众多优势,包括一次编写到处运行、高效的性能和强大的可扩展性。如今,JSP被广泛使用于Web应用开发,被认为是当今最有前途的Web技术之一。

2.JSP工作原理

JSP本质上就是Servlet。当JSP被第一次请求时,Web服务器上的JSP容器将其转化为相应的Servlet文件,再编译为相应的Servlet类文件,并且被装载和实例化。本次以及以后对于此JSP的请求都将通过调用已经实例化的Servlet对象中的方法来产生响应。这就是为什么在访问JSP页面时,第一次响应速度很慢而后来很快的原因。

3.JSP指令标记

JSP的指令标记是通知JSP容器的消息,其不直接生成输出。JSP一共3种指令标记:page指令、include指令和taglib指令。page指令用于控制从JSP页面中生成Servlet的属性和结构;include指令用于包含一个文件;taglib指令用于自定义标记。

(1)page指令

page指令通常位于JSP页面的顶端,是用来设置整个JSP页面的相关属性和功能的一种指令,作用于整个JSP页面,包括使用include指令包含进来的其他文件。其基本语法为:

</pre><pre name="code" class="html"><%@page attribute1="value1";attribute2="value2"……%>

(2)include指令

网站中经常会出现重复性页面,如许多网站每个网页中都包含了一个导航栏。include指令是解决此类问题的有效方法,使得开发者们不必花时间去为每个页面复制相同的XHTML/HTML代码。include中包含的文件在本页面编译时会被引入,其基本语法如下:

<%/@include file="url"%>
(3)taglib

taglib指令用于提供类似于XML中的自定义新标记的功能,其基本语法如下:

<%@taglib url="relative taglibURL" prefix="taglibPrefix"%>
其中,url用于指明自定义标记库存放的相对URL地址;prefix用于区分不同标记库中具有相同标记名的标记,类似于Java中的包名。
4.JSP动作元素

JSP动作元素是一个XML元素,用来控制JSP容器的动作,可以动态插入文件、重用JavaBean组件、导向另一个页面等。在JSP中可以使用3种动作元素,即:标准动作元素,JSP标准标签库动作元素和自定义动作元素。

在JSP中有7种标准的动作元素,也称为行为元素

<jsp:include>:在当前页面添加动态和静态的资源

<jsp:forward>:引导请求进入新的页面

<jsp:plugin>:连接客户端的Applet和Bean插件

<jsp:param>:提供其他JSP动作的名称/值信息

<jsp:useBean>:应用JavaBean组件

<jsp:getProperty>:将JavaBean的属性插入到输出中

<jsp:setProperty>:设置JavaBean组件的属性值

5.JSP内置对象

(1)request对象

request对象代表来自客户端的请求(如在form表单中填写的信息等),是最常用的对象。常用方法如下:

JSP基础详解_第1张图片

用户登录界面搭建

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>用户登录页面</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    <h1>用户注册</h1>
    <hr>
    <% 
       int number=-1;
       //说明用户第一次访问页面,计数器对象还未创建
       if(application.getAttribute("counter")==null)
       {
           application.setAttribute("counter", 0);
       }
       number = Integer.parseInt(application.getAttribute("counter").toString());
       number++;
       application.setAttribute("counter", number);
    %>
 
    <form name="regForm" action="request.jsp" method="post">
    <table>
      <tr>
        <td>用户名:</td>
        <td><input type="text" name="username"/></td>
      </tr>
      <tr>
        <td>爱好:</td>
        <td>
           <input type="checkbox" name="favorite" value="read">读书
           <input type="checkbox" name="favorite" value="music">音乐
           <input type="checkbox" name="favorite" value="movie">电影
           <input type="checkbox" name="favorite" value="internet">上网
        </td>
      </tr>
      <tr>
         <td colspan="2"><input type="submit" value="提交"/></td>
      </tr>
    </table>
    </form>
  
    <left>
             您是第<%=number %>位访问本页面的用户。
    </left>
  </body>
</html>
JSP基础详解_第2张图片

request显示用户请求信息

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>request页面</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    <h1>request内置对象</h1>
    <% 
       request.setCharacterEncoding("utf-8"); //解决中文乱码问题,无法解决URL传递中文出现的乱码问题。
       request.setAttribute("password", "123456");

    
    %>
        用户名:<%=request.getParameter("username") %><br>   
        爱好 :<% 
           if(request.getParameterValues("favorite")!=null)
           {
	           String[] favorites = request.getParameterValues("favorite");
	           for(int i=0;i<favorites.length;i++)
	           {
	              out.println(favorites[i]+"  ");
	           }
	        }
        %> <br>
         密码:<%=request.getAttribute("password") %><br> 
         请求体的MIME类型:<%=request.getContentType() %><br>
         协议类型及版本号:  <%=request.getProtocol() %><br>
         服务器主机名 :<%=request.getServerName() %><br>
         服务器端口号:<%=request.getServerPort() %><BR>
         请求文件的长度 :<%=request.getContentLength() %><BR>
         请求客户端的IP地址:<%=request.getRemoteAddr() %><BR>
         请求的真实路径:<%=request.getRealPath("request.jsp") %><br>
         请求的上下文路径:<%=request.getContextPath() %><BR>         
                 
         
                   
  </body>
</html>
JSP基础详解_第3张图片

(2)response对象

response对象是java.servlet.ServletResponse接口中一个针对HTTP协议而实现的子类,具有page作用范围。response对象是表示服务器对请求的响应的HttpServletResponse实例,包含服务器向客户端发出的响应信息。response对象常用方法如下:

JSP基础详解_第4张图片

在JSP页面中,可以通过调用response对象的方法来设置响应信息。通常,使用response对象来完成的操作有3个:输出缓冲、设置响应报头和重定向

程序示例

<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%
    response.setContentType("text/html;charset=utf-8"); //设置响应的MIMI类型
    
    out.println("<h1>response内置对象</h1>");
    out.println("<hr>");

    PrintWriter outer = response.getWriter(); //获得输出流对象
    outer.println("大家好,我是response对象生成的输出流outer对象");
  
%>
JSP基础详解_第5张图片

请求转发和请求重定向的区别

1,请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保持,地址栏的URL地址会改变。

2,请求转发:服务器行为,request.getRequsetDispatcher().forward(requset,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。(服务器内部转发,所有客户端看不到地址栏的改变)

(3)out对象

out是向客户端输出流进行写操作的对象,主要应用在脚本程序中,会通过JSP容器自动转换为java.io.PrintWriter对象。在JSP页面中,可以用out对象把信息发送到客户端的浏览器上。常用方法如下:

JSP基础详解_第6张图片

程序实例:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>out内置对象</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   <h1>out内置对象</h1>
    <% 
       out.println("<h2>静夜思</h2>");
       out.println("床前明月光<br>");
       out.println("疑是地上霜<br>");
       out.println("举头望明月<br>");
       out.println("低头思故乡<br>");
    
    %>
        缓冲区大小:<%=out.getBufferSize() %>byte<br>
        缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
       是否自动清空缓冲区:<%=out.isAutoFlush() %><BR>    
  </body>
</html>
JSP基础详解_第7张图片

(4)session对象

session对象表示客户端与服务器端的一次会话。这里的会话是指一段时间内单个客户与Web服务器一连串相关的交互过程。在一个会话中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。每个客户都对应一个session对象,用来存放与这个客户相关的信息。

session对象的设定方法:

<%@page session="true|false">

常用方法如下:

JSP基础详解_第8张图片

(5)application对象

有的服务器需要管理面向整个Web应用的参数,使每个客户都能获得同样的参数值。application对象可以解决此类问题,负责提供应用程序在服务器中运行时的一些全局信息

常用方法如下:

JSP基础详解_第9张图片

(6)page对象

page对象是this变量的别名,是一个包含当前Servlet接口引用的变量,设置page对象是为了执行当前页面的应答请求

常用方法如下:

JSP基础详解_第10张图片

(7)pageContext对象

pageContext对象能够存取其他内置对象,当内置对象包括属性时,也可以读取和写入这些属性。

注意:pageContext是一个抽象类,实际运行的JSP容器必须扩展它才能被使用

主要对象如下:

JSP基础详解_第11张图片

(8)exception对象

简单的说,exception对象就是异常对象,与错误不同,这里的异常是指Web应用程序中所能够识别并处理的问题。在Java中,通常使用try、catch等关键字来处理异常。

常用方法如下:

JSP基础详解_第12张图片







你可能感兴趣的:(jsp,内置对象,请求转发,web应用开发,请求重定向)