首页 > 代码库 > JSP

JSP

1. web.xml(deployment descriptor) ,部署描述符

2. 我们可以将Servlet看作是嵌套了HTML代码的Java类;可以将JSP看作是嵌套了Java代码的HTML页面。

3. get和post方法之间的差别:

    1). 浏览器地址栏呈现的结果不同(表象)

    2). 真正的原因在于向服务器端发送请求时的形式不同

    3). get请求格式:

          技术分享

    4). post请求格式:

        技术分享

4. servlet可以通过输出流,直接输出HTML代码,如:

     PrintWriter out = response.getWriter();

     out.println("<HTML><HEAD><TITLE>Decision****");

5. JSP执行的详细流程:

    技术分享

6. JSP 最终都会转换为 Servlet 去执行。

7. JSP:声明的格式:<%! int a = 3;%>,脚本段:的形式: <% int b = 3;%> ,将当服务器将JSP转换为Servlet时,会将JSP中的声明转换为类的成员变量,

    而将脚本段转换为方法中的局部变量,Servlet是单实例的,这样成员变量的值就只有一个,每个用户都会访问到它,而脚本段中的值则是局部变量,每个用户

    访问的时候各有一份,互不影响。一般不使用前者,线程不安全。

8. <jsp:forward>指令用于转向页面,在该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面了。

9. getParameter(key)方法是getParameterValues(key)方法的特例,表示请求参数值只有一个, 如果请求参数值有多个,请使用getParameterValues方法。在

    多选框的情况下,需要使用getParameterValues方法来获取用户所选择的多个复选框的值。

10. 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页

11. JSP所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访

       问JSP网页。

12. Java Server Pages:

      1). Servlet简化设计,逻辑与界面设计分开,开发更方便;

      2). HTML语法的Java扩展,加入新的标签(<%, %>,…);

      3). 强大的组件(Java Bean)支持功能;

13. JSP语法概述:

      1). JSP原始代码中包含了JSP元素和Template(模板)data两类。Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的

            内容等,这些数据会直接传送到客户端的浏览器

       2). JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JAVA语法,否则会导致编译错误。

14. JSP语法分为三种不同的类型:

       1). 编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>

       2). 脚本语法(SCRIPTING)

       3). 动作语法(ACTION) 例如: <jsp:forward>,<jsp:getProperty>,<jsp:include>

15. 脚本语法包括

      1). “HTML注释”:<!— comments -->

      2). “隐藏注释(JSP)”:<%-- comments --%>

      3). “声明”

      4). “表达式”

      5). “脚本段”

16. 编译器指令包括“包含指令”, 页指令”和“taglib指令”。它们包含在“<%@ %>”卷标里。两个主要的指令是page与include。

17. 动作语法包括<jsp:forward>,<jsp:include>,<jsp:getProperty>,<jsp:setProperty>和<jsp:useBean>

18. HTML注释,JSP格式如下:

      <!-- comment [ <%= expression %> ] --> 或 <!-- 注释 [<%= 表达式 %> ] -->

      这种注释发送到客户端,但不直接显示,在源代码中可以查看到。

      隐藏注释,JSP语法格式如下:

     <%-- 注释 --%>

     不发送到客户端。

19. 声明,JSP语法格式如下:

      1). <%! declaration; [ declaration; ] ...%> 或 <%! 声明; [声明; ] ... %>

      2). <% declaration; [ declaration; ] ...%> 或 <% 声明; [声明; ] ... %>

20. 表达式,用于在页面上输出信息,语法格式如下: <%= expression %> 或 <%= 表达式 %>

21. 脚本段,JSP 语法格式如下:<% code fragment %> 或 <% 代码 %>

22. 转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b

23. 包含指令:

      1). include指令:向当前页中插入一个静态文件的内容JSP 语法格式如下:<%@ include file="relativeURL" %> 或 <%@ include file="相对位置" %>

      2). "Page"指令用于定义JSP文件中的全局属性。JSP 语法格式如下:

            <%@ page [ language="java" ] [ extends="package.class" ] [import="{package.class | package.*},..." ]

            [ session="true | false" ][ isThreadSafe="true | false" ][ errorPage="relativeURL" ]

            [ contentType="mimeType[;charset=characterSet]" | "text/html ; charset=ISO-8859-1" ]

            [ isErrorPage="true | false" ]%>

            属性:

                     a).language="java" 声明脚本语言的种类,目前只能用"java" 。

                     b). import="{package.class | package.* },..."需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。

                           下面的包在JSP编译时已经导入了, 所以就不需要再指明了:

                           java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*

                     c). errorPage="relativeURL" 设置处理异常事件的JSP文件。

                     d). isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception对象

                     e). “<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 “<jsp:include>”。

                     f). 可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的

                          import语句类似(参照Java Language,import语句引入的是Java语言中的类),所以此属性就能用多次。

                     g). 无论把“<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它

                           放在JSP文件的顶部。

        3). taglib指令,JSP语法:<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 用于引入定制标签库

24. <jsp:forward> 语法格式:

       1). <jsp:forward page={"relativeURL" | "<%=expression %>"} > 这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以

             是JSP,或程序段
       2). <jsp:param name="parameterName" value="http://www.mamicode.com/{parameterValue | }" />

             [<jsp:param … />]</jsp:forward> (“[<jsp:param … />]”指可以有多个“<jsp:param/>” 标记。)

             向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“<jsp:param>”;“name”指定参数名,

          “value”指定参数值。

25. “<jsp:forward>”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“<jsp:forward>”标签以后的代码,将不能执行。

26. <jsp:include>:包含一个静态或动态文件,JSP语法格式如下:

       1). <jsp:include page="{relativeURL | <%=expression%>}" flush="true" >

       2). <jsp:param name="parameterName" value="http://www.mamicode.com/{parameterValue |}" />

             [<jsp:param …/>] </jsp:include>a(“[<jsp:param … />]”指可以有多个“<jsp:param/>”标记。)

27. JSP 有以下九种内置对象,包括:

      1). request请求对象:“request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是

            getParameter、 getParameterNames 和 getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值

      2). response响应对象:“response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式

            比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。

      3). pageContext页面上下文对象:“pageContext” 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、

            getAttribute、getAttributesScope和getAttributeNamesInScope,一般情况下“pageContext” 对象用到得也不是很多,只有在项目所面临的情况比较复

            杂的情况下,才会利用到页面属性来辅助处理。一般Servlet容器会使用该对象 

       4). session会话对象: “session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。

       5). application应用程序对象:“application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。

       6). out输出对象: “out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out”对象发送的内容将是浏览器需要显示的内容,是文本一级的,

             可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了print和println之外,还包括clear、clearBuffer、flush、getBufferSize 和

             getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

       7). config配置对象: “config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。 

       8). page页面对象:“page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

       9). exception异常对象:“exception” 对象则代表了JSP文件运行时所产生的异常对象,此对象不能在一般JSP文件中直接使用,而只能在使用了

          “ <%@ page isErrorPage="true "%>”的JSP文件中使用

28. request的setAttribute与getAttribute 方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute 方法根据属性

       获取到与该属性对应的对象值( 获取到之后一般都需要进行向下类型转换, 将属性值转换为真正的对象) 。setAttribute 与 getAttribute 方法都是在服

       务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。

29. request 的 getParameter 方法的作用是获取到客户端 通过表单或url 请求参数所发送过来的参数值,是客户端与服务器端之间的交互,服务器端要想获取

       到客户端发送过来的数据,就需要使用getParameter方法来获取。与 没有与 getParameter 方法对应的setParameter 方法。

30. request 对象内数据的存活范围就是在 request 对象的存活范围内,当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被

       销毁了;之后再向服务器端发送新的请求时,服务器会创建新的 request 对象,该 request 对象与之前的request 对象没有任何关系,因此也无法获得在之

       前的 request 对象中所存放的任何数据。

31. session 对象内数据的存活范围也就是 session 对象的存活范围( ?只要浏览器不关闭,session对象就会一直存在 ?) ,因此在同一个浏览器窗口中,无论

       向服务器端发送多少个请求,session 对象只有一个。 Session存活跟浏览器是否关闭无关,之所以浏览器是关闭无法再获得原有的Session,是因为sessionId

       在浏览器进程内存中。当浏览器关闭,进程内存释放,导致原来的sessionId消失。

32. application(应用对象) :存活范围最大的对象,只要服务器没有关闭,application 对象中的数据就会一直存在。在整个服务器运行过程当中,application

       对象只有一个。

33. request、 session以及application这3个对象的范围是逐个增加的:request 只在一个请求的范围内;?session是在浏览器窗口的范围内 ? ;application 则

       是在整个服务器的运行过程中。

34. HttpServletResponse 对象的 sendRedirect(String location)方法称作重定向。如果location地址前面加上“/” ,则表示相对于Servlet容器的根来请求,

       即 http://localhost:8080,如果 location 地址前没有加上“/” ,则表示相对于当前请求的 URI 来寻找地址。

35. RequestDispatcher 的 forward(request, response)方法称作请求转发。

36. 请求转发与重定向的区别。

      1). 请求转发,整个过程处于同一个请求当中

      2). 重定向。实际上客户端会向服务器端发送两个请求。

      3). RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。

      4). sendRedirect()是 HttpServletResponse 对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端

           返回执行的结果。

37. 一个标准的JavaBean有以下几个特性:

      1). JavaBean是一个公共的(public)类

      2). JavaBean有一个不带参数的构造方法

      3). JavaBean通过setXXX方法设置属性,通过getXXX方法获取属性

38. JSP访问JavaBean的语法:

       1).导入JavaBean类,例如:<%@ page import="mypack.CounterBean" %>

        2). 声明JavaBean对象,例如:<jsp:useBean id="myBean" class="mypack.CounterBean" scope="session" />

        3). 访问JavaBean属性,例如:<jsp:getProperty name="myBean" property="count" />

39. 声明对象时的scope属性,表示JavaBean对象的生命周期范围。

40. <jsp:getProperty> 语法格式如下:

      <jsp:getProperty name="beanInstanceName" property="propertyName" />

      属性:

                1).name="beanInstanceName" bean的名字,由<jsp:useBean>指定。

                2).property="propertyName" 所指定的Bean的属性名。

41. <jsp:setProperty>,设置Bean的属性值,语法格式如下:

      <jsp:setProperty name="beanInstanceName" { property= "*" | property="propertyName"

      [ param="parameterName" ] |property="propertyName" value="http://www.mamicode.com/{string | }"}/>

      属性:

                1).name="beanInstanceName" 表示已经在“<jsp:useBean>”中创建的Bean实例的名字。

                2).property="*" 储存用户在jsp输入的所有值,用于匹配Bean中的属性。

                3). property="propertyName" [param="parameterName" ]– 用一个参数值来指定Bean中的一个属性值, 一般情况下是从request对象中获得的。

                      其中property指定Bean的属性名,param指定request中的参数名。

               4). property="propertyName" value="http://www.mamicode.com/{string | }" 使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果

                    是字符串,那么它就会被转换成Bean属性的类型。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。不能在同一个

                 “<jsp:setProperty>”中同时使用param和value参数 。

42.  include 两种用法的区别:

        1). 执行时间上:

             <%@ include file=”relativeURI”%> 是在翻译阶段执行。多用于引入一些相同的标头,底部等。

            <jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.

         2). 引入内容的不同:

              <%@ include file=”relativeURI”%>

              引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.

              <jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本.

               另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径。将根据赋给应用程序的URI的前缀进行

              解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.

 

JSP