精华内容
下载资源
问答
  • 栈帧和函数调用()一,函数调用惯例,_cdecl三,_stdcall四,总结      通过上文的介绍,我们大致知道了函数调用时实际发生了什么,以及为什么我们使用编译器调试代码时,可以通过栈...

    (栈帧和函数调用二)_stdcall和_cdecl的区别

         通过上文的介绍,我们大致知道了函数调用时实际发生了什么,以及为什么我们使用编译器调试代码时,可以通过栈回溯看到整个调用的流程。从这样的信息里能够发现一个现象,那就是函数的调用方和被调用方对函数如何调用有这统一的理解,例如,它们双方都一致认同函数参数是按照某个固定的方式压入栈内的,如果不这样,那么函数无法取得正确的参数,这样的约定称为函数调用惯例。

    一,函数调用惯例

    1, 函数参数的传递顺序和方式
         函数参数的传递方式有很多种,最常见的也就是栈传递。函数的调用方将参数按照一定顺序压入栈中,函数自身再按照该顺序从栈中取出参数,参数压栈的顺序分为从左至右和从右至左。有些调用惯例还允许使用寄存器传递函数参数以提升性能(本章不讨论该情况)

    2, 栈的维护方式
         调用方将参数压入栈中,函数从栈中取出参数,并执行完函数体后,需要将压入栈中的参数进行弹出,以使得栈在函数调用前后保持一致,而这个操作既可以由函数调用方来完成,也可以由函数自身来完成。

    3, 函数名字修饰方式
         使用不同调用修饰符修饰的函数,会对函数名字进行不同策略的修饰,比如_cdecl修饰的函数名字直接在名称前加1个下划线(int fun(int a,int b) =>_fun),_stdcall修饰的函数名字是由下划线+函数名+@+参数的字节数(int fun(int a,int b) =>_fun@8)

    二,_cdecl

         在c/c++语言中,默认的函数调用规则是cdecl,任何一个没有显示指定调用规则的函数默认都是使用cedecl修饰的,它将参数以 从右至左的顺序压入栈中,出栈操作也是由函数调用方来执行的。
    以以下函数为例:

    int _cdecl fun(int a, int b)
    {
    	return 1;
    }
    
    

         Fun(1,2),调用处的反汇编代码为:
    在这里插入图片描述
         先将参数2入栈,再将参数1入栈,再执行函数体,函数体内反汇编为:
    在这里插入图片描述
         我们只用看最后一条指令ret,是直接返回到函数调用处的,也就是push 1下面的那个栈地址,参数a和b的栈空间并没有被fun函数自己清理掉,而是被调用方清理了,再回过去看上上图的最后一行汇编代码:

    add esp,8
    

         将栈顶指针正向偏移8个字节,刚好将a参数和b参数所占用的8个字节给回收了(32位环境)

    三,_stdcall

         Stdcall是从pascall发展来的一种函数调用方式,它不是c/c++默认的调用方式,我们使用的时候需要显示加上_stdcall修饰符。它将参数以从右至左的顺序压入栈中,出栈操作也是由函数内部来执行的。
    以以下函数为例:

    int _stdcall fun(int a, int b)
    {
    	return 1;
    }
    
    

         Fun(1,2),调用处的反汇编代码为:
    在这里插入图片描述
         先将参数2入栈,再将参数1入栈,再执行函数体,函数体内反汇编为:
    在这里插入图片描述
         直接看最后一个ret指令,可以看到参数为8,也就是说函数体内自动将传入的int a,int b两个参数的栈空间给回收了,跳转了函数返回地址的正向偏移8字节的位置。

    四,总结

    1, 微软使用__stdcall来定义Win32 API,因为理论上__stdcall比较节省空间,两者比较计算如下:
    __stdcall消耗的空间是:
    ret X(X是一个地址,在32位系统为4字节),这样就是1字节(ret)+4字节(地址)=5字节
    __cdecl消耗的空间是
    (被呼叫者)ret
    (呼叫者)add esp,x 这样就是(ret)1字节+add esp(1字节)+X(4字节)=6字节

    2, 可变参数的函数只能用_cdecl而不能用_stdcall,是因为_stdcall修饰的函数参数所占用的栈空间是由函数自身来清理的,对于可变参数的情况,函数是不确定有多少入参的,不能准确清理栈空间。

    3, 使用_stdcall还是_cdecl是由函数调用方和函数方两者结合使用场景共同决定的,只要双方统一了调用规定,那么使用就是没问题的(不要认为dll中只能用_stdcall)

    参考文献:
    1,《程序员的自我修养:链接、装载与库》第十章第二节

    展开全文
  • nginx之proxy_pass指令完全拆解

    千次阅读 2018-07-09 17:53:46
    一、proxy_pass的nginx官方指南nginx有两个模块都有proxy_pass指令。ngx_http_proxy_module的proxy_pass:语法: proxy_pass URL; 场景: location, if in location, limit_except 说明: 设置后端代理服务器的协议...

    一、proxy_pass的nginx官方指南

    nginx中有两个模块都有proxy_pass指令。

    • ngx_http_proxy_moduleproxy_pass
    语法: proxy_pass URL;
    场景: location, if in location, limit_except
    说明: 设置后端代理服务器的协议(protocol)和地址(address),以及location中可以匹配的一个可选的URI。协议可以是"http""https"。地址可以是一个域名或ip地址和端口,或者一个 unix-domain socket 路径。  
    详见官方文档: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
    URI的匹配,本文第四部分重点讨论。
    
    • ngx_stream_proxy_moduleproxy_pass
    语法: proxy_pass address;
    场景: server
    说明: 设置后端代理服务器的地址。这个地址(address)可以是一个域名或ip地址和端口,或者一个 unix-domain socket路径。  
    详见官方文档: http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_pass
    

    二、两个proxy_pass的关系和区别

    在两个模块中,两个proxy_pass都是用来做后端代理的指令。
    ngx_stream_proxy_module模块的proxy_pass指令只能在server段使用使用, 只需要提供域名或ip地址和端口。可以理解为端口转发,可以是tcp端口,也可以是udp端口。
    ngx_http_proxy_module模块的proxy_pass指令需要在location段,location中的if段,limit_except段中使用,处理需要提供域名或ip地址和端口外,还需要提供协议,如"http"或"https",还有一个可选的uri可以配置。

    三、proxy_pass的具体用法

    ngx_stream_proxy_module模块的proxy_pass指令

    server {
        listen 127.0.0.1:12345;
        proxy_pass 127.0.0.1:8080;
    }
    
    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 1m;
        proxy_pass example.com:12345;
    }
    
    server {
        listen 53 udp;
        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass dns.example.com:53;
    }
    
    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
    

    ngx_http_proxy_module模块的proxy_pass指令

    server {
        listen      80;
        server_name www.test.com;
    
        # 正常代理,不修改后端url的
        location /some/path/ {
            proxy_pass http://127.0.0.1;
        }
    
        # 修改后端url地址的代理(本例后端地址中,最后带了一个斜线)
        location /testb {
            proxy_pass http://www.other.com:8801/;
        }
    
        # 使用 if in location
        location /google {
            if ( $geoip_country_code ~ (RU|CN) ) {
                proxy_pass http://www.google.hk;
            }
        }
    
        location /yongfu/ {
            # 没有匹配 limit_except 的,代理到 unix:/tmp/backend.socket:/uri/
            proxy_pass http://unix:/tmp/backend.socket:/uri/;;
    
            # 匹配到请求方法为: PUT or DELETE, 代理到9080
            limit_except PUT DELETE {
                proxy_pass http://127.0.0.1:9080;
            }
        }
    
    }
    

    四、proxy_pass后,后端服务器的url(request_uri)情况分析

    server {
        listen      80;
        server_name www.test.com;
    
        # 情形A
        # 访问 http://www.test.com/testa/aaaa
        # 后端的request_uri为: /testa/aaaa
        location ^~ /testa/ {
            proxy_pass http://127.0.0.1:8801;
        }
        
        # 情形B
        # 访问 http://www.test.com/testb/bbbb
        # 后端的request_uri为: /bbbb
        location ^~ /testb/ {
            proxy_pass http://127.0.0.1:8801/;
        }
    
        # 情形C
        # 下面这段location是正确的
        location ~ /testc {
            proxy_pass http://127.0.0.1:8801;
        }
    
        # 情形D
        # 下面这段location是错误的
        #
        # nginx -t 时,会报如下错误: 
        #
        # nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular 
        # expression, or inside named location, or inside "if" statement, or inside 
        # "limit_except" block in /opt/app/nginx/conf/vhost/test.conf:17
        # 
        # 当location为正则表达式时,proxy_pass 不能包含URI部分。本例中包含了"/"
        location ~ /testd {
            proxy_pass http://127.0.0.1:8801/;   # 记住,location为正则表达式时,不能这样写!!!
        }
    
        # 情形E
        # 访问 http://www.test.com/ccc/bbbb
        # 后端的request_uri为: /aaa/ccc/bbbb
        location /ccc/ {
            proxy_pass http://127.0.0.1:8801/aaa$request_uri;
        }
    
        # 情形F
        # 访问 http://www.test.com/namea/ddd
        # 后端的request_uri为: /yongfu?namea=ddd
        location /namea/ {
            rewrite    /namea/([^/]+) /yongfu?namea=$1 break;
            proxy_pass http://127.0.0.1:8801;
        }
    
        # 情形G
        # 访问 http://www.test.com/nameb/eee
        # 后端的request_uri为: /yongfu?nameb=eee
        location /nameb/ {
            rewrite    /nameb/([^/]+) /yongfu?nameb=$1 break;
            proxy_pass http://127.0.0.1:8801/;
        }
    
        access_log /data/logs/www/www.test.com.log;
    }
    
    server {
        listen      8801;
        server_name www.test.com;
        
        root        /data/www/test;
        index       index.php index.html;
    
        rewrite ^(.*)$ /test.php?u=$1 last;
    
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
        }
    
        access_log /data/logs/www/www.test.com.8801.log;
    }
    
    

    文件: /data/www/test/test.php

    <?php
    echo '$_SERVER[REQUEST_URI]:' . $_SERVER['REQUEST_URI'];
    

    通过查看 $_SERVER['REQUEST_URI'] 的值,我们可以看到每次请求的后端的request_uri的值,进行验证。

    小结

    情形A和情形B进行对比,可以知道proxy_pass后带一个URI,可以是斜杠(/)也可以是其他uri,对后端request_uri变量的影响。
    情形D说明,当location为正则表达式时,proxy_pass不能包含URI部分。
    情形E通过变量($request_uri, 也可以是其他变量),对后端的request_uri进行改写。
    情形F和情形G通过rewrite配合break标志,对url进行改写,并改写后端的request_uri。需要注意,proxy_pass地址的URI部分在情形G中无效,不管如何设置,都会被忽略。

    展开全文
  • Nginx性能提升 - open_file_cache指令

    千次阅读 2019-02-19 14:14:16
    今天我们使用 open_file_cache 指令来尝试提高我们的nginx服务性能 前置工具 strace常用来跟踪进程执行时的系统调用和所接收的信号, 是一个强大的工具。 因为这里本人使用的是mac系统, 对应的mac分析命令 dtruss ...

    今天我们使用 open_file_cache 指令来尝试提高我们的nginx服务性能

    前置工具

    strace常用来跟踪进程执行时的系统调用和所接收的信号, 是一个强大的工具。

    因为这里本人使用的是mac系统, 对应的mac分析命令 dtruss

    dtruss使用

    首先我们找到Nginx的woker进程id

    ps -ef |grep nginx
    
    # dtruss -p 进程号 监听请求
    dtruss -p 864
    复制代码

    因为是mac系统,使用的是Kqueue事件模型,基本和epoll比较相似

    我们的open_file_cache指令

    官方地址: nginx.org/en/docs/htt…

    句法:	open_file_cache off;
            open_file_cache max=N [inactive=time];
    默认:	open_file_cache off;
    语境:	http,server,location
    复制代码

    配置可以存储的缓存:

    1. 打开文件描述符,它们的大小和修改时间;
    2. 关于目录存在的信息;
    3. 文件查找错误,例如“找不到文件”,“没有读取权限”等。
    4. 应该通过open_file_cache_errors 指令单独启用缓存错误 。

    该指令具有以下参数:

    1. max

      设置缓存中的最大元素数; 在缓存溢出时,删除最近最少使用(LRU)的元素;

    2. inactive

      定义一个时间,如果在此期间未访问该元素,则从该缓存中删除该元素; 默认情况下,它是60秒;

    3. off

      禁用缓存。

    open_file_cache max=102400 inactive=20s;
    max指定缓存数量 inactive是指经过多长时间文件没被请求后删除缓存。我指定了20s,所以等到至少20s不访问这个文件,相应缓存的这个文件的更改信息才会被删除。

    句法:	open_file_cache_errors on | off;
    默认:	open_file_cache_errors off;
    语境:	http,server,location
    通过open_file_cache启用或禁用文件查找错误的缓存 。
    复制代码

    文件错误是否也同样缓存

    句法:	open_file_cache_min_uses number;
    默认:	open_file_cache_min_uses 1;
    语境:	http,server,location
    复制代码

    open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的

    句法:	open_file_cache_valid time;
    默认:	open_file_cache_valid 60s;
    语境:	http,server,location
    复制代码

    这个是指多长时间检查一次缓存的有效信息。也就是说即使我一直访问这个文件,30s后会检查此文件的更改信息是否变化,发现变化就更新

    nginx.conf 示例

    nginx.conf配置

    location / {
        open_file_cache max=1000 inactive=20s;
        open_file_cache_valid 30s;
        open_file_cache_min_uses 2;
        open_file_cache_errors on;
    
        index  index.html index.php;
    }
    复制代码

    分析(使用dtruss工具追踪)

    通过我们分析调用流程,观察第一次和第二次区别,第二次因为通过第一次已经把文件描述符缓存了,所以省略了 open("/Users/Shared/www/index.html")等文件操作,在大流量环境中,会有显著的提高。

    但同时注意缓存的时效性,根据实际情况,来设置缓存的时间。

    我们再试验一个反例说明 open_file_cache_errors:

    1. 将访问的index.html文件改为index.a
    mv index.html index.a
    复制代码

    因为我们设置了open_file_cache_valid 30s,我们等待30s后,才会去检查缓存.

    1. 刷新浏览器

    1. 我们再将index.a改为index.html
    mv index.a index.html
    复制代码

    因为open_file_cache_errors指令的开启(缓存错误信息), 同样需要等待30s,才能返回正确值

    如果将open_file_cache_errors指令缓存关掉,将会立即生效。

    此文主要介绍了open_file_cache相关指令用法, 希望此文对大家有所帮助.


    写更好的技术文章,我们一起进步

    关注我的个人公众号:

    展开全文
  • JSP第版课后习题下载:https://download.csdn.net/download/weixin_42859280/11265785 JSP第版课后习题答案下载:https://download.csdn.net/download/weixin_42859280/11265728 剪切之前的:...

    JSP第二版课后习题下载:https://download.csdn.net/download/weixin_42859280/11265785

    JSP第二版课后习题答案下载:https://download.csdn.net/download/weixin_42859280/11265728

    剪切之前的:https://blog.csdn.net/weixin_42859280/article/details/94355366

     

    习题四【第三版3章】

    一、选择题

    1、在JSP中,要定义一个方法,需要用到以下(   )元素。D

    A.<%=  %>                            B.<%   %>

    C.<%@  %>                           D.<%!  %>

    2、在J2EE中,在一个JSP文件中,有表达式<%=2+3 %>,它将输出( )。 B

    A.2+3                                   B.5                 

    C.2                                 D.不会输出,因为表达式是错误的

    3、在JSP中,(    )动作用于将请求转发给其他JSP页面。  A

    A.forward                           B.include

    C.useBean                           D.setProperty

    4、要设置某个JSP页面为错误处理页面,以下page指令正确的是(  )。  B

    A.<%@ page errorPage="true"%>                     

    B.<%@ page isErrorPage="true"%>

    C.<%@ page extends="javax.servlet.jsp.JspErrorPage"%>

    D.<%@ page info="error"%>

    5、当浏览器第二次访问以下JSP网页时的输出结果是什么?( )C

    <%! int a=0;     %>

    <%

         int b=0;

         a++;

         b++;

    %>

    a:<%= a %> <br>

    b:<%= b %>

    选项:

    A.a=0  b=0                         B. a=1  b=1

    C. a=2  b=1                         D. a=2  b=2

    6、关于<jsp:include>, 下列说法不正确的是(  )。D【百度说是C】

    A. 它可以包含静态文件。

    B. 它可以包含动态文件。

    C. 当它的flush属性为true时,表示缓冲区满时,将会被清空。

    D. 它的flush属性的默认值为true。

    Include指令(编译时包括)又叫静态引用,约等于同一个界面,可以共享数据。
    Include动作(运行时包括)又叫动态引用,完全是两个界面,不能共享数据。
    autoFlush 定义缓冲满时,缓冲输出是否自动完成(flush)或抛出异常。
    缺省值为true。 

    7、在JSP中,对<jsp:setProperty>标记描述正确的是(  )。C

    A. <jsp:setProperty>和<jsp:getProPerty>必须在一个JSP文件中搭配出现。

    B. 就如同session.setAttribute()一样,来设计属性/值。

    C. 和<jsp:useBean>动作一起便用,来设置bean的属性值。

    D. 就如同request.setAttribute()一样,来设置属性/值。

    使用<jsp:getproperty>之前,必须<jsp:usebean>来创建它。
    
    不能使用<jsp:getproperty>来检索一个已经被索引了的属性。

    8、在 myjsp.jsp 中,关于下面的代码说法错误的是( )。A

    <%@ page language="java" import="java.util.*" errorPage="error.jsp" isErrorPage="false" %>     

    A.该页面可以使用 exception 对象  。

    B.该页面发生异常会转向 error.jsp  。

    C. 存在 errorPage 属性时,isErrorPage 是必须的属性值且一定为 false 。

    D.error.jsp 页面一定要有isErrorPage 属性且值为 true。

    9、下列哪一种不是JSP 中的注释符( )。   A

    A. <!--注释内容-->                         B.  /*注释内容*/     

    C. //注释内容                              D.   /**注释内容**/

    A是HTML里面的。

    https://blog.csdn.net/weixin_42859280/article/details/94357167

    10、J2EE中在JSP中要使用user包中的User类,则以下写法正确的是(   )。A

    A. <jsp:useBean id="user"class="user.User"scope="page"/>

    B. <jsp:useBean class="user.Use.class"/>

    C. <jsp:useBean name="user"class="user.User"/>

    D. <jsp:useBeam id="user"class="user"import="user.*"/>

    二、判断[1:表示对;0:表示错;]

    1、在page指令中,import参数允许重复使用多次。( )1

    2、<!--  -->中可以使用<% %>动态输出注释内容,同时<%--  --%>中也可以使用<% %>,因为预览JSP页面时没有报错。( )1

    [P54]

    3、当page标识的isThreadSafe属性设为true时,JSP只可以接受一个用户访问。( )0

    【P61,默认是true,能同时处理多个用户请求。false,一个jsp一次只能处理一个请求】

    4、<jsp:include page="body.jsp?name=tom&password=123" />可用于在JSP页面中包含body.jsp文件,并传递两个参数name和password。( )0

    【它没有这个功能】

    5、<%@ include file=”URL” %>允许包含动态文件和静态文件,但是这两种包含文件的结果是不同的,如果文件仅仅是静态文件,那么这种包含仅仅是把包含文件的内容加到JSP文件中去,这个被包含的文件不会被JSP编译执行。相反地,如果被包含文件是动态文件,那么这个被包含文件会被JSP编译器执行。( )0

    这个命令只有静态的。

    三、填空

    1、JSP有三个指令元素:

     <%@page%><%@include %><%@taglib %>

    2、JSP的脚本元素包含以下4个部分:

    隐藏注释(Hidden Comment)、声明(Declarations)、脚本段(ScriptLets)、表达式(Expression)

                      、                                                       

    3、动作元素<jsp:setProperty>的作用为           设置javabean对象的属性值                   

    4、<jsp:forward>的作用是    页面跳转     

    5、在JSP页面中可以声明方法,但是仅在   当前页面    内有效。

    四、简答

    1. 如何在HTML网页中嵌入JSP程序代码?怎样来定义JSP中的声明区与程序区?

    答:在JSP网页中必须于<%与%>符号间嵌入程序代码。
    JSP声明的语法格式为:
    <%! declaration; [ declaration; ] ... %> 或
    <%! 声明; [声明; ] ... %>
    脚本代码的语法格式如下:
    <% code fragment %> 或
    <% 代码 %>
    

    2. 请说明JSP中有哪3个指令元素,以及这3个指令的主要用途。

    答:page指令:可用来设置JSP网页的特性,如编码方式、引用类、缓冲区等。
    include指令:可用来将HTML、文本文件或者JSP程序加载当前的JSP网页。
    taglib指令:可用来引用一个自定义的标签库。
    

    3. JSP中include指令与include动作的区别是什么?

    答:include指令是指把其它页面的Java代码(源码)加进来,跟本页面的代码合并在一起,
    相当于把源码从那个页面复制到本页面中来,然后再编译。
    并且由于本页面编译时已经包含了别的文件的源码,所以以后其它页面更改时,
    本页面并不理会,因为已经编译过了。
    <jsp:include>动作是指两个页面的代码运行完以后,
    再把包含的那个页面运行后的HTML结果页面加到本页面运行后的HTML结果页面中来。
    所以是运行时包含,并且还可以传递参数给被包含的页面。
    

    4. JSP网页可以使用的特殊操作元素有哪些?其中<jsp:forward>与<jsp:param>操作元素各有什么功能?

    答:可使用的操作元素有<jsp:param>、<jsp:include>、<jsp:forward>、<jsp:plugin>。
    <jsp:forward>:可将当前浏览器显示网页的网址,重新导向新的网址。
    <jsp:param>:主要用来传递参数给JSP程序,而由程序取得参数值。
    

    五、编程

    1. 编写一个JSP程序,计算10!,并显示出结果。要求先声明计算阶乘的方法,再调用该方法,最后在页面上输出结果。

    (进阶要求,通过表单提交一个正整数,然后计算它的阶乘。)

    2. 在JSP页面中静态包含文件。要求程序包含两个文件,主文件静态包含一个能够计算数据的算数平方根的页面。

    3. 动态包含页面并传递数据。要求程序包含两个文件,主文件加载次文件,并将随机产生的0~1之间的数据传递给它,并且在页面上显示出来。

    (进阶要求,把动态包含改为动态重定向,比较两者之间的区别。)

    4. 计算三角形的面积。要求由用户输入三角形的三条边,判断这三条边是否能构成一个三角形,若能构成三角形,则输出三角形的面积。

     

    习题五【对应第三版4章】

     

    一、选择题

    1、在J2EE中,下列(  )语句可以获取页面请求中的一个单选框的选项值(单选框的名字为name)。C

    A.  response.getParameter("name");      

    B.  request.getAttribute("name");

    C.  request.getParameter("name");         

    D.  request.getParameters("name");

    P89

    2、在J2EE中,request对象的(     )方法可以获取页面请求中一个表单控件对应多个值时的用户的请求数据。D

    A.String getParameter(String name)

    B.String[] getParameter(String name)

    C.String getParameterValuses(String name)

    D.String[] getParameterValues(String name)

    P91下面

    3、以下对象中作用域最大的是(  )。C

    A.request                    B.session     

    C.application                 D.page

    P116

    4、在JSP页面中,能够完成输出操作的内置对象是 (  )。A

    A.   out                       B.  response

    C.   request                    D. config

    P103

    5、要在session对象中保存属性,可以使用以下哪个语句?(  )B

    A.   session.getAttribute("key","value");

    B.    session.setAttribute("key","value");

    C.   session.setAtrribute("key");

    D.   session.getAttribute("key");

    P109

    6、需要删除session中的某个属性key,可以调用下面的(   )方法。B

    A.   remove(“key”)

    B.    removeAttribute("key")

    C.   invalidate()

    D.   logout()

    P110

    7、在J2EE中,假如HttpSession的getLasAccessTime()方法返回值为x,getCreationTime()方法返回值为y,则为x - y()。C

    A.两个连续请求之间间隔的最长时间

    B.最近的两个连续请求之间的时间间隔

    C.最后使用session发送请求的时间和session创建时间的间隔

    D.最后使用session发送请求的时间

    P110

    8、以下代码能否编译通过,假如能编译通过,运行时得到什么输出结果( )。A

    <%

    request.setAttribute("count",new Integer(0));

    Integer count = request.getAttribute("count") ;

    %>

    <%=count %>

    A.   编译不通过

    B.    可以编译运行,输出0

    C.   编译通过,但运行时抛出ClassCastException

    D.   可以编译通过,但运行无输出

    貌似request.getAttribute("count") 必须强制转化 Integer

    9、现在session中没有任何属性,阅读下面2个JSP中的代码,将分别输出( )。A

    <%

              out.println(session.getAttribute("svse "));

    %>

    <%

              session.invalidate();

              out.println(session.getAttribute("svse "));

    %>

    A.   null, 异常信息

    B.    null, null,

    C.   异常信息,异常信息

    D.   异常信息,null

    1,返回一个什么都没有的。所以是null

    2,已经被结束。所以是null。参考P114

    10、Form表单提交的信息中含有“name= svse”,阅读下面的JSP,a.jsp将输出()。A

           接受该请求的JSP:

    <%

              response.sendRedirect(“a.jsp");  

    %>

           a.jsp包含如下代码

    <%=request.getParameter(“name") %>

    A.   null

    B.    什么都不输出

    C.   异常信息

    D.   svse

    P89.没有实际参数与之对应的时候。就会输出null。89页有例子。

    二、判断[1:表示对;0:表示错;]

    1、<jsp:forward ... >标记的page属性值是相对的URL地址,只能静态的URL。( )P70 3.4.2

    2、利用response对象的sendRedirect方法只能实现本网站内的页面跳转,但不能传递参数。(  )P98

    3、contentType属性用来设置JSP页面的MIME类型和字符编码集,取值格式为"MIME类型"或"MIME类型;charset=字符编码集",response对象调用addHeader方法修改该属性的值。(  )0  P96

    4、在J2EE中,重定向到另一个页面,可以用request.sendRedirect("http://www.jb-aptech.com.cn");(  )1P98

    【有争议】

    https://blog.csdn.net/qq_27668813/article/details/51394736

    5、应用application对象能在不同用户之间共享数据(    )。1 P116

    三、填空

    1、当客户端请求一个JSP页面时,JSP容器会将请求信息包装在             对象中。request

    2、已知文件look.jsp的路径为c:/myjsp/inc,文件login.jsp的路径为c:/myjsp。若使用response的重定向方法由look.jsp跳转到login.jsp中,则正确的写法为________________ 。response.sendRedirect(“../login.jsp”);

    3、当getParameter()方法的参数部分指定的输入控件不存在时,该方法的返回值为  ____________。null

    4、列表框的name属性值为“city”,并且允许多选,若要一次读取所有的选中项并存放于数组str中,则对应的java语句为____________________ 。String[] str=request.getParameterValues(“city”);

    5、给定一个JSP程序源码如下:

    <jsp:include page = “test.jsp”flush = “true”>

    <jsp:param name = “location”value = “beijing”/>

    </jsp:include>

    在test.jsp中加入____________________代码片断可以输出参数location的值。<%=request.getParameter(“location”)%>

    P89

    四、简答

    1. JSP中的内建对象包含哪些?试简述这些对象在JSP中的主要功能。

    答:request:取得客户端数据与系统的信息。
    response:响应客户端信息。
    application:记录与处理上线者共享的数据。
    session:记录与处理上线者的个别数据。
    out:控制数据输出的操作。
    config:取得JSP编译后Servlet的信息。
    pageContext:存取与处理系统运行时期的各项信息。
    page:表示当前的JSP网页。
    

    2. response重定向方法sendRedirect()和动作元素<jsp:forward>的区别是什么?

    (1)response.sendredirect()会在客户端呈现跳转后的URL地址;
    这种跳转称为客户端跳转。使用response.sendredirect()将重定向的URL发送到客户端,
    浏览器再根据这个URL重新发起请求。所以用这个方法时,
    你在浏览器地址栏上会看到新的请求资源的地址。
    并且这个时候的request,response都和第一次的不一样了。
    这时是重新产生了新的request,response。
    (2)使用<jsp:forward>完全是在服务器上进行,浏览器地址栏中的地址保持不变;
    这种跳转称为服务器端跳转。所以使用这个方法时没有产生新的用request,response。
    因为request没有变,在同一个请求内,可以用request来转递参数。
    (3)response.sendRedirect()想带参数的话,
    自己在地址中写成 xxx.jsp?param1=aaa&... 这种形式传递参数。
    <jsp:forward>能够使用<jsp:param/>标签向目标文件传送参数和值 ,
    目标文件必须是一个动态的文件,能够处理参数。
    (4)<jsp:forward>后面的语句不会被执行也不会继续发送到客户端,
    response.sendRedirect()后面的语句会继续执行,除非语句前面有return。
    (5)<jsp:forward>是在服务器的内部进行转换,只发送给客户端最后转到的页面,
    速度会比较快;response.sendRedirect()需要服务器与客户端之间的往返,
    可以转到任何页面,包括网络有效域名。但速度比较慢。
    

    3. application与session对象存储数据变量的方式有何区别?

    答:application:记录联机用户共享的数据。session:记录联机用户的个别数据。

    4. 请说明session对象的生命周期在哪些状况下会结束。

    答:当以下四种情形之一发生时,session与其中的数据便会消失:
    (1)用户关闭当前正在使用的浏览器程序。
    (2)关闭网页服务器。
    (3)用户未向服务器提出请求超过预设的时间,Tomcat服务器预设为30分钟。
    (4)运行程序结束session。
    

    五、编程

    1. 编写一个简单的网上测试系统。要求由两个页面组成,第一个页面显示试题,例如单选题,如图5-37所示。第二个页面获取考生提交的选择,统计考生得分并显示。

    2. 信息的保存和获取。

    例如简单的网上购物,将购买者的姓名、商品名保存在session对象中,实现一个Web目录下的页面对session对象中信息的共享。要求创建3个页面,第1个页面输入用户的姓名,第2个页面输入购买商品名的名称,第3个页面实现结账处理。

    3. 简单的用户登录。

    用户通过输入用户名和密码(假设用户名和密码都是admin)进入用户或管理员页面,拒绝绕过登录页面直接进入用户或管理员页面。

    要求创建4个文件,第1个是用户登录页面,此页面输入用户名和密码以及登录类型,如图5-38所示。

    图5-37  网上测试单选题                    图5-38  用户登录页面

    第2个文件对提交信息进行检查,如果输入正确则根据登录类型分别进入到管理员或普通用户页面,用重定向的方法实现跳转到这两个页面。如果输入有误,则弹出警示对话框,如图5-39所示,让用户重新输入信息。

    第3个文件是管理员页面,显示管理员成功登录的信息。

    第4个文件是普通用户页面,显示普通用户成功登录的信息。

    4. 用application对象实现一个简单的聊天室。

    要求采用application对象记录所有用户的留言信息并在页面上显示出来,如图5-40所示。

    图5-39  警示对话框                    图5-40  显示聊天内容

    习题六【第三版5章】

    一、选择题

    1、在web程序中,cookie和session的信息保存位置分别在哪里?( )  A

    A. cookie保存在客户端,session保存在服务器端

    B. cookie和session都保存在客户端

    C. cookie和session都保存在服务器端

    D. cookie保存在服务器端,session保存在客户端

    cookie:P133 session:P147

    2、有关会话跟踪技术描述不正确的是( )。D

    A. Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端 P133

    B.关闭浏览器意味着会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期。实话

    C.在禁用Cookie时可以使用URL重写技术跟踪会话。P147

    D.隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示。P148

    3、J2EE中,Servlet API 为使用Cookie,提供了( )类。     A

    A. Javax.servlet.http.Cookie

    B. Javax.servlet.http.HttpCookie

    C. Javax.servlet. Cookie

    D. Javax.servlet.http. HttpCookie

    4、带有名为myCookie 的cookie存在于客户计算机上,服务器发送有同名的一个cookie。 这会发生什么?( )A

    A.新cookie 重写到老的cookie          B.新 cookie 被拒绝

    C.作为拷贝存贮新cookie               D.抛出一个异常

    5、不能在不同用户之间共享数据的方法是( )。A

    A.通过cookie

    B.利用文件系统

    C.利用数据库

    D.通过ServletContext对象

    6、如何获取一个 Cookie[] ?(  )。   A

    A.request.getCookies()     

    B.request.getCookie()

    C.response.getCookies()   

    D.response.getCookie()

    7、如何发送Cookie? ( )B

    A. 使用new Cookie语句

    B. 调用response.addCookie方法

    C. 使用Cookie的setMaxAge方法

    D. setCookie方法

    8、将Cookie保存到客户端,就是为了以后得到其中保存的数据。以下说法错误的是( )。C

    A.调用HttpServletRequest的getCookies得到一个Cookie对象的数组

    B.在客户端传来的Cookie数据类型都是数组类型,因此要得到其中某一项指定的Cookie对象,需要遍历数组来找。

    C.在客户端传来的Cookie数据类型都是枚举类型,因此要得到其中某一项指定的Cookie对象,需要指定元素位置来找。

    D.JSP将调用request.getCookies()从客户端读入Cookie,getCookies()方法返回一个HTTP请求头中的内容对应的Cookie对象。

    9、Cookie调用getValue( )方法取得( )。A

    A.与指定名字关联的值

    B.从客户端读入Cookie    

    C.检查各个Cookie的名字

    D.检查各个Cookie的值  

    10、下面的代码使用setMaxAge()方法设置Cookie对象login在一天之内都是有效的是(  )B

    A.login.setMaxAge(3600);

    B.login.setMaxAge(86400);

    C.login.setMaxAge(1);

    D.login.setMaxAge(7200);

    二、判断[1:表示对;0:表示错;]

    1、当用户关闭浏览器的时候,Cookie的数据便会消失。(  )0

    2、Cookie实质是服务器端与客户端之间传送的普通HTTP头,可以保存也可以不保存在客户的硬盘上。(  )1

    3、Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。(  )1

    4、使用Cookie的目的就是为用户带来方便,为网站带来增值,但是事实上Cookie会造成严重的安全威胁。(  )0

     5、Cookie中的内容大多数经过了加密处理,因此在我们看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。(  )1

    三、填空

    1、Cookie数据存储的功能由      浏览器       所提供,因此,Cookie功能都必须要有浏览器的支持才行。

    2、Response对象的addCookie(Cookie cookie)方法添加一个       Cookie       对象,用来保存客户端的用户信息。

    3、用Request的      getCookies()       方法可以获得这个Cookie。

    4、用response对象的   addCookie    方法可以将cookie对象写入客户端。

    5、要删除某一个客户端的Cookie,必须使用前面的sexMaxAge()方法,并将Cookie的存在期限设为__0__。    

    四、简答

    1. 简述Cookie的概念与使用方式。

    答:Cookie为浏览器提供的功能,是一种可将联机用户的数据存储在客户端计算机上的技术,
    要运用Cookie必须先建立一个Cookie对象来存储字符串数据,再将此Cookie对象传送到客户端。

    2. 查看自己计算机上Cookie文件的保存位置。浏览网页,运行本书的例子,看是否会把信息记录在此位置?文件是如何命名的?文件的内容是什么?

    答:在默认情况下,Cookie是随着用户关闭浏览器而自动消失的。
    所以书上例子不会保存Cookie。如果在例2中我们在usingCookie.
    jsp中使用setMaxAge()方法,设置Cookie对象的存在期限。
    这样Cookie对象就会保存在硬盘中的Cookies文件夹中
    如“C:\Documents and Settings\Administrator\Cookies”如文件“administrator@ch06[1].txt”。
    内容是如下代码  
    “name
    d
    localhost/ch06/
    1024
    1524104704
    30118001
    4117789296
    30117999
    *”
    

    3. Cookie的常见用途有哪些?

    (1)网站浏览人数管理 
    由于代理服务器、缓存等的使用,
    唯一能帮助网站精确统计来访人数的方法就是为每个访问者建立一个唯一的ID。
    使用Cookie,网站可以完成以下工作:测定多少人访问过;
    测定访问者中有多少是新用户(即第一次来访),多少是老用户;
    测定一个用户多久访问一次网站。 
    通常情况下,网站设计者是借助后台数据库来实现以上目的的。
    当用户第一次访问该网站时,网站在数据库中建立一个新的ID,
    并把ID通过Cookie传送给用户。用户再次来访时,网站把该用户ID对应的计数器加1,
    得到用户的来访次数或判断用户是新用户还是老用户。 
    (2)按照用户的喜好定制网页外观 
    有的网站设计者,为用户提供了改变网页内容、布局和颜色的权力,
    允许用户输入自己的信息,然后通过这些信息对网站的一些参数进行修改,以定制网页的外观。
    (3)在电子商务站点中实现诸如“购物篮”等功能 
    可以使用Cookie记录用户的ID,这样当你往“购物篮”中放了新东西时,
    网站就能记录下来,并在网站的数据库里对应着你的ID记录当你“买单”时,
    网站通过ID检索数据库中你的所有选择就能知道你的“购物篮”里有些什么。
    

    4. Cookie与session有何不同?

    session与Cookie同样是用来记录上线用户的个别数据的,两者的差异在于session是存在于服务器端,
    而Cookie则是存在于客户端。

    五、编程

    1. 理解并掌握Cookie的作用及利用Cookie实现用户的自动登录功能,如图6-10所示。

    图6-10  应用Cookie保存用户信息

    当服务器判断该用户是首次登录时,会自动跳转到登录页面等待用户登录,并填入相关信息。通过设置Cookie的有效期限来保存用户的信息。关闭浏览器后,验证是否能够自动登录,若能登录打印欢迎信息,否则跳转到登录页面。

     

    习题七【第三版6章】

    • 选择题

    1、<jsp:useBean>声明对象的默认有效范围为(  )。A

    A. page                       B.   session        C. application                      D. request

    page对象就是指jsp页面本身,是java.lang.Object实例。

    2、编写JavaBean就是编写一个Java类,所以只要会写类就能编写一个Bean,一个完整JavaBean在类的命名上需要遵守以下规则,其中错误的是(  )。D

    A. 类中方法的访问属性必须是public的。类中方法的访问属性必须是public的

    B. 对于boolean类型的成员变量,允许使用is代替get。对于boolean类型的成员变量,允许使用is代替get和set

    C. 类中如果有构造方法,那么这个构造方法也是public的,并且是无参数的。

    类中如果有构造方法,那么这个构造方法也是public的,并且是无参数的

    D. 在JavaBean中定义属性时,应该定义成public。javaBean属性定义为pirvate

    https://blog.csdn.net/yihuliunian/article/details/90900212[遵守一下4项规定。]

    3、关于JavaBean的说法,哪个是正确的?(  )D

    A.   JavaBean的具体类可以不是public的。[P167]

    B.    JavaBean可以只提供一个带参数的构造器。[P167]

    C.   jsp:userBean可以向HTML标记一样不关闭。[]

    D.   JavaBean可以保存状态。

    4、下边哪个不是MVC中的组成部分?(  )B

    A.   JavaBean  B. FrameWork  C.   JSP  D. Servlet

    5、下面哪一个是正确使用JavaBean的方式?(  )A

    A.   <jsp:useBean id="address" class="AddressBean" />P172

    B.    <jsp:useBean name="address" class="AddressBean"/>

    C.   <jsp:useBean bean="address" class="AddressBean" />

    D.   <jsp:useBean beanName="address" class="AddressBean" />

    6、在JSP中使用<jsp:getProperty>标记时,不会出现的属性是:(  )C

    A.  name     B.  property     C. value        D.以上皆不会出现

    7.、在JSP中调用JavaBean时不会用到的标记是:(  )A

    A.<javabean>     B. <jsp:useBean>    C.<jsp:setProperty>   D. <jsp:getProperty>P170首行

    8.、关于JavaBean正确的说法是:( )A

    A. Java文件与Bean所定义的类名可以不同,但一定要注意区分字母的大小写

    B. 在JSP文件中引用Bean,其实就是用<jsp:useBean>语句

    他的这种说法没错,但是太绝对了,还有其他的方法可以引用bean啊,因为它是选择题,所以语句要要求很严谨

    C. 被引用的Bean文件的文件名后缀为.java

    jsp中还可以通过Java脚本来newJavabean对象

    D. Bean文件放在任何目录下都可以被引用

    所有编译好的JavaBean都需要放在某个应用目录下的_____WEB-INF/classes_______目录之下。

    9、 test.jsp文件中有如下一行代码:

    <jsp:useBean id=”user” scope=”__” type=”com.UserBean”>

    要使user对象可以作用于整个应用程序,下划线中应添入(  )。D

    A.   page    B.    request  C.   session   D.  application

    作用于整个应用程序

    10、下面哪项是错误的设置Bean属性值的方法(   )。 B

    A. <jsp:setProperty name="beanInstanceName" property= "*" />

    B.<jsp:setProperty name="beanInstanceName" property="propertyName"/>

    C.<jsp:setProperty name="beanInstanceName" property="propertyName"

    param="parameterName" />

    D. <jsp:setProperty name="beanInstanceName" property="*" value="{string | <%= expression

    %>}"/>

    选项D重复啦

    二、判断题[1:表示对;0:表示错;]

    1、在MVC模式中,因为Servlet负责创建JavaBean,所以JavaBean的构造函数可以带有参数,除了保留get和set规则外,还可以有其他功能的函数。(   )1

    2、Bean文件放在任何目录下都可以被引用。(  )0

    3、get请求处理的数据量大小不受到限制。(   )0

    4、<jsp:getProperty>必须出现在其对应的<jsp:usebean>标签之后。(  )1【事实】

    5、相同的Javabean只会实例化一次。(   )0【https://zhidao.baidu.com/question/1642382354215987180.html

    三、填空题

    1、Javabean是一种     Java        类,通过封装     属性               方法          成为具有某种功能或者处理某个业务的对象,简称bean。

    2、在Tomcat中,所有编译好的JavaBean都需要放在某个应用目录下的_____WEB-INF/classes_______目录之下。

    3、JSP开发网站的两种模式分为______jsp+javabean__________和_____jsp+javabean+servlet___________ 。

    4、如果你想使用Javabean设计一个网站计数器,那么该bean的scope应当设为    application            

    5、按功能JavaBean可以分为____可视化JavaBean_________和_______非可视化JavaBean_____。

    四、问答题

    1. 试说明什么是JavaBean。

    答:JavaBean是一种特殊的Java程序,是用于包装特定功能的程序代码,
    可以被JSP网页重复使用,其本身无法独立运行,是JSP网页程序组件化的核心。

    2. 试说明如何在JSP网页中载入JavaBean。

    A:<jsp:useBean id=id-name scope=scope-name class=class-name />

    3. JavaBean对象可声明哪些不同的生命周期?

    答:request、session、page及applaction。

    4. JavaBean程序除了必须要有一个无传入值的建构式之外,还有哪些特色?

    答:除了必须要有一个无传入值的建构式之外,还必须是一个公开的类,并以set及get开头的方法来设置与取得属性。

    5. 试说明Get和Post方法之间的差异?

    答:Post和Get这两种设置方式主要的差异在于数据的传送方式,
    前者将所要传送的数据包含在HTTP文件头中,
    后者则是将数据直接串接在网址栏的后端,
    两者都可使用GetParameter取得传送的数据内容。

    五、编程

    1、要求编写两个JSP页面:input.jsp和show.jsp。编写一个名字为car的JavaBean,其中car由Car.class类负责创建。

    input.jsp页面提供一个表单。其中表单允许用户输入汽车的牌号、名称和生产日期,该表单将用户输入的信息提交给当前页面,当前页面调用名字为car的bean,并使用表单提交的数据设置car的有关属性的值。要求在input.jsp提供一个超链接,以便用户单击这个超链接访问show.jsp页面。

    show.jsp调用名字为car的bean,并显示该bean的各个属性的值。

    编写的Car.java应当有汽车号码、名称和生产日期的属性,并提供相应的getXxx和setXxx方法,来获取和修改这些属性的值。

     

    习题八[对应第三版本7章]

     

    一、选择题

    1.在WEB应用程序的目录结构中,在WEB-INF文件夹中的lib目录是放(   )文件的。C

    A. .jsp文件  B. .class文件  C. .jar文件  D. web.xml文件

    2、java.io.File对象的(   )方法可以新建一个文件。D
    A. delete()          B. createFile()       C. mkdir()      D. createNewFile()
    3、在JSP应用程序中要求删除所有photo目录中的的文件,但是保留文件夹,下列代码中空缺位置最适合的选项为(   )。A

    String path=request.getRealPath("photo");
    File fp1=new File(path);
    File[] files=fp1.listFiles();
    for(int i=0;i<files.length;i++)
    {
       if(__________________________)
         {
                files[i].delete();  
    }
    }
    A. files[i].isFile()       B. files[i].isDirectory()  C. !files[i].isFile()      D. ! files[i].isDirectory()

    4、下列File对象的哪个方法能够判断给定路径下的文件是否存在。(   )C

    A. canRead()     B .canWrite()    C. exists()       D. isDirectory()

    5、BufferedReader处理Reader类中的方法外,还提供了public String readLine()方法,该方

    法读入一行文本,这里的“一行”指字符串以“\n”或什么做结尾。(   )C

    A. \t      B. \f     C. \r      D. \p

    二、判断题[1:表示对;0:表示错;]

    1、File类直接处理文件和文件系统,它并不涉及文件的读写操作。(  )1

    2、创建一个File对象,就会在某个物理路径下创建一个文件或目录。(  )0

    3、使用Java的输出流写入数据的时候,就会开启一个通向目的地的通道,这个目的地可以是文件,但不能是内存或网络连接等。(  )0

    4、“纯文本”类的信息,一般使用字符流来进行处理。(  )1

    5、InputStream抽象类的read方法出错后一定会抛出一个IOException异常。(  )1

    三、填空题

    1、Java中有四个“输入/输出”的抽象类,                                                

    InputStream 、OutputStream、Writer、Reader

    2、从网站上下载jspsmartupload.jar这个文件,将此文件放到网站的    WEB-INF\lib   文件夹底下。

    3、字节流类为处理字节式输入/输出提供了丰富的环境,其处理单元为   1         个字

    节;字符流提供了处理任何类型输入/输出操作的足够功能,字符流处理的单元为         2              

    个字节的Unicode字符。

    四、问答题

    1. JSP网页使用File类之前,将哪个命名空间载入?

    import="java.io.*"

    2. 试说明如何利用File类进行文件目录的操作?

    答:利用File类进行文件目录的操作首先必需建立一个File对象,
    将所要操作文件或是目录完整路径当作参数传入,当File对象建立之后,
    JSP网页便可以利用这个对象调用File类的所有方法,以进行各种文件目录的操作。

    3. 简述文件存取操作的操作过程。

    答:首先利用File类建立一个参照指定文件的目录的File实体对象,
    接下来利用FileWriter和FileReader这两个类,进行指定文件的读写,
    其中的FileWriter的write方法,负责将数据写入文件,而FileReader的read则用来读取文件中的数据。

    五、编程

    1、 创建两个文件selectContent.jsp和writeContent.jsp,首先使用selectContent.jsp中的表单输入存放路径、保存的文件名和将要写入文件的文件内容信息,提交后,由writeContent.jsp文件负责将内容写到指定的文件中,同时放到指定的路径下。运行结果如图8-12和图8-13所示。

     

    图8-12  selectContent.jsp页面

     

    图8-13  提交成功后的结果

    2、. 创建两个文件selectFile.jsp和readContent.jsp。首先使用selectFile.jsp中的表单输入存放路径和将要读取的文件名,提交后,由readContent.jsp文件负责将文件读出并显示在页面上。运行结果如图8-14和图8-15所示。

                 

    图8-14  selectFile.jsp页面                          图8-15  提交成功后的结果

     

     

    习题十【对应三版本8章】

     

    一、选择题

    1、创建JSP应用程序时,配置文件web.xml应该在程序下的(   )目录中。C
           A. admin       B. servlet       C. WEB-INF        D. WebRoot  P234

    2、 Oracle数据库的JDBC驱动程序类名及完整包路径为:(   )D

    A.   jdbc.driver.oracle.OracleDriver

    B.    jdbc.oracle.driver.OracleDriver

    C.   driver.oracle.jdbc.OracleDriver

    D.   oracle.jdbc.driver.OracleDriver   P231

    3、请选出微软公司提供的连接SQL Server 2000的JDBC驱动程序。(   )C

    A. oracle.jdbc.driver.OracleDriver                   B. sun.jdbc.odbc.JdbcOdbcDriver

    C. com.microsoft.jdbc.sqlserver.SQLServerDriver  P231     D. com.mysql.jdbc.Driver

    4、下述选项中不属于JDBC基本功能的是:( )D

    A. 与数据库建立连接 B.  提交SQL语句   C.  处理查询结果 D.  数据库维护管理【常识吗?】

    5.在 JSP中,便用 Resultset对象的 next()方法移动光标时,如果超过界限,会抛出异常,该异常通常是(   )。C

    A.InterruptedExceptlon   B.AlreadyBoundExceptlon  C.SQLException  D.NetExcePtlon

    6、cn是Connection对象,创建Statement 对象的方法是:(   )B

    A. Statement st=new Statement ();       B. Statement st=cn.createStatement()

    7、查询数据库得到的结果集中,游标最初定位在(    )。B

    A. 第一行  B. 第一行的前面  C. 最后一行  D. 最后一行的后面

    8、在JDBC中,下列哪个接口不能被Connection创建(  )。D

    A.Statement   B.PreparedStatement      C.CallableStatement      D.RowsetStatement【在课本上面没找到】

    9、该程序加载的是哪个驱动?(   )A【缺失啦】

    A. JDBC-ODBC桥连接驱动      B.部分Java编写本地驱动

    C. 本地协议纯Java驱动         D.网络纯Java驱动

    10、下列代码生成了一个结果集

    conn=DriverManager.getConnection(uri,user,password);

    stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

    ResultSet.CONCUR_READ_ONLY);

    rs=stmt.executeQuery("select * from book");

    rs.first();rs. previous();

    下面哪项对该rs描述正确( )D

    A.rs.isFirst()为真  B.rs.ifLast()为真  C.rs.isAfterLast()为真  D.rs.isBeforeFirst()为真

    二、判断题[1:表示对;0:表示错;]

    1、使用JDBC-ODBC桥效率会有所降低。(  )1

    2、Statement对象提供了int executeUpdate(String sqlStatement)方法,用于实现对数据库中数据的添加、删除和更新操作。(  )1

    3、数据库服务与Web服务器需要在同一台计算机上。(  )0【事实】

    4、使用数据库连接池需要烦琐的配置,一般不宜使用。(  )0【管理功能】

    5、JDBC构建在ODBC基础上,为数据库应用开发人员、数据库前台工具开发人员提供了一种标准,使开发人员可以用任何语言编写完整的数据库应用程序。(  )0【任何就过分了吧】

    三、填空题

    1、JSP应用程序配置文件的根元素为 _______<web-app>___________。

    2、JDBC的主要任务是:__________________、__________________、__________________。

    与数据库建立连接    、    发送SQL语句  、   处理结果   。

    3、如果想创建一个不敏感可滚动并且不可更新的结果集,参数选择__________________和__________________。

    ResultSet.TYPE_SCROLL_INSENSITIVE   ResultSet.CONCUR_READ_ONLY

    4、在可更新的结果集中插入一条新纪录,需要移动首先到可更新行,调用_______moveToInsertRow();___________函数。

    5、Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 是__________Access________数据库的加载驱动语句。

    四、问答题

    1. 试说明Statement与ResultSet接口的意义,以及它们生成的对象在JSP程序处理数据库时,分别扮演着什么样的角色?

    答:Statement:Statement接口中主要是提供了一些SQL运行的方法,
    以及设置运行SQL后所返回ResultSet类型对象的属性。
    由此接口所生成的对象在JSP中同样是用来运行各种SQL指令与设置Resultset对象的属性。
    ResultSet:ResultSet接口下所定义的方法大都是用来控制ResultSet对象中指针的移动的,
    以取得其中的数据元素。
    

    2. 试列举说明Statement运行SQL指令的3种方法成员。

    答:execute():运行一般SQL指令,例如建立数据库、修改数据表等等。
    executeQuery():运行以SELECT语句开头的描述,
    这个方法同时返回一个包含查看结果的ResultSet对象。
    

    3. 说明如何一次运行多段SQL语句。

    答:首先建立一个Statement对象,将多个想要运行的SQL指令以addBatch()方法加到批处理文档中,
    最后引用executeBacth()方法运行。

    五、编程

    1. 使用本章的数据库ch10中student表的结构,创建3个页面selectStudent.jsp、byNumber.jsp和byName.jsp,通过JSP页面对student表进行名字和学号的查询。运行效果如图10-28、图10-29和图10-30所示。

     

    图10-28  selectStudent.jsp页面

     

    图10-29  byNumber.jsp页面

    2. 使用本章数据库ch10中student表的结构通过JSP页面对student表进行添加、删除和修改。添加JSP页面处理功能:添加新学生、修改和删除选中的学生信息,如图10-31所示(或者自行设计界面)。

       

    图10-30  byName.jsp页面                            图10-31  演示页面

     

    习题十二【对应三版本10章】

    一. 选择题

    1. 下面Servlet的哪个方法用来为请求服务,在Servlet生命周期中,Servlet每被请求一次它就会被调用一次。( )A

    A.service()     B.init()    C. doPost()      D.destroy()

    P286

    2. Servlet 可以在以下(  )三个不同的作用域存储数据。B

    A.HttpServletRequest、HttpServletResponse、HttpSession

    B.HttpServletRequest、HttpSession、ServletContext

    C.HttpServletResponse、HttpSession、ServletContext

    D.HttpServletRequest、HttpServletResponse、ServletContext

    P298 P307 P311

    3. 在J2EE中,Servlet从实例化到消亡是一个生命周期。下列描述正确的是( )。ABD

    A.在典型的Servlet生命周期模型中,每次Web请求就会创建一个Servlet实例,请求结束Servlet就消亡了P286

    B.init()方法是容器调用的Servlet实例此方法仅一次    P293

    C.在容器把请求传送给Servlet之后,和在调用Servlet实例的doGet或者doPost方法之前,容器不会调用Servlet实例的其他方法

    D.在Servlet实例在service()方法处理客户请求时,容器调用Servlet实例的init()方法一定成功运行了P293

     

    4. 在J2EE中,给定某Servlet的代码如下,编译运行该文件,以下陈述正确的是( )。B

    Public class Servlet1 extends HttpServlet{

       Public void init() throws ServletException{

       }

       Public void service(HttpServletRequest request,HttpServletResponse response)

               Throws ServletException,IOException{

           PrintWriter out = response.getWriter();

           Out.println(“hello!”);

       }

    }

    A. 编译该文件时会提示缺少doGet()或者dopost()方法,编译不能够成功通过

    B.编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到输出文字:hello!

    C.编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中看不到任何输出的文字

     D.编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到运行期错误信息

    5. 下面是IP地址为222.22.49.189Web服务器上,ch应用下的一个Servlet部署文件的片段:

       <servlet>

           <servlet-name>Hello</servlet-name>

           <servlet-class>myservlet.example.FirstServlet</servlet-class>     

       </servlet>

       <servlet-mapping>

           <servlet-name>Hello</servlet-name>

           <url-pattern>/helpHello</url-pattern>

       </servlet-mapping>

       访问此Servlet的URL地址是。(  )A

    A.http://222.22.49.189:8080/ch/helpHello【默认】

    B.http://222.22.49.189:8080/ch/helpHello.java

    C.http://222.22.49.189:8080/helpHello

    D./helpHello

    6. 在Web应用的部署描述文件中下面哪个选项能够将com.example.LoginServlet servlet 映射为 /utils/LoginServlet?(  )D

    A. <servlet>

    <servlet-class>com.example.LoginServlet</servlet-class>

    <url-pattern>/utils/LoginServlet</url-pattern>

    </servlet>

    B. <servlet-mapping>

    <servlet-class>com.example.LoginServlet</servlet-class>

     <url-pattern>/utils/LoginServlet</url-pattern>

    </servlet-mapping>

    C. <servlet>

    <servlet-mapping>

    <servlet-class>com.example.LoginServlet</servlet-class>

    <servlet-name>Login Servlet</servlet-name>

    <url-pattern>/utils/LoginServlet</url-pattern>

    </servlet-mapping>

    </servlet>

    D. <servlet>

    <servlet-name>Login.Servlet</servlet-name>

    <servlet-class>com.example.LoginServlet</servlet-class>

    </servlet>

    <servlet-mapping>

    <servlet-name>Login.Servlet</servlet-name>

    <url-pattern>/utils/LoginServlet</url-pattern>

    </servlet-mapping>

    7. 在Web容器中,以下哪两个类别的实例分别代表HTTP请求与响应对象?(  )BC

    A. HttpRequest                  B. HttpServletRequest

    C. HttpServletResponse            D. HttpPrintWriter

    二. 判断[1:表示对;0:表示错;]

    1. 不能给一个Servlet映射多个访问路径。(  0)P292

    2. JSP技术是在Servlet之后产生的,它以Servlet为核心技术,是Servlet技术的一个成功应用。( 1)P事实

    3. 实现转发需要两个步骤,首先在Servlet中要得到RequestDispatcher对象,然后在调用该对象的forward方法实现转发。

    ( 1 )P313-314

    三. 填空

    1. 在Servlet中有两种异常处理机制:______和_______。

    程序式异常处理机制和声明式异常处理机制。P316.以及标题。

    2. 如果某个类要成为Servlet,则它应该继承_________、________或_________接口或类。

    HttpServlet、GenericServlet、Servlet

    3. Servlet 的生命周期又一系列事件组成,把这些事件按照先后顺序排序_________、________、_________、________、_________。

    加载类,实例化,初始化,请求处理,销毁

    四. 简答

    1. 简述Servlet和JSP的关系。

    答:Servlet是服务器端运行的一种Java应用程序。当浏览器端有请求则将其结果传递给浏览器。
    在JSP中使用到的所有对象都将被转换为Servlet或者非Servlet的Java对象,
    然后被执行,所以执行JSP实际上与执行Servlet是一样的。
    

    2. 简述Servlet的生命周期。

    答:
    Servlet的生命周期可分为下面几个阶段:
    (1)装载Servlet。
    (2)实例化一个Servlet实例对象。
    (3)调用Servlet的init( )方法进行初始化。
    (4)服务。
    (5)卸载。
    

    3. 简述HttpSession接口的功能和使用方法。

    答:
    .HttpSession接口是Servlet提供会话追踪解决方案。 HttpSession对象存放在服务器端,只是对cookie和url重写技术的封装应用。
    使用HttpSession进行会话控制的过程:
    (1)获得一个HttpSession实例对象;
    (2)访问和设置与会话相关联信息,维护会话的状态;
    (3)废弃会话数据。
    

    4. 简述开发一个Servlet所需要的步骤。

    答:
    第一步:编写Servlet实例
    第二步:在web.xml文件中配置该Servlet
    第三步:编写其它文件
    

    五、编程

    1. 编写一个HTML页面和一个Servelt,实现利用Servelt()的doPost()方法读取HTML文件中Form表单内容。

    2. 编写一个利用HttpSession接口的用户登录的Servlet,当用户已经登录时,返回欢迎信息,否则转向登录页面。

     

     

    习题十三【对应三版本11章】

     

    一、选择题

    1. 在web.xml文件中,有下列代码:

    <filter-mapping>

       <filter-name>LogFilter</filter-name>

       <url-pattern>/*.jsp</url-pattern>

       < dispatcher > REQUEST </ dispatcher >

       < dispatcher > INCLUDE < /dispatcher >

    </filter-mapping>

     

    Hello.jsp文件的代码如下:

    <%@ page contentType="text/html;charset=GB2312" %>

    <%@ page import="java.sql.*" %>

    <html>

    <body bgcolor=cyan>

     <jsp:include file="date.jsp"/>

     <jsp:forward page="helpHello.jsp"/>

     <a href="login.jsp">登录</a>

    </body>

    </html>

    访问Hello.jsp文件,过滤器LogFilter过滤的文件有( )D

    A.Hello.jsp            B.helpHello.jsp

    C.login.jsp            D.date.jsp

       < dispatcher > REQUEST </ dispatcher >
    不要request
    
       < dispatcher > INCLUDE < /dispatcher >
    不要include

    2. 下列哪个不属于监听器接口ServletContextAttributeListener提供的方法()D

    A.public void attributeAdded(ServletContextAttributeEvent event)

    B.public void attributeRemoved(ServletContextAttributeEvent event)   

    C. public void attributeReplaced(ServletContextAttributeEvent event)     

    D.public void valueBound(HttpSessionBindingEvent event)

    P355

    3. 下列哪个不属于Servlet2.3提供的监听器。( )D

    A.ServletContext对象状态变化(事件)的监听器P351

    B.HttpSession对象状态变化(事件)的监听器P351

    C.HttpServletRequest对象状态变化(事件)的监听器[没找到]

    D.HttpServletResponse对象状态变化(事件)的监听器

    【或者,可以按照P351的。没有response】

    4. 为了实现对下列jsp代码动作的监听,需要定义的监听器必须实现下列哪些接口。( )BD

    test.jsp文件代码如下:

    <%

    getServletContext().setAttribute("userName","hellking");

    getServletContext().removeAttribute("userName");

    request.getSession.setAttribute("user","hellking");

    %>

    A. ServletContextListener           B. ServletContextAttributeListener

    C. HttpSessionAttributeListener      D. HttpSessionBindingListener

    E. ServletRequestAttributeListener

    5.给定某Servlet程序的片段如下,用户在浏览器地址栏中键盘键入正确的请求URL并回车后,在控制台上显示的结果是。()C

       public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException ,IOException

       {

       System.out.println("get");

           doPost(request,response);

       }

       public void doPost(HttpServletRequest request,HttpServletResponse response)  throws ServletException ,IOException

       {

       System.out.println("post");

       }

    A.get      B.post     C.getpost     D.postget

    【嗯哼?】

    二、判断[1:表示对;0:表示错;]

    1. 部署过滤器的工作内容,实际就是在Web应用的Web.xml文件中配置过滤器。(  1)

    2. 在Web.xml文件中部署监听器,用<listener>注册监听器,用<listener-mapping>映射监听器。( 0)P353

    filter-mapping的配置:我们将uimfilter过滤器映射给所有的jsp文件【P342】

    3. 如果使指定的IP访问JSP时报错,并告知用户不能访问,可以使用监听器。( 1 )

    监听器的理解:监听器好比一个卫兵,卫兵一直站在那里等待长官的命令,当卫兵收到长官的命令以后,立即执行

        之前已经协定好的事件。

    三、填空

    1. 对Web应用来说,_______就是驻留在服务器端,在源数据和目的数据间,对Web请求和Web响应的头属性(Header)和内容体(Body)进行操作的一种特殊Web组件。过滤器&filter&Filter

    2. 过滤器对象使用_______对象调用过滤器链中的下一个过滤器或者是目标资源。

    FilterChain & filterchain & Filterchain & filterChainP339

    3. 在J2EE中,使用Servlet过滤器时,需要在web.xml通过_____元素将过滤器映射到Web资源。<filter-mapping>[P342]

    4. 在一个Filter中,处理filter业务的是____方法。 [P339-]

    doFilter (ServletRequest request,ServletResponse response, FilterChain chain)

    四、简答

    1. 什么是过滤器?什么是监听器?分别应用在哪些方面?

    2. Filter接口、FilterConfig接口和FilterChain接口的功能分别是什么?提供的方法有哪些?

    3. ServletContextListener接口、ServletContextAttributeListener接口和HttpSessionBindingListener接口的功能分别是什么?提供的方法有哪些?

    4. JSP乱码如何解决,列举几种解决方案?

    5. 如何编写、配置过滤器,举例说明?

    6. 如何编写、配置监听器,举例说明?

     

    五、编程

    1. 编写一个过滤器LogFilter.java,对Request请求进行过滤,记录请求的访问时间戳、从请求获取远程地址、从请求获取远程主机名、客户请求的资源URI、客户用的浏览器,并记录到日志文件中。

    2. 编写一个监听器ContextListener .java,监听Web应用的启动和停止,并记录到日志文件中。

     

    习题十四【对应三版本12章】

    一. 选择题

    1.  给定程序片段:

      <% String value = "beanvalue"; %>

      <% request.setAttribute ("com.example.bean", value); %>

      <%--插入代码处--%>

    在第3行插入哪个EL表达式,能够计算并输出"beanValue"。( )E

    A. ${bean}       B. ${value}      C. ${beanValue}

    D. ${com.example.bean}

    E. ${requestScope["com.example.bean"]}

    F. ${request.get("com.example.bean").toString()}

    2. 假定在web应用中,请求参数productID包含产品的标识符,下面哪两个EL表达式能够计算productID的值。(  )B

    A. ${product ID}

    B. ${param.productID}

    C. ${params.productID}

    D. ${params.productID[1]}

    3. 用户的会话对象中存在属性cart,以下哪两条语句能够将该属性从session中删除( )  DE

    A. ${cart = null}

    B. <c:remove var="cart" />

    C. <c:remove var="${cart}" />

    D. <c:remove var="cart" scope="session" />

    E. <c:remove scope="session">cart</c:remove>

    F. <c:remove var="${cart}" scope="session" />

    G. <c:remove scope="session">${cart}</c:remove>

    4. 在JSP页面中,开发人员需要构建如下的动态代码:

    if ( test1 ) {

      // action1

     } else if ( test2 ) {

      // action2

    } else {

      // action3

    }

    下面个JSTL的结构能够实现相同的功能?B

    A. <c:choose>

    <c:when test="test1" >action1</c:when>

    <c:when test="test2">action2</c:when>

    <c:when>action3</c:when>

    </c:choose>

    B. <c:choose>

    <c:when test="test1">action1</c:when>

    <c:when test="test2">action2</c:when>

    <c:otherwise>action3</:otherwise>

    </c:choose>

    C. <c:if test="test1">

    <c:then>action1</c:then>

    <c:else-if test=""test2">

    <c:then>action2</c:then>

    <c:else>action3</c:else>

    </c:else-if>

    </c:if>

    D. <c:if test="test1">

    <c:then>action1</c:then>

    <c:else>

    <c:if test="test2">

    <c:then>action2</c:then>

    <c:else>action3</c:else>

    </c:if>

    <c:else>

    <c:if>

    二. 判断[1:表示对;0:表示错;]

    1. JSTL代码片段<c:import url="foo.jsp"/>能够实现导入其他web资源的功能。(1 )

    2. <fmt:setLocale>是用于设置本地属性的JSTL标记。( 1)

    3. SQL标记库中的标记<sql:query>是用来修改数据库中的记录。(0  )

    三. 填空

    1. 假定在web应用中,请求参数productID包含产品的标识符,能够计算productID值的EL表达式____。

    2. JSTL的全称是____。

    3. JSTL提供的标签分为5大类,分别是_____、______、______、______和______。

    4. 在JSTL核心标签当中,网页数据的存取操作行为是由标签_______、_____与______等3个标签所设置的。

    5. 在与url有关的标签中,______用来设置一个超级链接。

    6. 流程控制标签用来控制程序运行的流程, __________搭配__________与__________,来进行多重判断。

    7. <c:forEach>标签通过属性值_____、_____与_____控制循环的间隔数及起始与结束值。

    8. <c:out>标签中使用____属性表示要输出的内容。

    9. <c:set>标签的作用是____。

    10. 标识EL语法元素的符号为______。

    11.  EL中的三元运算符为________。

    12. 与存活期范围有关的4个隐含对象分别是______、_______、_______以及_______。

    13. 隐含对象_______与_______,可直接用来存取表单传递的参数。

    14 系统初始化数据存放于WEB-INF文件夹的_____,隐含对象____可用来对其进行访问。

    1. ${param.productID}
    2. JSP Standard Tag Library  
    3. JSTL提供的标签分为5大类,分别是[核心标签]、[i18n国际化格式标签]、[SQL标签]、[XML标签]和[函数标签]。
    4. 在JSTL核心标签当中,网页数据的存取操作行为是由标签[out]、[set]与[remove]等3个标签所设置的
    5. 在与url有关的标签中,[<c:url>]用来设置一个超级链接。
    6. 流程控制标签用来控制程序运行的流程,[<c:choose>]搭配[<when>]与[<otherwise>],来进行多重判断。
    7. <c:forEach>标签通过属性值[begin]、[end]及[step]控制循环的间隔数及起始与结束值。
    8. value
    9. 将EL表达式的值存储在一个变量中 
    10. 标识EL语法元素的符号为[&{}]。
    11. EL中的三元运算符为[A?B:C]。
    12. 与存活期范围有关的4个隐含对象分别是[pageScope]、[requestScope]、[sessionScope]及[applicationScope]。
    13. 隐含对象[param]及[paramValues],可直接用来存取表单传递的参数。
    14. 系统初始化数据存放于WEB-INF文件夹的[web.xml]中,隐含对象[initParam]可用来对其进行存取。
    

    四. 简答

    1. 请简述JSTL与一般的JSP技术有何差异。

    2. JSTL标签的分类主要有哪几种,请简单说明。

    3. 使用JSTL有何优点?

    4. 在Tomcat中安装使用JSTL的步骤有哪些?

    5. <c:if>和<c:choose>这两种标签都可以用来进行流程判断,请说明它们的差异及用法。

    6. 说明如何使用JSTL所提供的<sql:setDataSource>标签设置联机信息。

    7. 在EL中访问变量的值可以使用如下的EL元素:${变量名},如果没有指定变量的有效范围,JSP容器会依次到哪几个范围内查找该变量?

    8. 说明如何运用隐含对象取得表单参数

    1. 
    请简述JSTL与一般的JSP技术有何差异。
       答:使用JSTL实现动态JSP页面的最大特点在于简单,避免了使用脚本片段带来的许多问题,Web应用开发人员利用JSTL可以取代直接嵌入页面的代码片段,提高程序可读性和可维护性。
    2. 
    JSTL标签的分类主要有哪几种,请简单说明。
    答:核心标签库、I18N 格式标签库、SQL 标签库、XML 标签库、函数标签库 
    
    4. 
    在Tomcat中安装使用JSTL的步骤有哪些?
    Sun的JSTL页面(http://java.sun.com/products/jsp/jstl)提供JSTL规范文档和相关实现的下载。Apache Jakarta项目是JSTL标准的一种实现,具体下载网址为:http://www.apache.org/dist/jakarta/taglibs/standard/。Windows系统下软件包的对应下载的文件名为:jakarta-taglibs-application-current.zip。
    Jakarta JSTL的实现是一些JAR文件,如果在Web应用中使用JSTL,就需要在Web应用的WEB-INF\lib目录下包含JSTL的JAR文件。将jstl.jar和standard.jar复制到Tomcat网站根目录下的文件夹WEB-INF\lib当中,并将tld目录复制到Tomcat的WEB-INF目录下,重新启动Tomcat之后,就可以开始使用JSTL了。
    
    5. 
    <c:if>和<c:choose>这两种标签都可以用来进行流程判断,请说明它们的差异及用法。
    答:<c:if>标签用于进行条件判断,只有当其test属性指定的Boolean表达式值为true时才会处理其本体的内容,否则不执行。
    <c:choose>标记用来处理多个可选条件下的选择。<c:choose>标记需要和<c:when>、<c:otherwise>标记配套使用,并且<c:when>和<c:otherwise >必须依附在<c:choose>标签下。
    6.
    1.	说明如何使用JSTL所提供的<sql:setDataSource>标签设置联机信息。
    答:
    使用<sql:setDataSource>标记来指定数据源,其语法为:
    <sql:setDataSource  
    { dataSource=“dataSource”  |  url=“jdbcUrl” 
    [driver=“driverClassName”] 
    [user=“userName”] 
    [password=“password”] }
    [var=“varName”] 
    [scope=“{page|request|session|application}”] />
    url属性用于指定连接的url。driver属性用于指定驱动程序。
    dataSource属性为数据源。
    
    7.
    答:pageScope]、[requestScope]、[sessionScope]及[applicationScope]。
    
    8.
    答:隐含对象param与paramValues被设计用来提供使用request之外的一个选择,这两个对象最大的好处便是简化了request参数数据的存取,其功能相对于request对象如下表所示:
    EL对象	Request对象
    ${param.paraName}	request.getParameter(paraName)
    ${paramValues.paraName }	request.getParameterValues(paraName)
    
    以下为取值的范例程序:
    ${param.yearValue }
    param内容包含当前网页所有的request参数,这段程序代码取得其中名为yearValue的参数值。
    

    五. 编程

    1. 使用JSTL标准标记库中的标记输出1~100的数字之和。

    提示:本程序所使用的JSTL核心标记库的uri为http://java.sun.com/jsp/jstl/core。

    2. 使用标准标签库中的<c:foreach>标签、<c:if>标签和<c:out>标签列出1~100中能被2整除不能被3整除的数字。

    图15-11 带body的标签

     

     

     

    展开全文
  • squid缓存:refresh_pattern指令

    千次阅读 2014-01-23 19:19:15
    refresh_pattern指令如下: ...其实这不是个问题, Squid 有这样一行配置 minimum_expiry_time 默认值是 60 。所以只需要修改这个值.就能实现 60 秒以内 Cache 了. 注意了,这个参数不要修改
  • 开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为汇编指示(Assembler Directive)或伪操作(Pseudo-operation),由于它不是真正的指令所以加个“伪”字。.section指示把代码...
  • ),即编译生成的指令中val就已经被替换成100了,其实加const只是告诉编译器不能修改而不是真正地不可修改,如果程序员不注意而去修改了它会报错,现在我们利用const_cast去除了常量性,然后通过指针和引用对其...
  • 冯诺依曼工作方式的基本特点是____

    万次阅读 2016-07-17 15:28:52
    冯诺依曼工作方式的基本特点是____ 正确答案: B 你的答案: B (正确) ...多指令流单数据流 ...按地址访问并顺序执行指令 ...(1)计算机处理的数据和指令一律用进制数表示 (2)顺序执行程序: 计算机
  • C语言内嵌汇编:__asm__ __volatile__

    千次阅读 2013-09-10 20:22:36
    内嵌汇编,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序C语言表达式与汇编指令操作数之间的对应关系即可, ...
  • TEXT_OFFSET 内核RAM的起始位置相对于RAM起始地址偏移。值为0x00008000 ./arch/arm/Makefile 118 textofs-y := 0x00008000 222 TEXT_OFFSET := $(textofs-y) PAGE_OFFSE 内核镜像起始虚拟地址。值为0xC...
  • 调用约定__cdecl、__stdcall和__fastcall的区别

    千次阅读 多人点赞 2018-08-26 21:12:08
    什么是调用约定 函数的调用约定,顾名思义就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的。它决定以下内容:(1)函数参数的压栈顺序,(2)由调用者还是被调用者把参数... Apple...
  • GCCC语言内嵌汇编 asm __volatile__

    千次阅读 2016-08-19 17:27:11
    内嵌汇编,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序C语言表达式与汇编指令操作数之间的对应关系即可, ...
  • __asm__是GCC关键字asm

    千次阅读 2015-05-10 20:33:41
    __asm__是GCC关键字asm的宏定义: #define __asm__ asm __asm__或asm用来声明一个内联汇编表达式,所以任何...Instruction List是汇编指令序列。它可以是空的,比如:__asm__ __volatile__(""); 或__asm__ ("
  • 个函数返回操作之前的值。 type __sync_lock_test_and_set(type *ptr, type value, ...) 将*ptr设为value并返回*ptr操作之前的值; void __sync_lock_release(type *ptr, ...) 将*ptr置为0 ...
  • 前面写了两篇关于杂耍把戏的手艺方面的文章: ...并不是很过瘾,因为当我将一个函数完整搬移到另一处的时候,我有意避开了采用相对地址寻址指令偏移校准 核心问题 ,还美其名曰为了简单。 失去...
  • io_uring技术的分析与思考

    千次阅读 2020-12-03 00:56:18
    io_uring是Linux 5.1引入的一套新的syscall接口,用于支持异步IO。近来这套机制颇受关注,很多人认为它代表了与内核...linux下,目前绝大部分程序的IO操作都是同步的,最后通过read/write系列的系统调用实现对
  • gcc的__builtin_函数介绍

    万次阅读 多人点赞 2015-04-08 23:02:19
    第一个参数addr是要预取的数据的地址,第个参数可设置为0或1(1表示我对地址addr要进行写操作,0表示要进行读操作),第三个参数可取0-3(0表示不用关心时间局部性,取完addr的值之后便不用留cache,而1、2、3...
  • 完成对硬件的初始化,包括看门狗,中断缓存等,并且负责把代码搬移到SDRAM(搬移的时候检查自身代码是否SDRAM),然后完成C程序运行所需要环境的建立,包括堆栈的初始化等,最后执行一句跳转指令:  ldr pc,...
  • copy_{to, from}_user()的思考

    万次阅读 多人点赞 2019-09-13 00:16:43
    缺页导致的异常会很透明地被内核予以修复(为缺页的地址空间提交新的物理页面),访问到缺页的指令会继续运行仿佛什么都没有发生一样。但这只是用户空间缺页异常的行为,内核空间这种缺页异常必须被显式地修复,这...
  • 平台为hi35XX,Liunx下借助wireless_tools和wpa_supplicant(因为现在的无线wifi网络大多是wpa加密。所以需要移植wpa_supplicant工具)等工具实现wifi的过程。 一、移植wireless_tools 1. 下载并编译wireless_...
  • 准备项目基于nginx搭建一个简易网关,实现同一域名根据不同cookie代理不同docker功能,降低前端、移动端多业务线并行测试联调成本。简单来说就是服务端有多个测试环境docker分别部署不同业务需求代码,通过...
  • 前面了解到了可以代码使用intrinsics函数来实现类似汇编的高级指令集(SSE等)指令这里,为了加深理解,再次分析一下SSE指令。 (2)MMX指令集 首先要提到MMX指令集,MMX指令集是SSE之前的,...
  • #pragma data_seg用法总结

    千次阅读 2017-03-30 22:23:50
    Windows一个Win32程序的地址空间周围筑了一道墙。通常,一个程序的地址空间的数据是私有的,对别的程序而言是不可见的。但是执行STRPROG的多个执行实体表示了STRLIB程序的所有执行实体之间共享数据是毫无问题...
  • 指令的作用是对付静态分析,以下面一段程序说明一下花指令的原理 #include #include void main() { _asm { jmp l2 _EMIT 0x1//这里就是花指令 _EMIT 0x2//这里就是花指令 _EMIT 0x3//这里就是花指令 _...
  • 一.方法一:常用方式,也是一google...假设我们没有vmlinux可供gdb反汇编,那也只有采用模拟的方式了,模拟出一个call *sys_call_table(,%eax,4),然后看其机器码,然后system_call的附近基于这个特征进行寻找
  • 支持云端升级的固件, flash 会分为 2 个区,一个用来运行程序,一个用来保存升级固件, 当运行 user1 时升级,程序会下载固件到 user2,下载完毕后,下次启动时从 user2 启动,依次替换,实现云端升级。...
  • cx_freeze的安装使用

    万次阅读 2018-07-20 16:49:47
    python程序几乎可以所有常见的平台进行使用,而且大部分无需修改任何代码!不过,python也有一点点小缺憾(这个是由于自身本质决定,不能叫缺憾,不过这就这么称呼吧),那就是python程序的执行必须要有解释器...
  • 初学性能测试时候,第一步必学脚本录制,但一路下来各种录制失败、回放脚本失败的问题层出不穷,究其...最近做项目的一个接口测试时候,因请求是合作第3方发起的且不容易让第3方提供他们的平台给我们做测试,所以这种

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 173,004
精华内容 69,201
关键字:

在二地址指令中_____是正确的