Servlet
request(请求)
所有和请求相关的操作,都用这个对象来处理
当有请求来的时候,request就被实例化
response对象
所有和响应相关的操作,都用这个对象来处理
当你想要给出响应时,response就被实例化
当你想要给出响应时,使用response
我们要给出的响应必须要展示在客户端(浏览器)
servlet的生命周期
初始化-init()只需调用一次默认当我们第一次访问servlet的时候被执行,延迟加载
提供服务- service() [doGet doPost] 多次(多线程)
销毁 destory() 只需要调用一次
设置字符集
我们需要设置字符集,不然会乱码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
当我们向页面回应数据时,也会容易乱码,需要添加响应头
response.addHeader("content-type","text/html;charset=utf-8");
PrintWriter
使用printWriter对象可以向页面给出响应
这就是客户端和服务器端的信息传递
IO流
还需要关流out.flush();
out.close();
传参
最常见的客户端传参的方式两种:get,post
浏览器地址栏直接输入:一定是get请求
超级连接:一定是get请求
表单:可以是get,也可以是post,取决于method
get请求和post请求的区别
get:请求的参数会在浏览器的地址栏中显示,不安全,请求的长度限制在1k之内。没有请求体,无法通过request去设置一些参数。
post:请求的参数不会再浏览器的地址栏中显示,相对安全把请求的参数封装成几个数据报文(请求体),请求参数的长度没有限制。
request方法
getParameter()获取客户端传入的值
getParameterValues()获取一个key对应的多个值,返回值为String类型的数组
getParameterNames()拿到所有传过来的参数名称 就是key的值,可以根据key获取对应的值
getParameterMap()可以获取到请求中的所有的键值对,返回值是一个map集合,这个map集合的key是string, vaLue是string[ ]
请求转发
请求转发–有多个servlet来处理一个请求
请求转发实在服务器上完成的,跟客户端无关。
方法:
request.getRequestDispatcher("/Demo03").forward(request, response);
}
参数:转发的servlet地址
forward参数:把当前的servlet用的request和response传过去
原理:转发路径URL 在地址栏是不可见的, 可以共享请求对象
重定向
重定向则是浏览器端跳转,会产生两次请求
重定向语句是:response.sendRedirect()
原理:转发路径URL 在地址栏是可见的, 不可以共享Request对象。
作用域
作用域可以实现多个服务之间数据的共享
往request作用域中添加一个属性name,值是zhagnsan
//向域中添加数据
request.setAttribute("name","zhangsan");
//获取域中的数据
request.getAttribute("name");
//加上转发到别的服务中,其他类也可以获得域中的值
request.getRequestDispatcher("Demo05").forward(request,response);
域中获取数据的方法
//获取request作用域中的所有的key
Enumeration<String> attributeNames = request.getAttributeNames(); //根据key获取value
Object name = request.getAttribute("name");
重定向和请求转发的区别
1.请求转发是两次请求,请求转发是一个请求
2.重定向是客户端行为,请求转发是服务器行为
3.重定向浏览器地址会发生改变,转发不会
4.重定向可以定向到任意地址,转发只能项目内转发