• JSP学习初体验


    JSP简介:

    1)JSP--Java Server Pages

    2)拥有servlet的特性与优点(本身就是一个servlet)

    3)直接在HEML中内嵌JSP代码

    4)JSP程序由JSP Engine先将它转换成servlet代码,接着将它编译成类文件载入执行

    5)只有当客户端第一次请求执行JSP时,才需要将其转换、编译

    JSP的优点:

    1)优良的性能

     优于CGI、PHP、ASP

    2)平台无关性

     操作系统无关,web服务器无关

    3)可扩展性

     tag的扩展机制,简化页面开发

    JSP编程--基本语法:

    JSP传统语法:

    1)Declaration:

    基本语法:
    <%!  %>
    说明:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行。此部分声明的变量会转化为SERVLET的成员变量,函数只能在此处声明。
    例:
    <%!
    int i;
    public void setName(){… …}
    %>

     【注意】:<% %>这种形式声明的变量和方法是局部的,例如<% int count1=0 %>

                   <%= xxx %>:原样输出xxx的内容
    2)Scriptlet:

    基本语法:
    <%程序代码区%>
    可以放入任何的Java程序代码,此部分声明的变量为局部变量,在service()方法里
    例:
    <%
    for (int i=0;i<10,i++)
    {
     … …
    }
    %>

    3)注释格式:

    1)<%--...  ...--%>
    2)<%//...  ...%>
    3)<%/*...  ...*/%>

    4)表达式:

    基本语法:
    <%=… …%>
    =后面必须是字符串变量或者可以被转换成字符串的表达式
    不需要以;结束,只有一行
    例:
    <%=“hello world”%>
    <%=i+1%>
    <%=request.getParameter(“name”)%>

    【注意】:形如http://localhost:8888/test/Expressions.jsp?testParam=abc%20de,问号?后面的testParam=abc%20de是传递给jsp的参数,如果参数内包含空格,则会用%20来进行替换;

    5)Directive:编译期指令

    Directive(编译指令)相当于在编译期间的命令
    格式:
    <%@Directive 属性=“属性值”%>
    常见的Directive:
    page
    include
    taglib

    详细了解三种常见的Directive:

    5.1 Directive-page:

    【注意】比较重要的几个属性:import、errorPage、isErroPage、contentType

    下面分别举例说明

    import和contentType

    <%@Page import="java.util.*"%>
    
    <%@page contentType="text/html;charset=gb2312"%>
    <%= new Date() %>
    <%
    out.println("你好");
    %>

    ErrPage和isErrorPage:友好的出错界面,当出现错误的时候提供给用户ErrPage的页面

    <%-- *******ErrPage.jsp******* --%>
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page is ErrorPage="true" %>
    <HTML>
    <BODY TEXT="red">
    
    错误信息:<%= exception.getMessage() %>
    </BODY>
    </HTML>

    5.2 Directive-include:用于包含非动态的代码,不能向fileURL中传递参数,即不能出现形如abc.jsp?user=aaa的形式

    将指定的JSP程序或者HTML文件包含进来
    格式:
    <%@include file=“fileURL%>
    JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生成一个java和class)
    限制:
    不能向fileURL中传递参数
    不能abc.jsp?user=aaa

    6)Action:运行期间的指令

    Action(动作指令)在运行期间的命令
    常见的:
    jsp:useBean
    jsp:setProperty
    jsp:getProperty
    jsp:include
    jsp:forward
    jsp:param
    jsp:plugin
    嵌入applet

    6.1 jsp:inlcude/jsp:param

    用于动态包含JSP程序或HTML文件等
    除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。
    格式:
    <jsp:include page=“URLSpec” flush=“true”/>
    <jsp:include page=“URLSpec” flush=“true”>
         <jsp:param name=“ParamName” value=“paramValue”/>
    </jsp:include>
    jsp:param用来设定include文件时的参数和对应的值
    
    和编译指令include的区别:
    include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入
    Include不能带参数, 而<jsp:include>可以。
    动态包含的文件和被包含文件用的是同一个request对象。产生两个class文件

    6.2 jsp:forward/jsp:param
    用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
    格式:
    <jsp:forward page=“urlSpec” flush=“true”/>
    <jsp:forward page=“urlSpec”>
     <jsp:param name=“paramName” value=“paramValue”/>
    </jsp:forward>
    <jsp:param>用于指定参数和其对应的值
    
    Forward的页面和forward到的页面用的是同一个request
    与此相对应的是
    response.sendRedirect

    6.3 <jsp:forward>与response.sendRedirect的区别(重点:请求的重定向和请求的转发)

    用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
    格式:
    <jsp:forward page=“urlSpec” flush=“true”/>
    <jsp:forward page=“urlSpec”>
     <jsp:param name=“paramName” value=“paramValue”/>
    </jsp:forward>
    <jsp:param>用于指定参数和其对应的值
    
    Forward的页面和forward到的页面用的是同一个request
    与此相对应的是
    response.sendRedirect

    两者的区别可以用下面的图示描述:

    用蓝色标注的是forward方式请求页面(前后是同一个request),用绿色标注的是sendRedirect方式(不同的request)

    6.4 jsp:usebean(不要使用裸体类,将bean放到包中,如com.itcast.useBean)

    通过jsp:useBean,可以在JSP中使用定义好的Bean
    Bean的基本要素:
    必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器
    Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写
    通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写
    基本用法:
    test.jsp/CounterBean.java 不要使用裸体类(规范要求)
    
    jsp:useBean各项参数含义:
    id:对象实例名称
    scope:Bean作用的范围,默认为page,对整个jsp页面有效
    class:Bean类名称(全名)
    type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类
    Scope各项参数的意义:
    page:仅涵盖使用JavaBean的页面
    request:有效范围仅限于使用JavaBean的请求
    session:有效范围在用户整个连接过程中(整个会话阶段均有效)
    application:有效范围涵盖整个应用程序。也就是对整个网站均有效
    
    jsp:setProperty的格式:
    <jsp:setProperty name=“beanName” 
     property=“propertyName” |property=“*”
    value=“property value” |param=“paramName”/>
    相当于beanName.setPropertyName(value)方法调用(setXxx()方法)
    jsp:getProperty的格式:
    <jsp:getProperty name=“beanName” property=“propertyName”/>
    相当于beanName.getPropertyName()方法调用(getXxx()方法)
    
    建立表单参数和Bean属性之间的关联
    通过param指定表单元素的名称,通过perperty指定对应的Bean属性名称,由此建立这两个变量的关联
    通过*来设置所有属性和输入参数之间的关联
    在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据

    7)JSP内置对象(常用的六个内置对象和常用的方法)

    out
    request
    response
    pageContext 用的很少
    session
    application
    config 用的很少
    exception
    Page用的很少

    7.1 JSP--out

    常用方法:

    println():向客户端输出各种类型数据(常用)
    newLine():输出一个换行符(常用)
    close():关闭输出流
    flush():输出缓冲区里的数据
    clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端
    clear():清除缓冲区里的数据,但不把数据输出到客户端
    getBufferSize():返回缓冲区的大小

    7.2 JSP-request

    可以用此对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客户端的主机名称等。

    常用方法:

    getMethod():返回客户端向服务器端传送数据的方法
    getParameter(String paramName):返回客户端向服务器端传送的参数值,该参数由paramName指定
    getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration)
    getParameterValues(String  name):获得指定参数的所有值,由name指定
    getRequestURI():获得发出请求字符串的客户端地址
    getRemoteAddr():获取客户端的IP地址
    getRemoteHost():获取客户端机器名称
    getServerName():获取服务器的名字
    getServletName():客户端所请求的脚本文件路径
    getServerPort():获取服务器端的端口
    对应类: javax.servlet.http.HttpServletRequest

    7.3 JSP-response

    表示的是返回给客户端的响应
    是javax.servlethttp.HttpServletResponse接口的一个实例
    经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向

    常用方法:

    addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定的信息
    addHeader(String name,String value):添加HTTP头信息,该Header信息将发送到客户端
    containsHeader(String name):判断指定名字的HTTP文件头是否存在
    sendError(int):向客户端发送错误的信息(例如404、505)
    sendRedirect(String url):重定向JSP文件

    sendRedirect和<jsp:forward>的区别
    sendRedirect通过客户端发起二次申请,不同的request对象
    Jsp:forward是同一个request,在服务器内部转发
    setContentType(String contentType):设置MIME类型与编码方式

    7.4 JSP-Cookie

    Http协议的无连接性要求出现的一种保存C/S间状态的机制

    Cookie:保存到客户端的一个文本文件,与特定客户相关

    Cookie以"名-值"对的形式保存数据

    通过getName和getValue的方式得到相应的名字和值

    7.5 JSP-session

    <% @page session="true"%>(默认)

    --表示session功能已经在jsp页面中启动

    session常用的方法:

    void setAttribute(String name,Object value)
    
    Object getAttribute(String name)
    
    boolean isNew()

    Servlet和JSP的通信
    1)从JSP调用Servlet可用<jsp:forward>,请求信息自动传递到servlet,或者通过sendirect;

    <!-- Forward to a servlet, 这个servlet存放在WEB-INF的servlet目录下 -->
            <jsp:forward page="/servlet/ServletToJSP">
         
    </jsp:forward>

    2)从Servlet调用JSP可以使用RequestDispatcher接口的forward(req, resp)方法,请求信息需要显示传递;

     1 import java.io.IOException;
     2 import javax.servlet.ServletException;
     3 import javax.servlet.http.HttpServlet;
     4 import javax.servlet.http.HttpServletRequest;
     5 import javax.servlet.http.HttpServletResponse;
     6  
     7 public class ServletToJSP extends HttpServlet {
     8     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     9          
    10         // 设置属性并将它分发给/servlet_jsp/ServletUseJsp.jsp处理
    11         resp.setContentType("text/html;charset=gb2312");
    12         req.setAttribute("servletName", "ServletToJSP");
    13         // RequestDispatcher getRequestDispatcher(String path):
    14         // Returns a RequestDispatcher object that acts as a wrapper for the resource located at the given path. 
    15         getServletConfig().getServletContext().getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp").forward(req, resp);
    16     }
    17 }

    代码15行中要跳转到的JSP页面:servlet_jsp/ServletUseJsp.jsp

    <%@page contentType="text/html;charset=gb2312" %>
     
        <meta context="text/html;charset=gb2312">
            <title>Servlet使用JSP</title>     
            <h2>Servlet使用JSP的例子</h2>
            <h2>这个页面是被Servlet调用的</h2>
  • 相关阅读:
    [iOS] 在Storyboard中使用GHSidebarNav侧开菜单控件
    [iOS] UIScrollView与软键盘配合心得——点击空白处隐藏软键盘(完美方案,不增代码)
    MySQL 表解锁
    centos7 两种定时任务
    代码统计工具git_stats部署
    Linux inode索引节点使用率100%解决
    IKVM 0.42.0.3 .NET平台上的Java实现
    Centos7最小化安装后(minimal)安装图形界面
    服务器linux发行版排名
    word为什么总是出现未响应
  • 原文地址:https://www.cnblogs.com/ysw-go/p/5904238.html
Copyright © 2020-2023  润新知