zoukankan      html  css  js  c++  java
  • JSP页面的基本结构

    一:一个JSP页面由以下基本元素组成。
    (1)HTML标签
    (2)CSS
    (3)变量和方法
    (4)Java代码段
    (5)JSP动作和指令
    (6)其他脚本元素(如Javascript)
    二:JSP的基本标签
    1.<%或<jsp开头 ,%>或>结尾   推荐<% %>
    2.变量声明 <%!或<%开头 ,%>结尾 推荐<%!  %>
    3.JSP代码段 <%开头 ,%>结尾   
    4.JSP表达式 <%=开头  %>结尾
    三:JSP三种注释
    1.隐藏注释  <% --注释语句 --%>   被JSP页面完全忽略
    2.HTML注释 <!-- 注释语句-->
    3.Java注释 <% /*注释语句*/ %>
    四:变量和方法的声明
    1).<!-- 声明变量 -->
    1.作用范围:只在本JSP页面中有效
    2.<%!  %>中声明
    3.命名方法与JAVA一样,必须以分号结尾
    4.可以直接使用<% @ page    %>中声明的变量
    <%! int sum=0; %>
    2).<!-- jsp代码段 -->
    1.在请求期间执行可以使用JSP页面所定义的变量,方法,表达式或者JavaBean.
    2.脚本定义的变量和方法在当前整个页面有效,但不会被其他线程共享,用户对该变量的不会影响其他用户,当变量所在的页面关闭时该变量就会被销毁
    1.普通代码段
      <% for(int i=1;i<=100;i++){
      sum=sum+i;
      ++i; }
    %>
    2.含方法的代码段
    <%! int a=0; %>
      <%! int add(){
      a++;
      return a;
      }
      %>
      <p><%= add() %>
    3.含对象的代码段
    <body>
      <%! class test{
           int add(int a){
      a++;
      return a;
       }  } %>
      <%! test test1=new test();int b=0; %>
      <% b=test1.add(3); %>
      <p><%=b %>
    3).<!--表达式-->
    1.向页面输出内容
    2.生成动态的链接地址
    3.动态指定form表单处理页面
    <p>1加到100的和为:<%=sum %></p>
    五:JSP常用指令
    1).page指令(12个属性)
    1.language属性-指定JSP页面使用的脚本语言
    <% @page language="java" %>
    2.extends属性--指定JSP编译器父类的完整限定名(不建议使用)
    <% @page extends="javax.servlet.httpService"%>
    3.imPort属性--用于导入JSP页面使用的JAVA API类库。是唯一一个可以多次使用的属性。
    <% @page import="java.util.Date" %>
    4.session属性--用于指定是否可以使用session对象,若允许页面参与HTTP会话则为true.默认为true
    <% @page session="true" %>
    5.buffer属性--用于设定页面缓冲区大小(字节数)
    <% @page buffer="64k" %>
    6.autoFlush8属性--用于指定JSP页面是否自动刷新,若不自动刷新,当缓冲区满时抛出一个异常。
    <% @page autoFlush="false" %>
    7.isThreadSafe属性--用于指定JSP页面是否能够处理一个以上的请求,若是,则该页面肯恶搞同时收到多个JSP引擎发出的多个请求。
    8.info属性--用于指定JSP页面的相关信息文本
    9.errorPage属性--用于指定错误页面,无默认值。
    10.isErrorPage属性
    11.contentType属性--用于指定内容MIME类型和JSP页面的编码方式
    12.pageEncoding属性--用于指定Jsp页面的编码方式
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    2.include指令
    用于在当前JSP页面中加载需要插入的文件代码,即为页面插入一个静态文件,如JSP页面,HTML页面,文本文件或是一段JAVA程序,这些加载的代码和原有的JSP代码合并成一个新的JSP页面,使用此命令有助于实现JSP的模块化。<% @include  %>将会在JSP编译时插入一个包含文本或代码的文件,这个过程是静态的。静态的包含的是指这个被包含的文件将会被插入到JSP文件中去
    <% @include file="文件名"%>
    <!--JSP_02-->
    <P> 接下来会嵌入JSP_01的页面</P>
    <hr>
    <%@ include file="JSP_01.jsp"%>
    <!--JSP_01-->
    <body>
      <%! class test{
           int add(int a){
      a++;
      return a; } }%>
    <%! test test1=new test();int b=0; %>
    <% b=test1.add(3); %>
    <p><%=b %>
    </body>
    3.taglib指令
    用来指定页面中使用的标签库以及自定义标签的前缀
    <% @taglib uri="tagLibraryURI" prefix="tagPrefix" %>
    1.prefix属性
    用于指定标记库中所有动作元素名中使用的前缀,无默认值。
    2.uri属性
    统一资源标识符属性用于指定标签库存放的位置,并告诉JSP引擎在编译JSP页面时如何处理指定标签库中的标签 ,无默认值。
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    六:JSP常用动作
    1.<jsp:param>
    用于<jsp:include>,<jsp:forward>动作体中,为其他动作传送一个或者多个参数
    <jsp:param name="参数名" value="参数值"/>
    name:指定参数名称,不可接受动态值
    value:指定参数值,可接受动态值
    2.<jsp:include>
    用来把指定的文件动态插入正在生成的页面中。该动作允许包含静态文件和动态文件,这两种包含的效果是不同的,如果包含的是静态文件,那么包含仅仅是把包含文件的内容添加JSP文件去,这个文件不会被JSP编译器执行,如果包含的文件是动态的,那么这个包含的文件也会被JSP编译器执行
    下面讲解include命令和include动作的区别
    1)include命令
    include命令可以在JSP指令转换成Servlet之前,将JSP插入其中。
    2)include动作
    在主页面被请求时,将其他页面的输出包含进来
    差别:
    1.在于二者被调用的时间。include动作在 请求期间被激活,而include命令在页面转换期间被激活。
    2.在使用上也有差异。include指令并include动作的页面难以维护,include维护起来更容易,但include指令更强大,执行速度稍快,include指令允许包含的文件中含有影响主页面的JSP代码,如响应内容的设置和属性方法的定义
    <jsp:include page="文件名" flush="true"/>
    page:指定所包含资源的相对路径,可以接受动态值
    flush:包含目标资源之前是否刷新输出缓冲区,默认值为false,不可接受动态值。
    例子1:
    <body>
    <P>接下来会嵌入JSP_01的页面</P>
    <hr>
    <jsp:include page="JSP_01.jsp"/>
    </body>
    例子2:
    <!--JSP_02-->
    <P>接下来会嵌入JSP_01的页面</P>
    <hr>
    <jsp:include page="JSP_01.jsp">
       <jsp:param name="name" value="caizhen"/>
    </jsp:include>
    <!--JSP_01-->
    <body>
      <%=request.getParameter("name") %>你好,欢迎访问!
    </body>
    例子2演示的是动态功能。其中<%=request.getParameter("name") %>中的request.getParameter("name")通过使用内置方法获取name的值
    3.<jsp:useBean>
    该动作用来加载在JSP页面中使用到的JavaBean.这个功能非常有用,能够实现JavaBean组件的重用
    <jsp:useBean
    id="Bean实例名称"
    scope="page  |request |session  |application"
    clsss="JavaBean"类
    type="对象变量的类型"
    beanName="Bean名字"/>
    1).id属性:指定该JavaBean的实例名称,不可接受动态值。如果找到id和scope相同的Bean实例,该动作将使用已有的Bean实例而不是创建新的实例。
    2).scope属性:指定Bean的作用域,一个作用域内Id值属性的值是唯一的。
    1.page(默认),表示该Bean的作用范围是本页面内(保存在当前页面的PageContext内).
    2.Request:表示该Bean在当前的客户端请求内有效。
    3.Session:表示Bean在当前HttpSession内所有页面都有效,即会话作用域
    4.Application:表示该Bean在任何使用相同的applicaton的JSP页面中有效,即整个应用程序范围内有效。
    3).class属性:指定Bean的类路径和类名,不可接受动态值,这个class不能是抽象的。
    <jsp:useBean id="time" class="java.util.Date"/>
    <p>现在的时间为:<%= time %>
    4).type属性:指定引用该对象的变量的类型,它必须是Bean类的名字,超类的名字,超类名字,该类所实现接口名字之一。变量的名字是由id属性指定的。
    5)beanName属性:用于指定Bean的名字,可以接受动态值。beanName属性必须与type属性结合使用,不能与Class属性同时使用
    <jsp:useBean id="time"
    type="java.io.Serializable"
    beanName="java.util.Date"/>
    <p>现在的时间为:<%= time %></p>
    4.<jsp:setProperty>
    用来设置,修改已实例化Bean中的属性值
    <jsp:setProperty
    name="Bean的名称"
    property="*"  | property="属性" [param=“属性“ value="值"]/>
    1.name属性:必选,表示要设置的属性是哪个Bean的,不可接受动态值
    2.property属性: 必选,表示要设置哪个属性。如果Property的值是”*“,表示所有名字和Bean属性名字匹配请求参数都将被传递给相应属性的set方法。
    3.param属性:可选,指定用哪个请求参数作用Bean属性的值。如果当前请求没有参数,则什么事也不做,系统不会将null传递给Bean属性的set方法。因此可以上Bean自己提供默认属性值,只有在请求参数明确指定了新值时才修改默认属性值。
    4.value属性:可选,用来指定Bean属性的值。
    value和param不可同时用
    <jsp:useBean id="time" class="java.util.Date">
      <jsp:setProperty name="time" property="hours" param="hh"/>
      <jsp:setProperty name="time" property="minutes" param="mm"/>
      <jsp:setProperty name="time" property="seconds" param="ss"/>
      </jsp:useBean>
      <%=time %>
    5.<jsp:getProperty>
    该动作获取指定的Bean属性值并转换成字符串输出。
    <jsp:getProperty  name="Bean的名称" property="Bean的属性”
    1.name属性:指定获取属性值的Bean的名称,不能接受动态值。
    2.property属性:指定要获取的Bean的属性名,不可接受动态值
    <!--注册页面-->
    <form action="register.jsp" action="get">
    <table border="1">
    <tr>
    <td>姓名:<input name="userName" type="text" size="16"></td>
    </tr>
    <tr>
    <td>密码:<input name="passWord"  type="password" size="18"></td>
    </tr>
    <tr>
    <td><input type=submit value="提交"></td>
    </tr>
    <!--数据处理页面-->
    <body>
    <!--使用声明好的JavaBean,id为user-->
    <jsp:useBean id="user" scope="page" class="Bean.UserRegisterBean"/>
    <!--设置JavaBean的属性-->
    <jsp:setProperty name="user" property="*"/>
    <p>注册成功</p>
    <br/>
    <!--使用Bean的方法获取属性值-->
    用户名:<%= user.getuserName() %>
    密码:<%= user.getpassWord() %>
    <hr/>
    <!--使用getProperty动作获取Bean的属性-->
    用户名:<jsp:getProperty property="userName" name="user"/>
    密码:<jsp:getProperty property="passWord" name="user"/>
    <!--数据处理页面使用UserRigisterBean来保存数据-->
    </body>
    6.<jsp:forward>
    该动作用于转发客户端的请求到另一个页面或者另一个Servlet文件中去
    <jsp:forward page="地址或者页面"/>
    <jsp:forward>动作可以包含一个或者多个<jsp:param>子动作,用于向要引导进入的页面传递参数。当动作发生时,如果已经有文本被写入输出流而且页面没有设置缓冲,将抛出异常。
    1.page属性:
    page属性指定资源的相对路径,可接受动态值。
    <!--登陆界面-->
    <body>
    <form action="JSP_04.jsp">
    <table>
    <tr>
    <td>输入用户名:</td>
    <td><input type="text" name="name" size="16" >
    </td>
    </tr>
    <tr>
    <td>输入密码:</td>
    <td><input type="password" name="password" size="18">
    </td>
    </tr>
    <tr>
    <td><input type="submit" value="登陆"></td>
    </table></form>
    </body>
    <!--数据处理界面-->
    <body>
    <%
    String name=request.getParameter("name");
    String password=request.getParameter("password");
    if(name.equals("QQ")||password.equals("123")){
    %>
    <jsp:forward page="success.jsp">
    <jsp:param value="<%=name%>" name="user"/>
    </jsp:forward>
    <%
    }
    else{
    %>
    <jsp:forward page="JSP_03.jsp">
    <jsp:param value="<%=name %>" name="user"/>
    </jsp:forward>
    <%
    }
    %>
    </body>
    内置对象request调用getParamter()方法获取参数值
    六:JSP内置对象
    JSP提供了一些由JSP容器实现和管理的内置对象,在JSP应用程序中不需要预先声明和创建这些对象就能实现特定的功能,使Java Web编程更加快捷,方便。常见JSP内置对象有
    1.out
    out对象主要用于向客户端输出各种数据,同时管理应用服务器上的输出缓冲区。应用服务器上缓冲区默认值为8kb,可以通过Page指令中的Buffer属性来设置缓冲区大小。。
    1.print()/println():用于输出数据。
    2.newLine():用于输出一个换行字符,实现换行功能
    3.flush():用于输出缓冲区里的数据,该方法先把缓冲区的数据输出到客户端,而后再清除缓冲区中的数据。
    4.clearBuffer():用于清除理的数据,并把数据输出到客户端。
    5.clear():用于清除缓冲区里的数据,但是不会把缓冲区的数据输出到客户端。
    6.getBufferSize():用于获取缓冲区的大小。
    7.getRemaining():用于获取缓冲区的剩余大小。
    8.isAutoFlush():用于自动刷新缓冲区,自动刷新返回true,否则返回false.
    9.close():用于关闭输出流。
    <%
    for(int i=0;i<3;i++)
    out.println("<h3>我奋斗的目标是....</h3>");
    String str="我将成为一名优秀的Java工程师";
    out.println(str+"<br>");
    out.println("加油");
     
    %>
    2.request:
    request对象能获取客户端的各种信息。
    request对象的生命周期由JSP容器控制。
         当客户端通过HTTP协议请求一个JSP页面时,JSP容器就会创建request对象并将请求封装到request对象中;当JSP容器处理完请求,request对象将会销毁。
        当用户请求一个JSP页面时,JSP页面所在的Web服务器会将用户的请求信息封装到内置对象request中。request对象主要用于接收客户端通过HTTP协议传送给服务器端的数据,可以通过其方法对数据进行操作。
    1.getAttribute(String name):用于返回name指定的属性值,若不存在指定的属性,就返回Null。
    2.getAttributeNames();用于返回request对象保持的所有属性值,其结果集是一个Enumeration(枚举)实例
    3.getCookies().用于返回客户端所Cookies对象,结果是一个Cookie数组
    4.getCharacterEncoding()。用于返回客户端请求中的字符编码方式。
    5.getContentLength().:用于以字节为单位返回客户端请求的大小。如无法得到该请求的大小,则返回-1.
    6.getHeader(String name):用于获得HTTP协议定义的文件头信息
    7.getHeaders(String name):用于返回指定名字的值。
    8.getHeaderNames():用于返回HTTP协议所有文件头信息,其结果是一个Enumeration实例。
    9.getInputStream():用于返回输出流,获得请求中的数据。
    10getMethod();用于获得客户端向服务器端传送数据的方法。如;get,post.
    11.getParameter(String name):
    用于获得客户端传送给服务器端的参数值。获取表单提交的信息,以字符串形式返回客户端传来的某一请求参数值,该参数名由name指定。当传递给此方法的参数名没有实际参数与之对应时,返回Null.
    12 getParameterNames():
    用于获得客户端传送给服务器的所有参数值,其结果是一个Enumeration实例。
    13getParameterValues(String name):
    用于获得指定参数的所有值。返回客户端传送给服务器端的所有参数名,结果集是一个Enumeration实例。当传递给此方法的参数名没有实际参数与之对应时,返回NULL。
    14getProtocol()
    用于获取客户端向服务端传送数据所使用的协议名称。
    15getRequestURL():
    获取获取客户端的地址。
    16getRemoteAddr()
    获取客户端的Ip地址。
    17getRemoteHost()
    用于获取客户端的名字
    18getSession([Boolean create] :
    用于返回和请求相关的session。create参数是可选的。当有参数值且为true时,如果客户端没有创建session,那么将创建一个新的session.
    19:getServerName():
    获取服务器的名字。
    20getServerPath():
    用于获取客户端服务器所请求的脚本文件的文件路径
    21.getServerPort()
    用于获取服务器的端口号
    22.removeAttributr(String name)
    用于删除请求中的一个属性
    23setAttribute(String name,java.lang.Object obj);
    用于设置参数。
    1.<!--留言板-->
    <body>
    <form action="check.jsp">
    <table>
    <td>留言:<input type="text" name="context" size="16" %></td>
    <td><input type="submit" value="发表" name="submit"></td>
    </table></form>
    </body>
    <!--数据处理页-->
    <%
    String name=request.getParameter("context");
    String password=request.getParameter("submit");
    %>
    获取到客户端提交的文本和按钮信息如下
    <hr>
    文本框的信息为:<%=name %>
    按钮信息为:<%=password %>
    2.<!--在线成绩测试-->
    <body>
    <form action="JSP_04.jsp" method="get">
    1.测试测试测试测试测试()re
    <input type="radio" name="1" value="B">测试2<br>
    <input type="radio" name="1" value="C">测试3<br>
    <input type="radio" name="1" value="D">测试4<br>
    <input type="submit" value="提交">
    </form>
    </body>
    <!--数据处理页-->
    <body>
    <%
    int examResult=0;
    String str1=request.getParameter("1");
    if(str1==null)
    str1=" ";
    if(str1.equals("B"))
    examResult++;
    %>
    <h3>你本次的测试成绩时:</h3>
    <%=examResult*100 %>
    </body>
    3.response
    该对象将服务器端数据发送到客户端,该对象包含了响应客户请求的有关信息,其封装了JSP产生的响应,然后发送到客户端以响应客户的请求。他与request对象组成了一对接受,发送数据的对象,这也是动态的基础,response对象的生命周期由JSP容器自动控制。当服务器向客户端传送数据时,JSP容器就会自动创建response对象并将请求信息封装到该response对象中:当JSP容器处理完请求后,response对象就会被销毁。
    常见的方法如下
    1.addCookie(Cookie cookie):用于给用户添加一个Cookie对象,保存客户端的相关信息。。可以使用Request的getCookies()方法获取该Cookie对象。
    2.addHeader(String name,String value);用于添加带有指定名称和字符串的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就添加,存在就覆盖。
    3.addDateHeader(StrIng name,String value):用于添加带有指定名称和字符串的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就添加,存在就覆盖。
    4.flushBuffer():强制把当前缓冲区所有内容发送到客户端
    5.getBufferSize():用于获取实际缓冲区的大小,如果 没使用缓冲区则返回0
    6.getCharacterEncoding():用于获取响应的字符编码方式
    7.getContentType():用于获取响应的MIME类型
    8.getOutputStream():获取客户端的输出流
    9.sendError():用于向客户端发送错误信息,如404指网页找不到错误
    10.sendRedirect();用于重新定向客户端的请求
    11.setCharacterEncoding():用于设置响应的字符编码方式
    12;setContent():用于设置响应的MIME类型。
    13.setContentLength():用于设置响应内容的长都(字节数)
    14.setHeader();用于设置指定名称和字符串的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就设置,存在就覆盖。
    15.setDateHeader():用于设置指定名称和日期值的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就设置,存在就覆盖
    <!--服务器定时刷新,然后输出到客户端-->
    <body>
    <%=new java.util.Date() %>
    <% response.setHeader("refresh","1"); %>
    </body>
    <!--下拉框选择访问url-->
    <!--前端-->
    <form action="check.jsp" method="post">
    <select name="link">
    <option value="baidu" selected>  baidu</option>
    <option value="hao123" selected> 网址导航</option>
    </select>
    <input type="submit"  name="sunmit" value="确定">
    </form>
    <!--数据处理-->
    <%
    String address=request.getParameter("link");
    if(address!=null)
    {
    if(address.equals("baidu")){
                       response.sendRedirect("https://www.baidu.com/");
       }else{
                  response.sendRedirect("https://www.hao123.com/");
                  }
    }
    %>
    4.session
    1.session对象用于存储特定的用户会话所需的信息。当用户在应用程序的web页之间跳转时,存储在session对象的变量将不会丢失,而是在整个用户会话中一直存在下去。
    2.当用户请求来自应用程序web页时,如果该用户还没有会话,则web服务器将自动创建一个session对象。当会话过期或被放弃后,服务器将终止该会话。
    seesion对象在服务器端
    cookie对象存在客户端
    session对象处理客户端与服务器的会话,从客户连接到服务器开始,直到客户端与服务器断开连接为止。session对象用来保存每个用户的信息,以便跟踪每个用户的操作状态。其中,session信息保存在容器里,session的ID保存在客户计算机的Cookie中。用户首次登陆系统时容器会给用户分配一个唯一的session id 标识用于区别其他的用户。当用户退出系统时,这个session就会自动消失。
    当一个用户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在cookie中,这样session对象和用户之间一一对应的关系。当用户再次访问连接该服务器的其他页面时,不再分配给其新的session对象。直到关闭浏览器后,服务器端该用户的session对象才取消,和用户的对应关系也一一消失。
    sessIon的常用方法
    1.getAttribute(String name):用于获取与指定名字相联系的属性,如果不存在则返回null。
    2.getAttributeName():用于返回session对象中存储的每一个属性对象。
    3.getCreatTime()。用于返回session对象被创建的时间,单位为毫秒
    4.getId():用于返回session对象在服务器端的编号。
    5.getLastAccessTime():用于返回和session对象相关的客户端最后发送请求的时间。
    6.getMaxInactiveInterval();用于返回session对象的生存时间,单位为秒。
    7.setAttribute(String name,java.lang.Object value);用于设定指定名子的属性值。并把其存储在session对象中。
    8.setMaxInactiveInterval(int interval):用于设置session的有效时间。
    9。removeAttribute(String name):用于删除指定的属性(包含属性名,属性值)。
    如果在有效时间内,用户做出了新的请求,那么服务器就会将其看作一个新的用户,此时,服务器将创建一个新的session,旧的会丢失
    10。isNew():用于判断目前session是否为新的session,若是返回true,否则返回false.
    session的创建时间<%=session.getCreationTime() %></br>
    session的Id号<%=session.getId() %></br>
    客户最近一次访问时间是<%=session.getLastAccessedTime() %></br>
    session:<%=session.isNew()? "是":"否" %></br>

  • 相关阅读:
    (22)ASP.NET Core2.2 EF创建模型(索引、备用键、继承、支持字段)
    (21)ASP.NET Core2.2 EF创建模型(关系)
    (20)ASP.NET Core2.2 EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
    (19)ASP.NET Core2.2 EF创建模型(包含属性和排除属性、主键、生成的值)
    (18)ASP.NET Core2.2 基于现有数据库创建EF模型(反向工程)
    (17)ASP.NET Core2.2 EF基于数据模型创建数据库
    (16)ASP.NET Core2.2 通用主机(HostBuilder)
    (15)ASP.NET Core2.2 Web主机(IWebHostBuilder)
    (14)ASP.NET Core2.2 中的日志记录
    前端也要懂物理 —— 惯性滚动篇
  • 原文地址:https://www.cnblogs.com/cainame/p/10305922.html
Copyright © 2011-2022 走看看