JavaWeb之request/respone(四)

ServletResponse对象

简介

今天是JavaWeb入门第三天,代码量多了一些。今天学习的是Servlet引擎中两个对象,可能今天的理论知识不能掌握下来。我想说多敲代码,会有收获的。 学习原则不变,牢记知识点以及小案例应用,不断的练习代码。基础打扎实了,才能面对接下来的学习呀。不多说,练习咯~对现在的自己说一句话,加油~

1. ServletResponse简介

1). 辅助 servlet 将响应内容发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法
2). Http协议响应消息头--->面向对象的开发人员--->用对象封装所有的响应消息头及正文--->ServletResponse(与协议无关)--->HttpServletResponse(与协议相关)
用户第一次请求时,服务器要生成一个response对象,第二次访问时,也会生成一个新的对象

2. 如何将正文发送给客户端

2.1 如何获得字节流
	1) //得到用于发送字节流对象
	OutputStream os = response.getOutputStream();
	//发送字节流os.write("hello".getBytes());
	//输出中文问题,输出中文默认情况下没有乱码,可以改变服务器输出数据的编码格式
	//看到乱码,因为客户端还采用GBK显示,所以要用代码调整,客户端显示数据的编码
	<meta http-equiv="Content-Type" context="text/html;charset=UTF-8">
	response.setHeader("Content-Type", "text/html;charset=UTF-8");
	response.setContentType("text/html;charset=UTF-8");
	//解决服务器控制浏览器显示数据采用什么编码的最好的方法
	os.close();没有必要写,因为Servlet引擎会自动关闭

	2) 如何解决中文乱码
	//		第一种解决思路: meta标签
	//		os.write("<meta http-equiv=‘Content-Type‘ content=‘text/html;charset=GBK‘>".getBytes());
	//		第二种解决思路: 采用response对象中加入响应消息头
	//		response.setHeader("Content-Type", "text/html;charset=UTF-8");
	//		第三种解决思路: setContentType();
			response.setContentType("text/html;charset=UTF-8");(推荐)
	总结:浏览器采用什么编码写出数据,必须相应的声明标头的编码格式
2.2 如何以字符流输出
	PrintWriter pw = response.getWriter();
	默认输出数据用ISO-8859-1
	如何改变服务器向客户端输出数据的编码: response.seCharacterEncoding("UTF-8");
	通知客户端也要采用同样的编码显示 response.setContentType("text/html;charset=UTF-8");

	总结:对于服务器输出字符流数据是,只要就加上response.setContentType("text/html;charset=UTF-8");
	就不会有乱码问题,因为有两个作用
		1. 告知浏览器显示数据采用什么编码
		2. 服务器输出字符数据采用什么编码

3. URL写法总结

URL写法总结:
	给服务器用的,不需要写应用名	getServletContext().getRealPath("/WEB-INF/classes");
	给浏览器用的要写应用名 <a href="">	Location	<img src="">	<link href="">	<script src="">

ServletRequest对象

1. ServletRequest简介

1. 它是服务器提供的一个对象,用于封装客户端请求信息,并提供Servlet
2. 子接口	HttpServletRequest 它与协议相关
3. 为什么用它?
	作为面向对象的开发人员,想到用一个HttpServletRequest的对象来封装客户端
4. 什么情况下产生这个对象(它的生命周期)
	每次请求时,服务器都会产生一个新的request对象

2. 得到头信息常用的方法

getHead(name): 根据指定的名字,获取客户端发过来请求头所对应的值
	Accept-Encoding请求头用于告知服务器,客户端可以接收什么样的数据压缩格式
getHeaders(String name)根据指定的名字,获取客户端发过来请求头所对应的一组值
getHeaderNames()用于获取客户端发过来请求头所有值

String clientIP = request.getRemoteAddr();// 得到客户端ip
String clientHost = request.getRemoteHost();
String uri = request.getRequestURI();// 资源路径
StringBuffer url = request.getRequestURL();// 协议+主机地址+资源地址+端口号
System.out.println(clientIP + ">>" + clientHost + ">>" + uri + ">>");
System.out.println("协议+主机地址+资源地址+端口号: "+url.toString());

//有可能应用名与工程名不同名
System.out.println("动态获取应用名: " +request.getContextPath());	//动态获取应用名
System.out.println("得到客户端本次请求时使用的端口号:" +request.getRemotePort());//端口号每次请求时会不一样

3. 请求参数

<input type="text" name="username" />
String value = request.getParameter("username");//接收指定名称的一个值
//用于接收一个指定名字所对应的一组值
String[] getParameterValues(java.lang.String name)

Enumeration<String> paramNames = getParameterNames();//返回一个表单 中所有的请求参数名
Map map = getParameterMap();//返回 一个Map 集合   key:paramName   value:paramValues
为了简化封装参数的过程?引入一个框架BeanUtils
	1.框架的使用
		1.1引入jar   (commons-beanutils--xxx.jar,commons-logging-xxx.jar)
		2.使用
			BeanUtils.setProperty(bean,propertyName,propertyValue);

3.请求过程中的乱码处理(post,get)
	1.post方式
		request.setCharacterEncoding("UTF-8");
	2.get方式
		String usernameValue = request.getParameter("username");//username 是为了要与文本框的name属性取值一样
		byte []oldStr = usernameValue.getBytes("iso-8859-1");//还原回去
		usernameValue = new String(oldStr,"UTF-8");

小知识点扫盲

*Serializable是专门用于实现序列化的
* 	实现了这个接口,意味着这个类是可以被序列化
* 	实现了这个接口,意味着可以在网络上直接传输对象
*
* 什么是序列化?它支持一次性将一个对象存入到文件中
* 支持对象进行网络传输
*
* JavaBean
* 	1. 是一个公有类
* 	2. 提供私有字段
* 	3. 对于这些私有字段,提供getter与setter
* 	4. 提供一个公有无参构造
* 	5. 一般实现Serializable接口
时间: 2024-12-16 22:20:19

JavaWeb之request/respone(四)的相关文章

JavaWeb-08 (JavaWeb-Servlet基础&amp;java web之request/respone)

JavaWeb-08 JavaWeb-Servlet基础&java web之request/respone JavaWeb-Servlet基础 一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 实验1:day0800servletConfig 工程架构: 工程下的web.xml文件内容 <?xml version="1.0" encoding="UTF

JavaWeb核心编程之(四.1)JSP

JSP简介: JSP是简化Servlet编写的一种技术, 它将Java代码和HTML语句混合在一个文件中编写, 只对网页中药动态产生的内容采用Java代码来编写, 而对固定不变的静态内容采用普通的静态HTML页面的方式编写 案例: Hello JSp 新建动态web工程 helloJSp WebContent下新建hello.jsp 会发现有一行为 <%@ page language="java" contentType="text/html; charset=ISO-

JavaWeb学习 (二十四)————Filter(过滤器)常见应用

一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 1 package me.gacl.web.filter; 2 3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.Serv

JavaWeb之JDBC(十四)

JDBC快速入门二 1. LOB存取 1. 向数据库中插入二进制数据 @Test public void testInsert() { Connection conn = null; PreparedStatement stmt = null; try { conn = JDBCUtils.getConnection(); String sql = "insert into t1 values(?,?)"; stmt = conn.prepareStatement(sql); stmt

JavaWeb总结(十四)

无脚本JSP表达式语言EL JSP页面中显示结果 jsp:useBean和jsp:getProperty两个元素冗长而笨拙 jsp:getProperty只支持对简单Bean属性的访问 public class Person implements Serializable { private String name; private Dog dog; -- } public class Dog implements Serializable { public String name; -- }

JavaWeb学习总结第四篇--Servlet开发

Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请求—响应模式就是典型的Web应用程序访问过程. JavaWeb应用程序中所有的请求—响应都是由Servlet完成的.Servlet是JavaWeb的核心程序,所有的网址最终都交给Servlet处理.Servlet并没有main之类的执行方法.当用户访问服务器的时候,Tomcat是通过调用Servle

javaweb学习总结(十四)——JSP原理

一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据. 二.JSP原理 2.1.Web服务器是如何调用并执行一个jsp页面的? 浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,

JavaWeb之Request &amp;&amp; Response篇

Reuqest 和 Response 服务器处理请求的流程 服务器每次收到请求时,都会为这个请求开辟一个新的线程. 服务器会把客户端的请求数据封装到request对象中,request就是请求数据的载体!(request中存放着本次请求的所有数据) 服务器还会创建response对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应.(response中存放着服务器针对本次请求处理的所有数据) 一.request request是Servlet.service()方法的一个参数,类型为ja

JavaWeb之Request/Response代码修炼篇(五)

1. 解决中文字符编码问题 String str = "我爱java"; //第一种方法 response.setContentType("text/html;charset=GBK");(推荐) //第二种方法 //response.setHeader("Content-Type","text/html;charset=UTF-8"); //第三种方法 //response.getOutputStream().write(&