1.HttpServletrequest 与HttpServletResponse总结
1.1.向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest.
1.2.客户端主动建立连接、发送 HTTP 请求的来初始化一个事务,服务器不负责连接客户端,或创建一个到客户端的回调连接(callback connection)
1.3.客户端浏览器发出的请求被封装成为一个HttpServletRequest对象
1.4.所有的信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在HttpServletRequest对象内
1.5.一个 HTTP 请求包含以下三部分:
a.请求地址(URL):URI 指明了请求资源的地址,通常是从网站根目录开始计算的一个相对路径,因此它总是以斜线 “/”开头的。
URL 实际上是 URI 的一种类型
b.请求头(Request headers):包含了一些关于客户端环境和请求实体(entity)的有用的信息
例如:客户端浏览器所使用的语言,请求实体信息的长度等,请求头的格式:请求头名+英文空格+请求头值
c.实体数据(Entity body)
2.java获取客户机信息的方法
request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomcat-7.0.25\webapps\TestSytem\
request.getServletPath() 获取客户端请求的路径名,如:/object/delObject
request.getServerName() 获取服务器地址,如:localhost
request.getServerPort() 获取服务器端口,如8080
request.getContextPath() 获取项目名称,如:TestSytem
request.getLocalAddr() 获取本地地址,如:127.0.0.1
request.getLocalName() 获取本地IP映射名,如:localhost
request.getLocalPort() 获取本地端口,如:8080
request.getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomcat-7.0.25\webapps\TestSytem\
request.getRemoteAddr() 获取远程主机地址,如:127.0.0.1
request.getRemoteHost() 获取远程主机,如:127.0.0.1
request.getRemotePort() 获取远程客户端端口,如:3623
request.getRequestedSessionId() 获取会话session的ID,如:823A6BACAC64FB114235CBFE85A46CAA
request.getRequestURI() 获取包含项目名称的请求路径,如:/TestSytem/object/delObject
request.getRequestURL().toString() 获取请求的全路径,如:http://localhost:8090/TestSytem/object/delObject
3.获得客户机请求头
getHeader(string name)方法
getHeaders(String name)方法
getHeaderNames方法
4.出现乱码的原因和解决
4.1. java程序中默认的是中文字符----unicode
4.2. 系统会把在java程序中的unicode字符按照某种字符集编码的方式转换成字节数组,再通过浏览器输出,浏览器在输出的时候要进行解码,只有在这两种方式一样的情况下,才不会出现乱码
4.3. 设置编码的两种方式:
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
4.4.系统默认的编码方式为ISO8859-1,如果没有指定字符编码,则输出的都是乱码,
而且ISO8859-1不支持中文,所以不管浏览器在解码的时候用的是什么字符集编码,在浏览器上的都是乱码
4.5.Post方式提交出现乱码:
request.setCharacterEncoding("UTF-8"):设置服务器以UTF-8的编码接收数据后,此时就不会产生中文乱码问题了
4.6. Get方式提交出现乱码
String name = request.getParameter("name");//接收数据
name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题
5.HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法
5.1.HttpServletResponse对象可以向客户端发送三种类型的数据:
a.响应头(Response headers)
b.状态码(Protocol—Status code—Description)
c.实体数据(Entity body )
5.2.常用方法
addHeader(String name,String value) 将指定的名字和值加入到响应的头信息中
encodeURL(String url) 编码指定的URL
sendError(int sc) 使用指定状态码发送一个错误到客户端
setDateHeader(String name,long date 将给出的名字和日期设置响应的头部
setHeader(String name,String value) 将给出的名字和值设置响应的头部
setStatus(int sc) 给当前响应设置状态码
HttpServletResponse.sendRedirect 方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
response.setContentType("text/html;charset=utf-8");
setContentType(String ContentType) 设置响应的MIME类型 ,页面的设置文本类型,获取或设置输出流的 HTTP MIME 类型。输出流的 HTTP MIME 类型。默认值为“text/html”。
response.setHeader(“Refresh”,”2;url=”http://www.baidu.com”); 页面的刷新
消息实体内容 通过输出流对象进行设置,用以下两个方法:
Response.getOutputStream() 字节输出流对象
Response.getWriter() 字符的输出流对象
扩展:java反射机制和类路径的获取
举例;在报com.test下建个类User
(1)this.getClass().getResource("").getPath():获取这个类所对应的classes文件所在路径
结果为:/D:/MyeclipseWorkspace4/WebRoot/WEB-INF/classes/com/test/
(2)this.getClass().getResource("/").getPath():获取这个类的路径,也就是classpath路径
结果为:/D:/MyeclipseWorkspace4/WebRoot/WEB-INF/classes/
(3)this.getClass().getClassLoader().getResource(“user.xml”).getPath():获取文件user.xml所在路径
结果为:/D:/MyeclipseWorkspace4/WebRoot/WEB-INF/classes/user.xml
(4)this.getClass().getClassLoader().getResource("").getPath():也是获取classpath路径