以下内容为徐老师课堂笔记
-GET
1)参数是跟在url后面,以?开头,每个参数以&分割
2)GET可以使用缓存
3)参数的内容大小不超过1k
4)不适合传输加密的参数
-POST
1)参数在实体内容里面,每个参数以&分割
2)POST不能使用缓存
3)参数的内容大小没有限制
4)适合传输加密的参数
URI
Http协议版本号
request.getHeaderNames();
request.getDateHeader(headerName);
request.getIntHeader(headerName);
request.getHeader("user-agent");//获取浏览器的类型和版本
request.getHeader("host");//获取主机的地址
request.getHeader("Referer");//获取该请求来自于哪里。防止盗链
request.getParameter(paramName);
request.getParameterNames();
乱码问题:
POST:
request.setCharacterEncoding("utf-8");//设置实体内容的编码
GET:
一、tomcat对URL默认编码是iso8859-1
new String(request.getParameter(paramName).getBytes("iso8859-1"),"utf-8");
二、修改tomcat对URL的编码方式,可以修改这个文件tomcat/conf/server.xml
<Connection port="8080" ..... URIEncoding="utf-8"/>
200状态码:请求处理完成,非常完美!
304状态码:服务器的资源没有更新,通知浏览器拿浏览器缓存。
定时刷新:设置refresh的响应头
格式:refresh:1;url=/day05/refresh.html
设置内容类型:设置content-Type的响应头
text/html 以网页方式输出
text/xml 以xml方式输出
image/jpeg 以图片格式输出
设置文件以下载方式打开:设置content-disposition的响应头
格式: content-disposition:attachment;filename=xxxx.xls
response.setContentType(".....;charset=utf-8");
1)可以映射到一个具体的地址
<url-pattern>/test</url-pattern>
2)在前面写通配符
<url-pattern>*.do</url-pattern>
3)在后面写通配符
<url-pattern>/test/*</url-pattern>
这种方式不合法的:
<url-pattern>test</url-pattern>
<url-pattern>/test*</url-pattern> : 这里的*号没有通配符的作用,当做一般的字符来处理
<url-pattern>/test/*.do</url-pattern> 以 / 开头,*号不能出现在中间
2)以扩展名方式结尾(例如*.do)的映射优先级最低
init:当servlet实例创建成功之后调用,init只调用一次。这里的真正的调用有参数的init(config)方法
service:每一次请求都会调用一次这个方法
destroy:tomcat停止前或web应用重新部署时会被调用
init():这个方法是为方便程序员去覆盖,然后在里面编写一些自己的初始化的逻辑代码。
2、在<servlet>配置里加上<load-on-startup>1</load-on-startup>,servlet的实例就会在web应用启动的时候被创建。
这里的值要写正整数,数值越低,优先级越高。如果数值相同,就会按照在web.xml的出现顺序依次加载。
2)使用SingleThreadMode。但是这个已经过时,因为它为servlet创建多个实例,不是真的解决多线程并发问题。
2)如果要实例变量,可能会有并发问题,那么就使用同步代码块的方式解决,而且尽量缩小同步代码块的范围。
二、servletconfig对象时在init(ServletConfig config)方法被调用之前创建,然后被init(ServletConfig config)作为参数传入servlet.
所以在servlet里面就可以通过 this.getServletConfig() 获取ServletConfig对象的实例。
三、servletconfig的应用:
获取servlet的配置参数信息:
ServletConfig.getInitParameter(paramName);
ServletConfig.getInitParameterNames();
二、servletContext对象时在当前web应用启动的时候被创建,在这个web应用下面的所有servlet都能获取到同一个ServletContext对象。
三、servletcontext的应用:
1)获取servletcontext的配置参数信息
ServletContext.getInitParameter(paramName);
ServletContext.getInitParameterNames();
2)可以在多个servlet之间共享数据
设置数据
ServletContext.setAttribute(name,value);
获取数据
ServletContext.getAttribute(name);
servletconfig vs servletcontext
servletconfig的作用范围是就是在这个servlet范围里
servletcontext的作用范围是当前的web应用范围里,针对这个web应用的servlet是共享的
1)请求转发的相对URL,以/开头,这个/是相对于当前web应用的根目录;请求重定向的相对URL,以/开头,这个/是相对于tomcat的web站点的根目录。
2)请求转发只能转发到当前web应用里面的资源;请求重定向可以重定向到当前web应用资源(/day05/forward.html),还可以web站点下其他web应用资源(/day04/testGetPost.html),其他web站点资源(http://www.baidu.com)
3)请求转发后浏览器的URL地址不会改变;请求重定向后浏览器的URL地址发生改变,变成重定向到的资源地址。
4)请求转发的调用者和被调用者处于同一个请求和响应当中;请求重定向的调用者和被调用者分别处于两个不同的请求和响应当中;
【请求转发(forward)和请求包含(include)】
Http请求(HttpServletRequest)
请求行
请求方法-GET
1)参数是跟在url后面,以?开头,每个参数以&分割
2)GET可以使用缓存
3)参数的内容大小不超过1k
4)不适合传输加密的参数
-POST
1)参数在实体内容里面,每个参数以&分割
2)POST不能使用缓存
3)参数的内容大小没有限制
4)适合传输加密的参数
URI
Http协议版本号
请求头
request.getHeader(headerName);request.getHeaderNames();
request.getDateHeader(headerName);
request.getIntHeader(headerName);
request.getHeader("user-agent");//获取浏览器的类型和版本
request.getHeader("host");//获取主机的地址
request.getHeader("Referer");//获取该请求来自于哪里。防止盗链
实体内容
获取用户参数:request.getParameter(paramName);
request.getParameterNames();
乱码问题:
POST:
request.setCharacterEncoding("utf-8");//设置实体内容的编码
GET:
一、tomcat对URL默认编码是iso8859-1
new String(request.getParameter(paramName).getBytes("iso8859-1"),"utf-8");
二、修改tomcat对URL的编码方式,可以修改这个文件tomcat/conf/server.xml
<Connection port="8080" ..... URIEncoding="utf-8"/>
【Http响应】(HttpServletResponse)
设置状态行
302状态码:结合location请求头一起使用,达到请求重定向的效果。200状态码:请求处理完成,非常完美!
304状态码:服务器的资源没有更新,通知浏览器拿浏览器缓存。
设置响应头
请求重定向:302状态码+location响应头定时刷新:设置refresh的响应头
格式:refresh:1;url=/day05/refresh.html
设置内容类型:设置content-Type的响应头
text/html 以网页方式输出
text/xml 以xml方式输出
image/jpeg 以图片格式输出
设置文件以下载方式打开:设置content-disposition的响应头
格式: content-disposition:attachment;filename=xxxx.xls
设置实体内容
设置内容输出编码:response.setContentType(".....;charset=utf-8");
========Servlet开发================================================
【servlet映射问题】
一、servlet的映射方式
一个servlet的映射地址,要么以 / 开头,要么以通配符开头(*),不能两者同时存在!1)可以映射到一个具体的地址
<url-pattern>/test</url-pattern>
2)在前面写通配符
<url-pattern>*.do</url-pattern>
3)在后面写通配符
<url-pattern>/test/*</url-pattern>
这种方式不合法的:
<url-pattern>test</url-pattern>
<url-pattern>/test*</url-pattern> : 这里的*号没有通配符的作用,当做一般的字符来处理
<url-pattern>/test/*.do</url-pattern> 以 / 开头,*号不能出现在中间
二、当多个servlet的映射出现重叠的情况
1)优先找最匹配的映射2)以扩展名方式结尾(例如*.do)的映射优先级最低
【servlet生命周期】
一、servlet生命周期重要的方法
构造方法:只调用一次,证明在一个web应用程序中,一个servlet只有一个实例。init:当servlet实例创建成功之后调用,init只调用一次。这里的真正的调用有参数的init(config)方法
service:每一次请求都会调用一次这个方法
destroy:tomcat停止前或web应用重新部署时会被调用
二、init(ServletConfig config) 和 init()的关系
init(ServletConfig config):是当servlet被实例化之后去调用的方法,进行servlet内部的一些初始化工作。init():这个方法是为方便程序员去覆盖,然后在里面编写一些自己的初始化的逻辑代码。
三、指定servlet实例创建的时机
1、默认情况下servlet的实例是在第一次调用时被创建2、在<servlet>配置里加上<load-on-startup>1</load-on-startup>,servlet的实例就会在web应用启动的时候被创建。
这里的值要写正整数,数值越低,优先级越高。如果数值相同,就会按照在web.xml的出现顺序依次加载。
【servlet线程安全问题】
一、线程的解决办法:
1)使用同步代码块2)使用SingleThreadMode。但是这个已经过时,因为它为servlet创建多个实例,不是真的解决多线程并发问题。
二、要开发安全servlet的建议:
1)在servlet里面尽量使用局部变量,不建议使用实例变量2)如果要实例变量,可能会有并发问题,那么就使用同步代码块的方式解决,而且尽量缩小同步代码块的范围。
【servletconfig对象】
一、servletconfig:servlet配置对象。这个对象里面包含了servlet的相关信息,例如servlet的名称,servlet的配置参数信息。二、servletconfig对象时在init(ServletConfig config)方法被调用之前创建,然后被init(ServletConfig config)作为参数传入servlet.
所以在servlet里面就可以通过 this.getServletConfig() 获取ServletConfig对象的实例。
三、servletconfig的应用:
获取servlet的配置参数信息:
ServletConfig.getInitParameter(paramName);
ServletConfig.getInitParameterNames();
【servletcontext对象】
一、servletcontext: servletcontext代表整个web应用的环境。包含了当前的web容器版本,servlet api的版本,web应用的环境配置参数信息。二、servletContext对象时在当前web应用启动的时候被创建,在这个web应用下面的所有servlet都能获取到同一个ServletContext对象。
三、servletcontext的应用:
1)获取servletcontext的配置参数信息
ServletContext.getInitParameter(paramName);
ServletContext.getInitParameterNames();
2)可以在多个servlet之间共享数据
设置数据
ServletContext.setAttribute(name,value);
获取数据
ServletContext.getAttribute(name);
servletconfig vs servletcontext
servletconfig的作用范围是就是在这个servlet范围里
servletcontext的作用范围是当前的web应用范围里,针对这个web应用的servlet是共享的
========Request和Response的查漏补缺==============================
【请求转发和请求重定向的区别】1)请求转发的相对URL,以/开头,这个/是相对于当前web应用的根目录;请求重定向的相对URL,以/开头,这个/是相对于tomcat的web站点的根目录。
2)请求转发只能转发到当前web应用里面的资源;请求重定向可以重定向到当前web应用资源(/day05/forward.html),还可以web站点下其他web应用资源(/day04/testGetPost.html),其他web站点资源(http://www.baidu.com)
3)请求转发后浏览器的URL地址不会改变;请求重定向后浏览器的URL地址发生改变,变成重定向到的资源地址。
4)请求转发的调用者和被调用者处于同一个请求和响应当中;请求重定向的调用者和被调用者分别处于两个不同的请求和响应当中;
【请求转发(forward)和请求包含(include)】