请求方式的通用获取方法:

1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
			1. String getParameter(String name):根据参数名称获取参数值    username=zs&password=123
			2. String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game
			3. Enumeration<String> getParameterNames():获取所有请求的参数名称
			4. Map<String,String[]> getParameterMap():获取所有参数的map集合(在BeanUtils对参数进行封装时用的多)

设置request的编码request.setCharacterEncoding(“utf-8”);解决前台提交的数据乱码问题

##转发(服务器内部的资源跳转方式,一次性请求,浏览器的地址栏不发生改变,转发前后的页面可以使用request域对象共享数据):
request.getRequestDispatcher(String path).forword(request,response);

request域对象:因为request对象是对一次请求的请求数据的封装,因此request域只能用于一次请求的范围(转发)
* 方法:
1. void setAttribute(String name,Object obj):存储数据
2. Object getAttitude(String name):通过键获取值
3. void removeAttribute(String name):通过键移除键值对

BeanUtils工具类,简化数据封装:(使用前需要导包)
//BeanUtils装载参数至JavaBean类
Map<String, String[]> map = request.getParameterMap();//将请求参数转成map集合
User user = new User(); //创建将要装载的javaBean类的空参对象

try {
        BeanUtils.populate(user,map);					  //使用BeanUtils的populate方法,将map集合中的键值对参数装载至javaBean类User中
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }

request获取请求行数据

* GET /day14/demo1?name=zhangsan HTTP/1.1
			* 方法:
				1. 获取请求方式 :GET
					* String getMethod()  
				2. (*)获取虚拟目录:/day14
					* String getContextPath()
				3. 获取Servlet路径: /demo1
					* String getServletPath()
				4. 获取get方式请求参数:name=zhangsan
					* String getQueryString()
				5. (*)获取请求URI:/day14/demo1
					* String getRequestURI():		/day14/demo1
					* StringBuffer getRequestURL()  :http://localhost/day14/demo1

					* URL:统一资源定位符 : http://localhost/day14/demo1	中华人民共和国
					* URI:统一资源标识符 : /day14/demo1					共和国
				
				6. 获取协议及版本:HTTP/1.1
					* String getProtocol()

				7. 获取客户机的IP地址:
					* String getRemoteAddr()

request获取请求头数据

* 方法:
				* (*)String getHeader(String name):通过请求头的名称获取请求头的值
				* Enumeration<String> getHeaderNames():获取所有的请求头名称

request获取请求体数据:

* 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
			* 步骤:
				1. 获取流对象
					*  BufferedReader getReader():获取字符输入流,只能操作字符数据
					*  ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

response设置响应数据:

响应行:
	状态码:	
		response.setStatus(int sc);
		1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
		2. 2xx:成功。代表:200
		3. 3xx:重定向。代表:302(重定向),304(访问缓存)
		4. 4xx:客户端错误。
			* 代表:
				* 404(请求路径没有对应的资源) 
				* 405:请求方式没有对应的doXxx方法
		5. 5xx:服务器端错误。代表:500(服务器内部出现异常)
	响应头:
		response.setHader(String name,String value);

		常见响应头:

Content-type:服务器告诉浏览器本次响应的数据格式以及编码格式
response.setContentType(“text/html;charset=utf-8”);
Content-disposition:服务器告诉客户端以什么格式打开响应体数据
response.setHader(“Content-disposition”,String value);
值:
* in-line:默认值,在当前页面内打开
* attachment;filename=xxx:以附件形式打开响应体。文件下载

响应体:
		使用步骤:
			1.获取输出流
				字符输出流:PrintWriter getWriter()
				字节输出流:ServletOutputStream getOutputStream()
			2.使用输出流,将数据输出到客户端浏览器

重定向(地址栏发生改变,可以访问其他站点资源,是两次请求,不能使用request域对象共享数据):

代码实现:
			//1. 设置状态码为302
	        response.setStatus(302);
	        //2.设置响应头location
	        response.setHeader("location","/day15/responseDemo2");


	        //简单的重定向方法
	        response.sendRedirect("/day15/responseDemo2");

路径:

相对路径:以.开头的路径,通过相对路径不能确定唯一资源

绝对路径:以/开头的路径,通过绝对路径可以确定唯一资源
		1.给客户端使用:需要加虚拟目录
		  虚拟目录的获取方式:
			request.getContentPath();
		2.给服务器使用:
			不需要加虚拟目录(转发)

乱码问题:
1. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
2. 设置该流的默认编码
3. 告诉浏览器响应体使用的编码
解决乱码:

//简单的形式,设置编码,是在获取流之前设置
 response.setContentType(“text/html;charset=utf-8”);

ServletContext对象:

(整个web应用只有一个ServletContext对象)

1.获取方式:
通过request对象获取:
request.getServletContext();
通过HttpServlet获取:
this.getSrevletContext();

2.功能:
1.获取MIME类型:
* MIME类型:在互联网通信过程中定义的一种文件数据类型
* 格式: 大类型/小类型 text/html image/jpeg
String getMimeType(String file);

2.域对象:共享数据( ServletContext对象范围:所有用户所有请求的数据)
1.setAttribute(String name,Object value)
2.getAttribute(String name)
3.removeAttribute(String name)

3.获取文件的真实(服务器)路径:(根据tomcat部署的项目的位置进行获取)
方法:String getRealPath(String path);
web目录下的资源的真实路径获取:

this.getServletContext().getRealPath("/b.txt");

WEB-INF目录下的资源的真实路径获取:

this.getServletContext().getRealPath("/WEB-INF/b.txt");

src目录下的资源的真实路经获取:

this.getServletContext().getRealPath("/WEB-INF/classes/b.txt");