黑马程序员技术交流社区

标题: 【成都校区】Servlet总结 [打印本页]

作者: 大大大大泡泡糖    时间: 2018-12-27 14:13
标题: 【成都校区】Servlet总结
# Servlet

# 生命周期

默认第一次访问的时候创建Servlet对象,执行init方法,每次请求过来之后执行Service方法,在service方法内部根据请求方式的不同调用不同的doXXX方法,Get请求调用doGet方法,Post请求调用doPost方法,当服务器关闭或者项目被移除了就销毁Servlet对象,执行destroy方法,初始化和销毁方法都只执行一次;Servet是单例,也就是说在Servlet整个生命周期中,Servlet对象有且仅有一个

# HTTP协议

超文本传输协议,基于请求和响应模型,请求先有,后有响应,一次请求只会有一次响应

# 请求行

get请求的请求参数在请求行的请求路径后面

# 请求头

key:value结构的,一般一个key对应一个value,也有一个key对应多个value的情况

user-agent:浏览器的版本信息

referer:当前这次请求从哪里发过来------防止盗取链接,做统计工作

# 请求体

get请求方式没有请求体



##### GET和POST的区别(面试点)

1,get方式提交的数据显示在地址栏中,准确的说是在请求行中的请求路径后面,没有请求体,而post方式提交的数据不会显示在地址栏中,提交的数据在请求体中

2,get方式url的长度有限制,而post没有限制

3,post方式提交数据相对安全

# 响应

# 响应行

常见的状态码:

​        404:资源路径找不到:一般查看:action=""   @WebServlet("")  转发的路径,重定向的路径等等

​        302:集合Location的响应头做重定向使用

​        304:查找本地缓存

​        500:代码有误
# 响应头

key:value结构的,一般一个key对应一个value,也有一个key对应多个value的情况

常见的响应头:

​        Content-Type:响应体的数据格式及编码格式

​        Content-disposition:文件下载时使用
# 响应体

网页代码/网页能够看到的内容

## Request
# 获得客户端相关的信息

获得请求方式:

​        String method = request.getMethod()

获取虚拟路径(项目名):

​        String contextPath = request.getContextPath();

获得URI/URL:

​        String uri = request.getRequestURI();

​        StringBuffer sb = request.getRequestURL();

获得远程ip地址:

​        String ip = reqeust.gerRemoteAddr();

# 获取请求提交的参数

获得单个值:

​        String value = reqeust.getParameter(String name);

获得一组值(复选框):

String[] values = request.getParameterValues(String name);

获得所有的值封装到map集合中:

​        Map<String,String[]> map = request.getParameterMap();
# 提交参数乱码问题的解决

get:tomcat8及以上已自主解决

post:

​        request.setCharacterEncoding("UTF-8"):

​        注意:这句话一定要写在获取参数之前
# 作为域对象存取数据

作用的范围: 一次请求响应的范围

什么时候创建:服务器收到客户端请求时创建request对象

什么时候销毁:服务器对当前这次请求做出响应后销毁

存取数据的方法:

java
request.setAttribute(String key,Object value);

Object value = request.getAttribute(String key);

request.removeAttribute(String key)


# 转发和重定向

写法:

java
request.getRequestDispatcher("转发路径").forward(request,response);


java
response.sendRedirect("重定向的路径");//路径一般需要带虚拟路径,而虚拟路径需要动态获取request.getContextPath()


区别:

1,转发浏览器地址栏不变,重定向会发生变化

2,转发只能在当前项目内部跳转,重定向可以跳转任意范围

3,转发是一次请求一次响应,重定向是两次请求两次响应

4,路径编写:转发不需要带虚拟路径,重定向需要写虚拟路径

# ServletContext

servet的上下文,servlet和tomcat服务器环境数据交换的桥梁,代表了整个web应用
# 如何获得

java
request.getServletContext();//要能拿到request对象
this.getServletContext();// 要在继承了HttpServlet的类中才能使用

# 作为域对象存取数据

1,作用范围:

​        整个web应用

2,何时创建:

​        服务器启动时会为每一个web项目创建单独的ServletContext对象,一个web应用只有一个

3,何时销毁:

​        服务器关闭,项目被移除时销毁该对象

4,存取数据的方法:

java
request.setAttribute(String key,Object value);

Object value = request.getAttribute(String key);

request.removeAttribute(String key)

# 获取文件路径

java
String realPath = serveltContext.getRealPath(String path);
InputStream is = servletContext.getResourcesAsStream(String path);







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2