java web笔记——request&response

来源:互联网 发布:linux 分辨率 命令 编辑:程序博客网 时间:2024/05/05 01:39
<request&response细节>


用字节流写数字给浏览器时,要将数字转换成字符串类型 ,否则服务器会将数字当成字符编码编译,服务器默认使用
“ISO-8859-1”编码。
OutputStream out = respose.getOutputStream();
out.write((120+"").getBytes());


byte是基本数据类型,Byte是byte的包装类,是个class。


final为修饰关键字
类被声明为final则此类不能被继承,一个类不能既被声明为final又被声明为abstract。
变量被声明为final则不能被修改,且必须赋初始值。
方法被声明为final则此类只能被使用,不能被重载。


finally为异常处理程序块,不能是否有异常发生,finally中的程序都会被执行,先执行catch语句再执行finally语句。


respose.setHeader("Content-Disposition","attachment;filename=***");
语句中“Content-Disposition”和“content-disposition”都能执行
setHeader()参数不区分大小写


BufferedImage image= new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.fillRect(0, 0, WIDTH, HEIGHT);
g.drawRect(1, 1, WIDTH-2, HEIGHT-2);// x, y, x+width, y+height; 画在image的边界上无法显示边框


java.long.Math.random();返回带正号的double值,该值大于等于0.0且小于1.0
java.util.Random.nextInt(int n);返回一个伪随机数,在0(包括)和n(不包括)之间均匀分布int值;


做好随机验证码图片后可以用JS技术制作“看不清换一张”的动态功能,而不会刷新html表单填写的内容。


请求重定向,浏览器向服务器发送了两次请求,request和response对象分别有两个。
请求重定向,浏览器的地址栏会发生变化,主要应用于登陆场景。
response.sendRedirect("/(项目名)/(文件名)");//相对URL映射地址
sendRedirect()语句相当于
————response.setStatus(302);
response.setHeader("location", "相对URL映射地址");



getOutputStream()和getWriter()两个方法相互排斥,调用了其中一个就不能再调用另一个。
通过getRequestDispatcher()方法转发时,转发到的Servlet与请求转发的Servlet只能同时调用以上相排斥的
方法之一,两个分别调用以上方法时会发生错误:getWriter()/getOutputStream() has already been called
for this response.
注意!服务器把jsp文件写给浏览器会自动调用getWriter()方法


request.getRequestURL();返回请求访问的http地址
request.getRequestURI();返回请求访问的web资源地址
request.getQueryString();返回请求行中的参数部
request.getRemoteAddr();返回发出请求客户机的IP地址
request.getRemoteHost();返回客户机完整主机名
request.getRemotePort();返回客户机所使用的网络端口号
request.getLocalAddr();返回web服务器的ip地址
request.getLocalName();返回web服务器的主机名
request.getMethod();返回客户机请求的方式
request.getHeader()方法中忽略请求头字段参数的大小写


String[] values = request.getParameterValues("name");使用需要考虑values为null的情况,否则可能出错。


request.getInputStream()方法用在文件上传。
request.getHeader("referer")可用作防盗链,直接在浏览器地址输入访问,referer返回的值为NULL


request.setCharacterEncoding("UTF-8");对请求参数进行中文编码,告诉服务器用什么编码打开字节流,只对
POST提交方式有效,对GET方式无效。
GET方式需如下转换:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");


超链接中提交的数据包含中文,一定要url编码(GET方式)


request对象同时也是一个域对象。


forward()和include()实现了多个WEB应用资源间的协作。


如果在调用RequestDispatchar.forward(request,response)方法之前,在Servlet中写入的部分已经被真正的传输
到了客户端,forward()方法将抛出IllegalServletException。
若调用forward()方法之前向Servlet引擎的缓冲区(response)写入了数据,缓冲区的数据没有被真正提交到客户端
就可以正常执行forward()。
forward()方法执行时会清空原来写入到输出缓冲区的内容,但已写入到HttpServletResponse对象中的响应头字段
信息会保持有效。
执行了forward()后再向response中写入数据不会有效。


转发只有一次请求,只有一个request和一个response,转发涉及的多个资源共享同一个request和response
转发,浏览器地址栏不发生变化。


RequestDispatchar.include()方法使用:
request.getRequestDispatchar("/practice/head.html").include(request, response);
response.getWriter("Hello");
request.getRequestDispatchar("/practice/foot.html").include(request, response);

一般写资源地址时,建议以"/"开头,
如果这个地址给浏览器用,"/"代表网站下web应用根目录 (URL映射地址)
如果这个地址给服务器用,"/"代表WEB应用根目录 (硬盘地址)


客户端提交的请求方式是大写的GET,POST。(request.getMethod()的返回值)
0 0