X65535JavaWeb部分02
Servlet请求转发
/*
请求转发有如下几个步骤
1. 配置web.xml文件,配置servlet标签和servlet-map标签
2. 调用HttpServletRequest参数(req)的getParameter方法,获取请求参数名
3. 调用req的setAttribute方法,盖章
4. 调用req的getRequestDispatcher方法,参数是servlet2路径,需要/开头
返回RequestDispatcher对象
5. RequestDispatcher对象实例调用forward方法,传递参数req,resp
6. 此时servlet2处理请求的方法中只需要查看是否有servlet1的章就行了
*/
ServletContext类的作用
/*
ServletContext类的4个作用
1. 获取web.xml中配置的上下文参数context-param
2. 获取当前工程路径,格式:/project path
3. 获取工程部署后在服务器硬盘上的绝对路径
4. 像Map一样存取数据
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 获取上下文参数context-param
ServletContext servletContext = getServletConfig().getServletContext();
String s = servletContext.getInitParameter("computerModel");
// 访问 <project path>/real5即可在控制台打印apple
System.out.println(s);
// 2. 获取当前工程路径
String contextPath = servletContext.getContextPath();
System.out.println(contextPath);
// 3. 获取当前工程绝对路径,磁盘上的绝对路径映射到IDEA代码的web目录下
servletContext.getRealPath("/");
// 4. 像Map一样存取数据
// 这里注意1个点,就当我们工程加载完成后,无论我们在工程下的哪里,都可以得到我们存入的数据,这就是域,ServletContext是域对象
}
ServletConfig类的作用
/*
ServletConfig类3大作用
1. 可以获取Servlet程序别名servlet-name值
servletConfig.getServletName();
2. 获取初始化参数init-param
servletConfig.getInitParameter("paramName");
3. 获取ServletContext对象
servletConfig.getServletContext();
4. 注意在init方法中使用
*/
base标签的作用
相对路径参照当前浏览器地址栏当前路径
下面的第1张图片应该是理想的跳转路径,但是使用了请求转发的时候,
此时浏览器地址栏显示的并不是/a/b/c.html,而是/project/forward请求转发页面,
所以在相对路径工作参照地址栏的时候,就会找不到原来的index.html界面
base标签可以解决这一问题,
base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转
base标签是写在head标签里面的,然后一般写在title标签下面
此时忽略掉浏览器地址栏显示什么路径,c.html界面都可以跳转回首页,下面补充一下相对路径和绝对路径的知识点