Servlet_Jsp期末复习试题()

选择题

  1. tomcat Webapps目录的配置目录有什么作用?

    webapps目录用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包的形式发布应用。

  2. 访问tomcat的url格式是什么?

    格式:http://ip:port

    本机:http://localhost:8080

  3. tomcat组件中context的path属性作用是什么?

    path:浏览器访问项目的访问路径。

  4. servlet的技术特点:

    Servlet使用单进程多线程方式运行。

  5. servlet的生命周期:

    Servlet的生命周期是由容器管理的,分别经历三各阶段:

    • init():初始化

    当客户端浏览器第一次请求Servlet时,容器会实例化这个Servlet,然后调用一次init方法,并在新的线 程中执行service方法处理请求。

    • service():服务

    service方法执行完毕后容器不会销毁这个Servlet而是做缓存处理,当 客户端浏览器再次请求这个Servlet时,容器会从缓存中直接找到这个Servlet对象,并再一次在新的线程 中执行Service方法。

    • destroy():销毁

      当容器在销毁Servlet之前对Servlet调用一次destroy方法。

  6. servletcontext的作用?

    当容器启动时会创建ServletContext对象并一直缓存该对象,直到容器关闭后该对象生命周期结束。 ServletContext对象的生命周期 非常长,所以在使用全局容器时不建议存放业务数据。

  7. cookie对象与session的作用?

    Cookie对象与HttpSession对象的作用是维护客户端浏览器与服务端的会话状态的两个对象。

  8. cookie对于跨域的支持的策略是什么?

    域名分类:域名分为顶级域、顶级域名(一级域名)、二级域名。域名等级的区别:一级域名比二级域名更高级,二级域名是依附于一级域名之下的附属分区域名,即二 级域名是一级域名的细化分级。例如:baidu.com 为一级域名,news.baidu.com为二级域名。 Cookie不支持一级域名的跨域,支持二级域名的跨域。

  9. filter过滤器

    Filter过滤器是Servlet2.3中所提供的一个过滤请求与响应的对象。 Filter过滤器既可以对客户端向服务器端发送的请求进行过滤,也可以对服务器端向客户端产生的响应进行过滤处理。

  10. filter的执行顺序?

    则按照在web.xml文件中配置的上下顺序来决定先后。在上的先执行,在下的后执行。

  11. 哪些对象有监听器,哪些没有?

    按监听的对象划分,可以分为:

    • ServletContext对象生命周期监听器与属性操作监听器;

    • HttpSession对象生命周期监听器与属性操作监听器;

    • ServletRequest对象生命周期监听器与属性操作监听器;

  12. jsp是哪两种对象的复合体?

    JSP就是HTML与Java代码的复合体。

  13. 与jsp本质相同的技术是?

    JSP和Servlet是本质相同的技术。

  14. http协议是指?

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的 缩写, HTTP是万维网(WWW:World Wide Web)的数据通信的基础。 HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的 消息以及得到什么样的响应。

  15. http协议的特点?

    • 支持客户端/服务端模式: HTTP协议支持客户端服务端模式,需要使用浏览器作为客户端来访问服务端。

    • 简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST等。每种方法规定 了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度 很快

    • 灵活: HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来 表示内容类型的标识)加以标记。

    • 无连接: 每次请求一次,释放一次连接。所以无连接表示每次连接只能处理 一个请求。优点就是节省传输时间, 实现简单。我们有时称这种无连接为短连接。对应的就有了长链接,长连接专门解决效率问题。 当建立好了一个连接之后,可以多次请求。但是缺点就是容易造成占用资源不释放的问题。当HTTP协议 头部中字段Connection:keep-alive表示支持长链接

    • 单向性: 服务端永远是被动的等待客户端的请求。

    • 无状态: HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需 要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要 先前信息时它的应答就较快。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就 应运而生了,一个是Cookie,而另一个则是Session。

简答题

  1. 简述servlet的作用?
  • 获取用户提交的数据
  • 获取浏览器附加的信息
  • 处理数据(访问数据库或调用接口)
  • 给浏览器产生一个响应 在响应中添加附加信息

2.简述转发和重定向的区别?

  • 请求转发对于客户端浏览器而言是在一次请求与响应中完成,而重定向是在两次请求两次响应中完成。
  • 请求转发并不会改变客户端浏览器的地址栏中的内容。而重定向会改变客户端浏览器地址栏中的内容。
  • 请求转发可以使用request对象传递数据,而重定向不能使用request对象传递数据。 如果是处理的DML操作,建议使用重定向方式为客户端浏览器产生响应,可以解决表单重复提交现象。

​ 3.请简述什么是会话和cookie和session的区别?

  • 会话 是指一个客户端与web服务器之间连续发生的一系列请求和响应的过程。

​ HttpSession与Cookie的区别:

  • cookie数据存放在客户的浏览器或系统的文件中,而HttpSession中的数据存放在服务器中。
  • cookie不安全,而HttpSession是安全的。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个域名保存cookie的数量。而 HttpSession没有容量以及数量的限制。

​ 4.简述用户访问local host 8888\test\helloword的运行过程?

  • 用户访问http://localhost:8888/test/helloworld,请求被发送到Tomcat,被监听8888端口并处理 HTTP/1.1 协议的Connector获得。

​ Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。

  • Engine获得请求localhost:8888/test/helloworld,匹配所有的虚拟主机Host。

  • Engine匹配到名为localhost的Host虚拟主机来处理/test/helloworld请求(即使匹配不到 会请求交给默认Host处理)。

  • 如果配置有Context的话,交给匹配到的Context获得请求/helloword。

  • 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用HelloWorld的doGet ()或doPost()执行业务逻辑、数据存储等程序。

  • Context把执行完之后的结果通过HttpServletResponse对象返回给Host。 http://localhost:8888/test/helloworld Host把HttpServletResponse返回给Engine。 Engine把HttpServletResponse对象返回Connector。 Connector把HttpServletResponse对象返回给客户Browser。

应用题

1. 第一次访问响应为,您好,第一次访问。第二次显示为,欢迎回来!

  • cookie:
import java.servlet.*;
import jva.servlet.http.*;
import java.io.*;

public class WelcomeServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        Cookie []cookies = req.getCookies();
        boolean flag = false;
        if(cookies != null){
            for(Cookie cookie : cookies){
                if("hyg".equals(cookie.getNmae())){
                    flag = true;
                    break;
                }
            }
        }
        
        resp.setContentType("text/plain;charset=utf-8"):
        if(flag)
            resp.getWriter().println("欢迎您回来!");
        else{
            resp.getWriter().println("欢迎您第一次访问!");
            Cookie cookie = new Cookie("hyg","123");
            cookie.setMaxAge(10);
            resp.addCookie(cookie);
        }
        
        
        
    }
}
  • session:
import java.servlet,http.*;
import java.servlet*;
import java.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/welcomeServlet")
public class WelcomeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        resp.setContentType("text/html;charset=utf-8");
        HttpSession session = req.getSession(false);
        if(session == null){
        	resp.getWriter().println("欢迎您第一次访问!");
            req.getSession(); .
        } else
            resp.getWriter().println("欢迎您回来!");
        
    } 
}

2. 文件上传或文件下载

  • 文件上传:
import java.servlet.http.*;
import java.servlet.*;
import java.servlet.annotation.*;
import java.io.*;
import java.util.*;

@WebServlet("/fileUpload")
@MultipartConfig
public class FileUpload extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        //获取文件描述
        String desc = req.getParameter("desc");
        //获取上传文件
        Part part = req.getPart("file");
        //处理文件名
        String prefix = UUID.randomUUID().toString();
        String suffix = part.getSubmittedFileName().substring(part.getSubmittedFileName().lastIndexOf("."));
        String newName = prefix + suffix;
        //路径转换
        String realPath = getServletContext().getRealPath("suibian/" + newName);
        //文件保存
        part.write(realPath);

        resp.setContentType("text/plain;charset=utf-8");
        resp.getWriter().println(desc);
    }
}
  • 文件下载:
import java.servlet.http.*;
import java.servlet.*;
import java.servlet.annotation.*;
import java.io.*;

@WebServlet("/fileDownload")
public class FileDownload extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //读取下载文件
        ServletContext servletContext = this.getServletContext();
        String value = (String) servletContext.getAttribute("path");
        File file = new File(getServletContext().getRealPath(value + "/测试.jpg"));
        FileInputStream inputStream = new FileInputStream(file);

        //在响应中添加附加信息
        resp.addHeader("Content-Disposition", "attachment;filename=" + new
                String(file.getName().getBytes("gbk"), "iso-8859-1"));

        //产生响应
        ServletOutputStream outputStream = resp.getOutputStream();
        byte[] data = new byte[1024];
        int len;
        while ((len = inputStream.read(data)) != -1)
        {
            outputStream.write(data,0,len);
        }

        inputStream.close();
        outputStream.close();

    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值