1.请求转发与重定向
ServletContext中没有转发的方法,但是它里面有getRequestDispatcher这个方法,通过getRequestDispatcher传递一个请求转发的地址,返回一个对象叫RequestDispatcher
RequestDispatcher对象里面有两个方法forward()和include(),这两个方法都能实现转发
在Servlet中实现转发的步骤如下:
/*要利用ServletContext对象实现转发*/
ServletContext context = this.getServletContext();
context.setAttribute(“name”,”redarmy”);
/*RequestDispatcher对象*/
//在Web开发中没有绝对路径 使用相对路径../代表的是:url地址
//http://localhost:8080/20111019/servlet/demo.do
RequestDispatcher rd = context.getRequestDispatcher(“/index.jsp”);
//request 对象 response对象转发
rd.forward(request, response);
//response.sendRedirect(“./index.jsp”);
//rd.include(request, response);
response.getWriter().print(“haha”);
2.请求转发与重定向的区别:第一: 转发 地址栏不发生变化 转发页面成功。而重定向地址栏发生变化。第二:请求转发能够把在request中存的值 在项目转发相应的页面中能够获取web动态资源的值 而重定向不能
3.forward与include的区别: forward方法是把请求的内容转发到另外的一个servlet.而include是把另一个servlet处理过后的内容拿过来
4.ServletContext读取资源文件
1)在Demo02Servlet的doPost方法中获取路径的步骤
/*获取ServletContext对象*/
ServletContext context = this.getServletContext();
/*获取路径*/
String realPath = context.getRealPath();
Response.getWriter().write(“realPath=====”+realPath);
2)读取资源文件的三种方式:
配置的properties的内容如下
url=jdbc:mysql://localhost:3306/3g;
user=root;
password=root;
第一种:
/* 获取ServletContext对象 */
ServletContext context = this.getServletContext();
/* 第一步:读取资源的位置 */
//第一种方式:
// 绝对路径
File file = new File("WEB-INF/classes/db.propertie"); InputStream is = new FileInputStream(file);
// 第二种方式读取外部的资源文件
InputStream is = context
.getResourceAsStream("WEB-INF/classes/db.propertie");
System.out.println(is + "-----");
// response.getWriter().write("realPath==="+realPath);
//第三种方式:
URL url = context.getResource("WEB-INF/classes/db.properties");
InputStream is = url.openStream();
/* 解析Properties的文件 */
Properties prop = new Properties();
// 从输出流中读取属性列表(键和元素对)
prop.load(is);
Set<String> set = prop.stringPropertyNames();
// 遍历set集合
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String key = it.next();
String value = prop.getProperty(key);
System.out.println(key + "-----" + value);
}