Servlet知识点整理(2)
1.什么是Httpservlet?
答:servlet接口定义了一个servlet的全部生命周期方法,但在实际开发过程中,我们只关注service()方法;而若要实现servlet接口,其他的几个方法需要我们重写一下,这很麻烦,因此sun公司的api文档中,提供了一个已经实现好的servlet子类GenericServlet,但他是一个普适的实现类,而在web开发中,经常要和HTTP打交道,因此,在GenericServlet的基础上
实现了一个httpServlet类。
Httpservlet是能够处理HTTP请求的Servlet,他在原有的Servlet接口上添加了一些与HTTP协议相关的处理方法,比原生接口功能更为强大,因此,在开发中,我们通常都继承这个类。HTTPServlet在实现接口的时候,重写了service()方法,该方法体内的代码,会自动判断用户的请求方式;如果为GET请求,则调用Httpservlet的doGet方法,如果为POST请求,则调用HTTPServlet的doPost方法。
2.路径相关
答:内部路径:直接写资源
相对路径:./…/
绝对路径:带主机和协议的路径(访问站外资源);
不带主机和协议的路径(最常用)/项目名/资源路径
3.映射地址通配符
答:Servlet映射到URL中也可以使用通配符,但是只能有两种固定的格式:1..扩展名。只要满足这个后缀名,就会访问到这里;2.以正斜杠(/)开头并用/结尾的;
Servlet映射到 URL中也可以使用 * 通配符,但是只能有两种固定的格式:
1、.扩展名 只要满足这个后缀名,就会访问到这里 ;
2、以正斜杠(/)开头并用 /* 结尾的 ;/aa/* ,只要是aa/,无论后面写什么,都会访问到这里;
4.Servlet映射冲突问题。
答:原则:其中谁长得最像的,就匹配谁;并且通配符在前面,优先级最低。
5.request和response的相关概念。
答:request:请求(即浏览器访问服务器);response:响应(即服务器反馈浏览器)。
request:域对象(一次请求)
getParameter():获取单个数据(input框)
getParameterValues():获取多个数据(checkedbox)
getParameterMap():获取所有参数。(key:name值;value:name对应的value值)
获取请求头信息:request.getHeader(“”“”)
获取请求方式:request.getMethod();
获取项目路径:getContextPath();
6.响应头
答:setHeader(); 设置响应头
addHeader();添加响应头,如果有就覆盖 ,没有就添加
响应头:
location:配合状态码,实现重定向
refresh:刷新
cookie:小饼干
Content-Disposition:下载相关
7.状态码:
响应码(状态码):200成功
404:访问的资源不存在
500:服务器代码有问题
304:读缓存
302:重定向
8.response常用方法:
//设置编码
response.setContentType(“text/html;charset=utf-8”);
//回写数据
response.getWriter().Print(“我已收到请求!!!”);
getOutputStream():获取字节流。注意:两个流是互斥的,不能同时存在
自己写的:字符流
其他所有:字节流
9.请求转发和重定向的区别:
答:1.重定向2次请求,请求转发1次请求;
2.重定向地址栏变化,请求转发地址栏不变;
3.重定向转发通过浏览器,请求转发通过服务器内部;
4.重定向可以访问站外资源(除开当前服务器之外),请求转发不能访问站外资源;
//请求转发:
request.getRequestDisneypatcher("/hello.html").forward(request,response);
地址栏不变,页面发生了跳转;如果发生了请求转发,还是一次请求。
10.重定向的两种方式:
答:方式一:sendRedirect();
方式二:response.setStatus(302);
response.setHeader(“location”,“/myServlet”)
//定时刷新 response.setHeader(“refresh”,“3;url=http://www.baidu,con”);