JSP相关

JSP,即Java Server Page是一种Java服务器动态网页页面。在传统的HTML页面的基础上插入Java程序段和JSP标记,从而形成JSP文件。本质上讲,JSP就是servlet,当JSP被第一次请求,服务器上的JSP引擎,Tomcat等可将JSP转换为servlet。接着被编译称为Servlet字节码,装载实例化后进行实现。

一.JSP注释:
1.在Java程序段可使用普通的Java注释
2.html注释
JSP注释<%–服务器端注释,不发送回客户端,源代码不可见–%>

JSP语法分为三种类型:
1.编译器指令 例如:<%@ page import=”java.io.*”%>
2.脚本语法 例如<%Java程序段%>
3.动作语法 ,,

二.JSP声明:
<%!声明语句;%>
<%! int i = 3;%>
<%! int a,b;String c;%>
<%! public int count();%> 注意:每个都以分号结尾。

问题:<%! int i = 3;%>与<% int b = 3; %>的区别
实验:在中加入:
<%=i–%>
<%=b–%>
我们每次的去刷新页面,发现i不断减1,b始终不变。本质上讲,底层上jsp转换为java代码。a被解析成类的成员变量,b被解析成局部变量。servlet是单例模式,一次加载,多次使用。

<!--这是HTML注释,会发送回客户端,页面源代码可见-->
    <!--<%= new java.util.Date() %> -->

    <%--这是JSP注释 ,不会发送回客户端,页面源代码不可见--%>
    <%--new java.util.Date(); --%>

    <%--File file = new File("test.txt") --%>



    <%! int i = 3; %><br> <%--Jsp声明,i被解析成类的成员变量 --%>
    <% int b = 3; %>  <%--Jsp脚本段,b被解析成局部变量 --%>


    The current date and time are 
    <%@ include file="Test_1.jsp" %> 

三.JSP动作元素
1.动作用于转向页面,在该指令后面的所有代码都没有机会执行了,因为该页面的流程已经转向了另外一个页面。
2.动作与指令存在着很大差别,page中的Include指令用于在JSP页面转换为Servlet时就将被包含页面嵌入,这也意味着Include指令包含页面时,被包含文件的任何一部分发生变化,所有包含该文件的jsp文件需要被重新编译。而使用include动作文件的变化总会被检查到,不需要重新编译。

四.JSP内置对象
JSP内置了九个对象,重点介绍以下三个request对象,session对象,application对象。
1.request对象
String getParameter(String name)
获取客户端传送给服务器的指定参数的值
String[] gerParameterNames()
获取客户端传送给服务器的所有参数名称的枚举

Enumeration e = request.getParameterNames();

            while(e.hasMoreElements())
                System.out.println(e.nextElement());

            String[] values = request.getParameterValues("age");

            for(String value:values){
                System.out.println(value);
            }
                    }

注意:getParameter方法是getParameterValues方法的特例,表示请求的参数值只有一个,如果请求参数值有多个,请使用getParameterValues方法。在多选框的情况下,需要使用getParameterValues方法来获取用户所选择的多个复选框的值。

注意:
1.Request对象中的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAtribute方法设置属性和属性值,然后通过getAttribute方法根据属性获取到与该属性对应的对象值(获取到之后一般进行向下类型转换)。setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过两个方法。
2.request的getParameter方法的作用是获取到客户端 通过表单或url请求参数所发送过来的参数值,是客户端与服务器端之间的交互,服务器端要想获取到客户端发送过来的数据,就需要使用getParameter来获取。没有setParameter方法。
3.request对象内数据的存活范围就是在request对象的存活范围内,当客户端向服务器端发送一个请求,服务器向客户端返回一个响应之后,该请求对象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此在无法获得之前request对象所存放的任何数据。
4.session对象内数据的存活范围也就是session对象的存活范围(只要浏览器不关闭,session对象就会一直存在),因此在同一个浏览器窗口,无论向服务器发送多少个请求,session对象只有一个。

2.application(应用对象):存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。**在整个服务器运行过程中,application对象只有一个。**
if(session.getAttribute("counter") == null){
            session.setAttribute("counter", "1");
        }
        else{
            String strnum = null;
            strnum = session.getAttribute("counter").toString();
            int icount = 0;
            icount =Integer.valueOf(strnum).intValue();
            icount++;
            session.setAttribute("counter", Integer.toString(icount));
        }       

以上为application.jsp的代码
1.当我们使用application对象,很好的实现了网页的访问计数器。因为在服务器运行阶段,始终都只有一个application对象,所以即使是多个浏览器客户端访问网页,计数器始终增加。
2.当我们使用session对象代替,这也能大致实现了网页访问计数器,但是session会针对每个客户端分配一个session,所以针对每个特定的客户端都有访问计数,但是不同客户端互相不影响。
3.当我们使用request对象,这并不能实现网页访问计数器,因为在我们每一个访问网页,都会向服务器发送请求,每一次请求都分配一个新的request的对象,因此上述语句只是在if代码块中运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值