您的位置:首页 > 职场人生

基于Servlet面试题进行JavaWeb入门学习

2017-07-12 16:00 393 查看
常见面试题
1、说一说Servlet生命周期

2、Post和Get在servlet处理中有何区别

3、转发与重定向的区别

4、 编写Servlet需要继承的类是什么?

5、编写Servlet通常需要实现的两个方法是什么?

6、要获取用户信息,如何获取

7、如何配置servlet



Servlet基础

Servlet基础



Servlet是运行在服务器上的Java小程序,B/S架构的应用需要访问数据库、或一些逻辑处理,均由servlet进行处理,他用来扩充基于http协议的web服务器。

Servlet生命周期包括三部分:

初始化:Web容器加载servlet,调用init()方法

处理请求:当请求到达时,运行其service()方法。service()自动派遣运行与请求相对应的doXXX(doGet或者doPost)方法。

销毁:服务结束,web容器会调用servlet的distroy()方法销毁servlet。

HTTP协议



HTTP协议属于应用层协议,那么基于TCP通信,分为非持续和持续型。

客户端(一般是浏览器)发起80端口(一般)http请求,位于指定ip的并且监听该端口的服务器进行响应。

http方式指的则是GET、POST等动词,代表了对于url(统一资源定位符)和uri(统一资源标识符)的相关操作,http那么我们最熟悉的就是通
4000
过浏览器的地址栏,发送http请求,而地址栏填入的信息,例如www.baidu.com,就是发送向百度的ip地址所在的服务器请求页面,而地址栏的操作对应的http方式则是GET,目的是获取页面。而对于一个页面的请求http://localhost:8080/index?username=javatree,他能收到什么样的请求呢?



这是运行在我的电脑上的服务器所接受到的请求消息,那么第一行GET则是标志着对于url的操作,紧跟着的就是所获取资源的地址:/index,是从我们的localhost:8080后面开始的,localhost是本机地址,8080为服务器端口,后面跟着资源名,再后面则是对应的协议标准,使用HTTP/1.1协议。

Servlet基本流程

最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API。Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:

1. 客户端发送请求至服务器端;

2. 服务器将请求信息发送至(对应的)Servlet;

3. Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;

4. 服务器将响应返回给客户端。
拿上面的图来举例子,服务器收到请求,解析出请求地址为/index,找到对应处理/index请求的servlet,然后找到对应处理GET请求的doGet函数,传入的参数存放在HttpServletRequest请求中,即我们的username,那么处理函数处理结束后,交给浏览器一个资源(页面,图片,xml数据),通过response交互,然后浏览器拿到服务器给的资源后显示在浏览器中,完成整个响应.

Servlet常用对象

Request:封装用户提交信息,每次请求都会产生一个新的request,生命周期:一次请求,常用函数:

1. setAttribute()在Request域中存储数据

 2. setCharacterEncoding()设置请求参数的编码方式,只对post请求有效

 3. getMethod()获取请求类型

 4. getParameter()获取指定请求参数值

 5. getParameterNames()获取所有请求参数,返回一个Enumeration枚举类

 6. getAttribute()获取域中存储的数据

 7. getAttributeNames()获取域中所有数据,返回一个Enumeration枚举类

 8. getContextPath()返回当前WEB项目相对路径

 9. getCookies()获取所有Cookie,返回一个Cookie数组

 10. getRequestDispatcher()获取转发器,参数路径以/打头,代表WebRoot(当前WEB项目根目录)

 11. getSession()获取Session对象

Response:对客户的请求做出动态的响应,向客户端发送数据。生命周期:一次请求,常用函数:

1. setContentType()告知浏览器数据类型

 2. setCharacterEncoding设置Response的编码方式

 3. setHeader()设置消息头

 4. setStatus()设置状态吗

 5. addCookie()添加Cookie

 6. sendRedirect()重定向

 7. getOutputStream()获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)

 8. getWriter()获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)

Session:一次会话,jsp内置对象,在jsp页面被装载后创建。生命期:从打开浏览器连接服务器开始,会为该次会话创建session,直到关闭浏览器结束。用途多在需要保存用户信息以供调用或一些需要较久保存的数据

ServletContext  :应用程序开启到结束,共享。

创建一个servlet

创建servlet需要导入对应的java servlet-api包,并将想要成为servlet处理的类继承HttpServlet即可

添加路径映射

Servlet添加url到servlet有两种方法

第一种:使用注解



上例则是使用注解方式,在继承了httpservlet的类使用webservlet注解进行映射,所有请求/validateCodeCheck的请求都会在这个类进行执行,那么httpservlet较多被重写的函数有:doPost,doGet,doHead(用的较少)。

第二种:添加mapper

在web.xml下



Servlet-name是给下面的servlet-class起的名称,servlet-class则是处理的完整包路径+类名



添加映射,url-pattern则是想要映射到的地址,而servlet-name则是处理该请求的servlet名称,在上面的servlet定义的

可以看到在httpservlet基类中定义了响应的method,只需要重写想要响应的请求对应的函数即可,比如在此例中我们重写doGet

doGet(HttpServletRequest req,HttpServletResponse resp){

        String user = req.getParameter(”username”);

        System.out.println(user);

}

我们就能看到输出了在浏览器中输入的javatree,那么如何返回页面呢?

第一种:重定位(sendRedirect)

将页面重新定位至指定文件,这属于response的方法,通知服务器访问指定资源,但是当前请求结束,因此会发送新的request、response向转发资源,之前做的将不会继承到新资源的请求中去

第二种:请求转发(getRequestDispatch)

属于request方法,能够使用forward传递request和response,能够保留当前操作

示例:

注意调用的对象

request.setAttribute("username","javaTree");

response.sendRedirect("home.jsp");//重定向

request.getRequestDispacther("home.jsp").forword(request,response); //请求转发

1、当用request.getRequestDispacther("/index.jsp").forword(request,response); 请求转发后,结果页面输出:javaTree

2、当用response.sendRedirect("/index.jsp");重定向后,结果页面输出:null

请求不同资源

Jsp文件:

请求:<form action="/validateCodeCheck" method="POST">



页面请求登录,重定向至index.jsp,浏览器收到服务器解析好的页面文件

图片:

请求:<img alt="验证码" id="scode" src="<%=request.getContextPath() %>/getCode" >



通过图片io操作向response的输出流中写入图片,完成图片的响应

本次使用例子: http://git.oschina.net/Efin/Servlet
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: