A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

1、jsp与servlet有什么不同?
        jsp主要是用于进行页面数据的输出,而servlet主要是用于处理用户的请求;

2、为什么用javaEE写出来的网站在第一次运行的时候会比较慢?
        因为它第一次运行的时候要先翻译成java文件,再编译成class。

3、JSP的语法包含哪些?
        <1>  JSP脚本                <%  %>        主要用于写java代码,如:<% java代码 %>                -->>翻译在方法里
        <3>  JSP输出表达式        <%= %>        主要用于输出数据,但是不能有;号
        <4>  JSP注释            <%--  --%>
        <5>  JSP指令                        主要是通知Tomcat服务器做一个基本的设置和逻辑处理
                <%@page %>                主要用于设置页面信息                最好写在页面的第一行
                <%@include %>                主要用于包含页面               【静态包含】
                <%@taglib %>                主要用于引入第三方的标签库

                <%@ page language="java"        指定页面的JSP脚本中需要使用的脚本语言 java
        import="java.util.*"                                导包语句【重点】
                pageEncoding="utf-8"                指定页面的编码方式 response.setCharacterEncoding()
                autoFlush="true"                        指定自动刷新缓冲区                           
                buffer="8kb"                                指定缓冲区的大小
                contentType="text/html; charset=utf-8"                指定页面解码方式
        errorPage=""                                        指定页面的错误页面【重点】
                extends=""                                指定翻译好的类继承的父类
                info=""                                        指定页面的基本信息【不实用】
                isELIgnored="false"                指定页面中是否忽略EL表达式
        isErrorPage="false"                                指定当前页面是否是处理错误的页面【重点】
                isThreadSafe="true"                指定页面是否线程安全
                session="true"                        指定页面需要服务器创建session对象
                %>


        <6>  JSP动作                        主要用于处理JSP页面简单业务的标签
                <jsp:include page=""></jsp:include>        包含动作【动态包含】
                        动态包含将包含页面和被包含页面分别进行翻译和编译。

                <jsp:forward page=""></jsp:forward>        转发
                        相当于:request.getRequestDispatcher(path).forward(request,response)
                <jsp:params/>
        <7>  JSP的九大隐含对象是什么?
                request,response,pageContext,session,out,exception,application,config,page
                且JSP中的九大隐含对象都是单例的
                        1、请说出JavaEE中使用单例的几个场景?
                                Servlet
                                JSP隐含对象
                            2、请说出项目开发中使用单例的几个场景?
                                工厂模式  ————》》  单例模式
                                配置文件  ————》》  操作配置文件的类是单例模式

4、修改JSP模板的编码:
        window        ---->>        preferences  ---->>  搜索JSP  ---->>  Encoding:utf-8.

5、在JSP中的包含指令<%@include %>的JSP页面在翻译的时候形成几个文件?
        1个

6、静态包含与动态包含的区别?
        1、实现方式不同
                静态包含:<%@include file="" %>
                动态包含:<jsp:include page="">
        2、执行原理不同:
                静态包含:<%@include file="" %>  翻译为同一个文件进行执行
                动态包含:<jsp include page="">  翻译为两个文件;先执行包含页面,再执行被包含页面
        推荐使用动态包含【动态包含类似于懒汉式单例模式,懒加载】

7、println和<br/>的区别?
        println :是源代码的换行
        <br/>        :是页面的换行

8、思考:print()和write()的区别

    <%
       int age = 97;
       String str = null;
    %>
    <hr/>
    <%
       out.write(age);     // a
       out.write(str);
    %>
    <hr/>
    <%
       out.print(age);     // 97 null
       out.print(str);
    %>
需要原样输出数据用print,或者write(age+" ")
           思考:在项目如果用户登录成功,需要显示登录的用户名?
                   out.write(session.getAttribute("name"))                这里要用writer

9、在JSP中输出数据尽量使用out隐含对象,不要使用response流
        但是,out是个字符流,不能读取图片,此时只能用response流
       
10、JSP中哪个隐含对象可以获取网站的某个资源的路径?
application
因为
application对象是servletContext类型的。(servletContext代表整个网站对象)
PageContext                代表当前JSP页面的对象
JSPContext                代表整个JSP页面
ServletContext        代表整个网站

11、在JSP中编写一段代码获取路径为"/imgs/中国.jpg"的图片?
        ServletOutputStream sout = response.getOutputStream();
        String path = application.getRealPath("/imgs/中国.jpg");
        System.out.println(path);
        String fileName = path.substring(path.lastIndexOf("\\")+1);
        System.out.println(fileName);
        response.setHeader("content-disposition","attachment:filename="+URLEncoder.encoder(fileName,"utf-8"));
        FileInputStream in = new FileInputStream(path);
        byte [] b = new byte[1024];
        int len = 0;
        while((len = in.read(b)) != -1){
           sout.write(b,0,len);
        }
        in.close();
        sout.close();
常见问题:
        1. 路径问题
                String path = application.getRealPath("/imgs/中国.jpg");
                String fileName = path.substring(path.lastIndexOf("\\")+1);
                多读数据  总长度   -1
        2. 响应头问题
                响应头错误依旧可以下载
                response.setHeader("content-type","jack/lucy");
                【下载的是整个页面】
                response.setHeader("content-disposition","attachment:filename="+fileName);
                如果写错  会将图片直接显示
        3. 下载资源的中文文件名问题?
                response.setHeader("content-disposition","attachment:filename="+URLEncoder.encode(fileName,"utf-8"));
        4. 路径问题?
                如果路径中有中文【不是文件】,那么输出路径中如果有中文就被编码为%ae%34%34
                System.out.println(path);
                path = URLDecoder.decode(path,"utf-8");

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马