JSP相关

来源:互联网 发布:手机时间软件下载 编辑:程序博客网 时间:2024/05/19 14:54

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
原创粉丝点击