javaweb之servlet2

来源:互联网 发布:php遍历json对象 编辑:程序博客网 时间:2024/05/16 18:02
一、ServletContext实现请求转发
1、得到请求分发器:RequestDispatcher
ServletContext.getRequestDispatcher(String path):path转发的目标。
path路径必须以"/"开头,"/"就代表当前应用。比如/day05    /


特点:原来用户请求的地址不变,响应由目标响应的。


二、读取配置文件的三种方式
*.properties  *.xml
1、使用ServletContext.getRealPath(String filePath)读取资源文件。path路径
必须以"/"开头,"/"就代表当前应用。
作用:getRealPath:得到指定相对路径path资源的实际存放路径(部署绝对路径)


特点:可以读取任何文件,只能用在web开发环境下。
2、ResourceBundle:非Web环境下。专门读取*.properties文件的。只能读取类路径
下的资源文件。
3、类加载器:ClassLoader
非Web环境下。读取任何资源文件。只能读取类路径下的资源文件。


三、Servlet规范中核心接口类图


四、HttpServletResponse概述
1、作用:向客户端输出内容。
2、具体方法:
响应行:响应码;响应码描述;
响应头:
正文:流

五、向客户端页面输出中文数据
1、字节流
data.getBytes("UTF-8")
解决浏览器乱码问题:
a、更改浏览器的编码(不可取)
b、通知浏览器使用UTF-8解码。(响应头:Content-type=text/html;charset=UTF-8)
response.setHeader("Content-Type", "text/html;charset=UTF-8");
或者response.setContentType("text/html;charset=UTF-8");
c、给客户端输出<meta>头
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
2、字符流
a、PrintWriter(JavaWeb中)默认查ISO-8859-1,
可以通过response.setCharacterEncoding(charset)更改默认编码不要忘记通知浏览器以相同的
编码进行解码。
b、HttpServletResponse.setContentType("text/html;charset=UTF-8")
有2个作用:更改字符流的默认编码为UTF-8,同时通知了客户端解码码表

六、HttpServletResponse应用案例:
1、控制动态资源不要缓存
2、控制静态资源的缓存时间
3、文件下载:中文名称的文件下载
4、定时刷新
5、动态输出随机验证码图片
七、HttpServletResponse的一些细节
1、在同一个Servlet中,response的字节和字符输出流互斥。
2、response的所有输出是输出到自己的缓存中的。容器从response对象的缓存中取出正文数据
与响应头和响应码组织成HTTP协议的格式,然后再打给浏览器。
3、response的输出流,容器会自动给你关闭。


八、HttpServletRequest概述及常用方法
1、该对象中包含了所有客户端带过的东东


九、HttpServletRequest获取请求头
十、HttpServletRequest获取请求参数(内省;BeanUtils框架)
getParameter(name)方法
getParameterValues(String name)方法
getParameterNames方法 
getParameterMap方法 :key:请求参数名 value:请求参数值数组
getInputStream:以流的形式获取正文数据


十一、请求参数的中文乱码问题:
1、POST:
客户端使用什么编码,就以什么编码传递请求参数。
通知自己的处理程序,客户端提交过来的数据编码:request.setCharacterEncoding("UTF-8");(对get无效)
2、GET:
ISO-8859-1
手工编码:new String(data.getBytes("ISO-8859-1"),"UTF-8");
十二、请求转发和重定向的不同
请求重定向:(客户端行为)与http协议有关
地址栏会变。发出了2次请求。
response.setStatus(302);
response.setHeader("Location", "/day05/servlet/RequestDemo5");
或者
response.sendRedirect("/day05/servlet/RequestDemo5");


请求转发:(服务器行为)
地址栏不会变。发出了1次请求。
源资源(工商局)   目标资源(民政局):共享请求中的数据




重点:
ServletRequest也是一个域对象:Map<String,Object>




十三、各种表单输入域
十四、请求转发和包含
十五、各种URL地址的写法