JavaWeb 测试题

JavaWeb 测试题

1.自定义 servlet 的三种方式,及区别?

Servlet关系视图:

在这里插入图片描述

1)、原生Servlet接口,实现所有的抽象方法。该方式支持最大程度的自定义。

public class ServletDemo01 implements Servlet {
 @Override
 public void init(ServletConfig servletConfig) throws ServletException {
 //初始化方法
 }
 @Override
 public ServletConfig getServletConfig() {
 return null;
 }
 @Override
 public void service(ServletRequest servletRequest, ServletResponse
 servletResponse) throws ServletException, IOException {
 //处理get/post请求的方法
 }
 @Override
 public String getServletInfo() {
 return null;
 }
 @Override
 public void destroy() {
 //销毁的方法
 }
}

1)、继承 GenericServlet 抽象类,必须重写 service 方法,其他方法可选择重写。该方式让我们开发 Servlet 变得简单。但是这种方式和 HTTP 协议无关。

(1)创建一个类继承 GenericServlet,重写 service 方法。
 public class ServletDemo02 extends GenericServlet{
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service方法执行了...");
    }
}
(2)在web.xml文档中配置映射关系。
 XML配置:
 <servlet>
 <servlet-name>servletDemo02</servlet-name>
 <servlet-class>com.lichee.servlet.ServletDemo02</servlet-class>
 </servlet>
 <!-- mapping 表示映射 -->
 <servlet-mapping>
 <servlet-name>servletDemo02</servlet-name>
 <url-pattern>/servletDemo02</url-pattern>
 </servlet-mapping>

标签的执行顺序
(1)请求过来进入 web.xml 的servlet-mapping标签中,对url-pattern标签中的内容和请求名进行匹配;
(2)匹配成功后找对应的servlet-mapping标签中的servlet-name;
(3)在servlet标签中找和servlet-mapping标签的servlet-name相同的name值;
(4)上一步找到后,可得servlet标签中的servlet-class中处理类的完整路径。

(3)启动tomcat,访问http://localhost:8080/工程名/访问服务器的路径。

3)、继承 HttpServlet 抽象类,需要重写 doGet 和 doPost 方法。该方式表示请求和响应都需要和 HTTP 协议相关。

public class ServletDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("方法执行了...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //post请求方式一般与get请求方式处理的逻辑一样,所以直接调用doGet
        doGet(req,resp);
    }
}
 XML配置:
 <servlet>
    <servlet-name>servletDemo03</servlet-name>
    <servlet-class>com.lichee.servlet.ServletDemo03</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletDemo03</servlet-name>
    <url-pattern>/servletDemo03</url-pattern>
</servlet-mapping>

Servlet的生命周期
对象的生命周期,就是对象从出生到死亡的过程。即:出生 -> 活着 -> 死亡。官方说法是对象创建到销毁的过程;
出生:请求第一次到达 Servlet 时,对象就创建出来,并且初始化成功。只出生(创建)一次,将对象放到内存中;
活着:服务器提供服务的整个过程中,该对象一直存在,每次都是执行 service 方法;
死亡:当服务停止时,或者服务器宕机时,对象死亡;
结论:Servlet 对象只会创建一次,销毁一次。所以 Servlet 对象只有一个实例。如果一个对象实例在应用中是唯一的存在,那么我们就称它为单例模式。

2.写出 Servlet 中的三大作用域,并分别说明各自的特点?

request:特点:request作用域为一次请求,它的变量有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

session:特点:如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。

application:特点:如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用关闭结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。

总结:

request是一次请求
session是一个会话
application是多次会话(Tomcat开启到关闭)

3.filter 和 servlet 在生命周期上的区别

filter是在系统启动的时候通过init()初始化的,每次请求都只会调用dofliter方法进行处理,服务器停止的时候调用destroy()进行销毁!

servlet是在系统启动或者请求到达servlet时,通过init()方法进行初始化,一旦被装入了web服务器,一般不会从服务器删除,直到服务器关闭才会调用destroy()方法进行销毁。每次请求,Request都会被初始化,响应请求后,请求被销毁。但是servlet不会随着请求而销毁;如果某个Servlet配置了<load-on-startup>1</load-on-startup>,该Servlet也是在Tomcat(Servlet容器)启动时初始化。

注意】服务器关闭时,servlet和filter会被依次销毁!

4.表单提交的 2 种方式?及区别?

form表单中method有两种提交方法,getpost分别对应HttpServlet中的doGet()和doPost()方法,这两种提交方式其实有很大的区别:

1、form表单默认提交方式为get方式,get方式发送数据. 数据回传方式不同:get是从服务器上获取数据,post是向服务器发送数据。
2、用户看到过程不同:get是把参数数据队列加到提交表单的action属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到;post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3、服务器端回传方式不同:对于get方式,服务器端用Request.QueryString获取变量的值;对于post方式,服务器端用Request.Form获取提交的数据。、
4、传送大小不同:get传送的数据量较小,不能大于2KB;post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5、安全性不同:get安全性非常低,post安全性较高。

5.jsp 有哪些内置对象? 作用分别是什么?

共九大内置对象:

1、HttpServletRequet类的Request对象:代表请求对象,主要用于接受客户端通过HTTP协议连接传输服务器端的数据;

2、HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据;

3、JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter;

4、HttpSession类的session对象:主要用来分别保存每个月的信息与请求关联的会话;会话状态的维持是web应用开发者必须面对的问题;

5、ServletContext类的application对象:主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application,故其保存的信息被所有用户所共享;

6、PageContext类的PageContext对象:管理网页属性,为jsp页面包装页面的上下文,管理对属于jsp的特殊可见部分中已经命名对象的访问,它的创建和初始化都是由容器来完成的;

7、ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置;

8、 Object类的Page对象,处理jsp页面,是object类的一个实例,指的是jsp实现类的实例;

9、 Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true;

6.谈谈你对 MVC 的理解

MVC:M(模型)-V(视图)-C(控制器)
MVC标准架构

在Web MVC模式下,模型方法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模型)。
M(Model) 模型 : 应用程序的核心功能,管理这个模块中⽤的数据和(bean,dao);
V(View ) 视图: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观;
C(Controller) 控制器: 对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。(servlet/service)
MVC用于将web(UI)层进⾏职责解耦

7.表单的 action 属性,method 属性,name 属性值有什么作用?

name:表单的名称;
method:定义表单结果从浏览器传送到服务器的方法,一般有两种方法get和post;
action:用来定义表单处理程序(一个ASP,CGI等程序)的位置( 相对地址或绝对地址);
enctype:设置表单资料的编码方式;
target:设置返回信息的显示方式。

8.同步与异步的区别

同步是客户端发送请求给服务端,等待服务端响应的请求时,客户端不做其他的事情。
异步是客户端发送请求给服务端,等待服务端响应时,客户端可以做其他的事情。

9.JSP 请求是如何被处理的

客户端通过浏览器发送jsp请求,服务器接收到请求后,判断是否是第一次请求该页面,或者该页面是否改变,若是,服务器将jsp页面翻译为servlet,jvm将servlet编译为.class文件,字节码文件加载到服务器内存上执行,服务器将处理结果以.html页面的形式返回给客户端,若该页面不是第一次请求,则省略翻译和编译的步骤,直接执行。

10.说说你对 Cookie 与 Session 技术的理解

Cookie数据保存在客户端,Session数据保存在服务器端。

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID, 用该SessionID为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。

Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者一个Cookie的文本文件中;而Session则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。但是我们一般认为Cookie是不可靠的,Cookies是保存在本机上的,但是其信息的完全可见性且易于本地编辑性,往往可以引起很多的安全问题,Session是可靠地。但是目前很多著名的站点也都用Cookie。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值