Servlet开发中涉及的对象:
HttpservletRequest对象: 封装请求信息
HttpServletResponse对象: 封装响应信息
ServletConfig对象: 封装一个servlet配置参数信息
ServletContext对象: servlet的上下文对象
ServletConfig对象
servletconfig是配置对象,主要把servlet的初始化参数封装到这个对象中。一个网站中可能会存在多个ServletConfig对象,一个ServletConfig对象就封装了一个servlet的配置信息。
配置初始化参数
<servlet>
<servlet-name>ConfigDemo</servlet-name>
<servlet-class>com.demo.f_config.ConfigDemo</servlet-class>
<!-- servlet的初始化参数 -->
<init-param>
<param-name>path</param-name>
<param-value>e:/aaa.txt</param-value>
</init-param>
</servlet>
在servlet中获取初始化参数
config.getInitParameter("name"); 根据参数名称获取参数值
config.getInitParameterNames(); 获取所有参数名称
ServletContext对象
ServletConfig对象叫servlet上下文对象。 一个网站只会创建一个ServletContext对象。代表的是整个网站的环境信息。
获取ServletContext对象
this.getServletConfig().getServletContext();
通过ServletConfig对象来获取到ServletContext对象的。
ServletContext对象:启动的时候创建。
ServletConfig对象:调用init方法之前创建的,在ServletContext对象创建之前。
public ServletCofig{
ServletContext context;
public ServletConfig(context){
this.context=context;
}
public ServetContxt getServletContext(){
return;
}
}
ServletConfig config = new ServletConfig(context);
public MyServlet extends HttpSevlet{
publlic init(ServletConfig config){
SevletContext context= config. getServletContext();
}
}
ServletContext的5大作用
1)获取web的上下文路径
java.lang.String getContextPath()
/**
* 【context对象的作用1】-获取web上下文路径
* @author APPle
*
*/
public class ContextDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 获取web上下路径
*/
//1.1.获取ServletContext对象
//ServletContext context = this.getServletConfig().getServletContext();
/**
* 推荐使用简写
*/
ServletContext context = this.getServletContext();
//1.2 获取
String path = context.getContextPath();
System.out.println(path); // /demo
/**
* web上下文路径就是项目在tomcat服务器中运行的路径。注意不是开发目录的项目名称。
*/
//请求重定向
//response.sendRedirect("/demo/hello.html");
//作用:可以让这个获取文件的路径更加灵活
response.sendRedirect(context.getContextPath()+"/hello.html");
}
}
2)获取全局参数
java.lang.String getInitParameter(java.lang.String name)
java.util.Enumeration getInitParameterNames()
<web-app version="2.5"
xmlns="[http://java.sun.com/xml/ns/javaee](http://java.sun.com/xml/ns/javaee)"
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
xsi:schemaLocation="[http://java.sun.com/xml/ns/javaee](http://java.sun.com/xml/ns/javaee)
[http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd](http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd)">
<!-- 配置web应用全局的参数 -->
<context-param>
<param-name>AAA</param-name>
<param-value>AAA's value</param-value>
</context-param>
<context-param>
<param-name>BBB</param-name>
<param-value>BBB's value</param-value>
</context-param>
<context-param>
<param-name>CCC</param-name>
<param-value>CCC's value</param-value>
</context-param>
全局参数对当前web应用下的所有servlet都有效的。
/**
* 【context对象作用2】-获取全局参数
* @author APPle
*
*/
public class ContextDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 得到全局参数
*/
ServletContext context =
this.getServletContext();
System.out.println(context.getInitParameter("AAA"));
//遍历所有参数
Enumeration<String> enums = context.getInitParameterNames();
while(enums.hasMoreElements()){
String paramName = enums.nextElement();
String paramValue = context.getInitParameter(paramName);
System.out.println(paramName+"="+paramValue);
}
}
}
3)和域对象相关的
void setAttribute(java.lang.String name, java.lang.Object object) 保存数据
java.lang.Object getAttribute(java.lang.String name) 得到数据
void removeAttribute(java.lang.String name)清除数据
什么是域对象?
域对象在不同的资源之间来共享数据。保存数据,获取数据。
域对象的作用: 主要用于保存数据和获取数据,用于在web应用中不同资源之间共享数据。
![](https://img.haomeiwen.com/i16823531/b4c2e1bb8f8d3838.png)
例如:
Servlet1
name=eric
response.sendRedirect("/Servlet2?name=eric");
Servlet2
request.getParameter("name");
1)参数形式: 只能传递字符串数据
2)使用域对象形式:
在Servlet1中保存数据
在Servlet2中获取数据
public class ScopeDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 把数据存储到ServletContext域对象
*/
ServletContext context =
this.getServletContext();
//context.setAttribute("name", "eric");
List list = new ArrayList();
list.add("eric");
list.add("jacky");
list.add("rose");
context.setAttribute("list", list);
System.out.println("保存成功");
}
}
public class ScopeDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 从ServletContext域对象中取出数据
*/
ServletContext context =
this.getServletContext();
//String name = (String)context.getAttribute("name");
List list = (List)context.getAttribute("list");
System.out.println(list);
}
}
ServletContext就是我们学习的第一个域对象。
ServletContext域作用范围:在当前的web应用中有效。
Servlet中所有域对象:
HttpServletRequest对象: request域
ServletContext对象: context域
HttpSession对象: session域
Jsp中域对象:
PageContext对象: page域
4)转发相关的
RequestDispatcher getRequestDispatcher(java.lang.String path)
![](https://img.haomeiwen.com/i16823531/af8ec37e5a98a094.png)
在servlet中实现页面跳转
请求重定向: response.sendRedirect(路径);
请求转发: request.getRequestDispacher(路径).forward(request,respone);
public class RedirectDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 请求重定向(浏览器行为)
*/
//response.sendRedirect("/demo/hello.html");
/**
* 注意:
* 可以跳转到当前项目的资源,也可以跳转到其他项目的资源
*/
//response.sendRedirect("/demo/adv.html");
/**
* 把数据保存到request域对象
*/
request.setAttribute("name", "jacky");
response.sendRedirect("/demo/GetDataServlet");
}
}
public class GetDataServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 从request域对象中取出数据
*/
String name = (String)request.getAttribute("name");
System.out.println("name="+name);
}
}
/**
* 【context对象作用4】--请求转发
* @author APPle
*
*/
public class ForwardDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 转发:服务器行为
*/
/*
ServletContext context = this.getServletContext();
RequestDispatcher rd = context.getRequestDispatcher("/hello.html");
rd.forward(request, response);
*/
/**
* 注意:转发只能转发都当前项目的资源
*/
//this.getServletContext().getRequestDispatcher("../Demo/adv.html")
// .forward(request, response);
/**
* 把数据保存到request域对象
*/
request.setAttribute("name", "jacky");
//this.getServletContext().getRequestDispatcher("/GetDataServlet")
// .forward(request, response);
/**
* 简写方式
*/
request.getRequestDispatcher("/GetDateServlet").forward(request, response);
}
}
求重定向 vs 请求转发 区别
请求重定向:
1)地址栏改变,改变为重定向到地址
2)可以重定向到当前web应用,其他web应用,甚至是其他站点资源。
3)处于两次不同的请求。不可以使用request域对象来共享数据。
请求转发:
1)地址栏不会改变。
2)只能转发到当前web应用内部资源。
3)处于同一次请求。可以使用request域对象来共享数据
5)读取web项目的资源文件
java.lang.String getRealPath(java.lang.String path) 得到资源文件的绝对路径
java.io.InputStream getResourceAsStream(java.lang.String path)
java.net.URL getResource(java.lang.String path)
注意:
1)在java项目中ecplise工具,把java命令的运行根目录设置到项目根目录下。
2)在web项目中. 表示从tomcat的bin开始,因为java命令从bin目录开始执行。
网友评论