一、ServletConfig
在Servlet的配置文件web.xml中,可以使用一个或多个标签为servlet配置一些初始化参数。
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>HelloServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
</servlet>
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,我们通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
1、可以获取Servlet程序的别名servlet-name的值
System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
// 2、获取初始化参数init-param
System.out.println("初始化参数username的值是;" + servletConfig.getInitParameter("username"));
// 3、获取ServletContext对象
System.out.println(servletConfig.getServletContext());
二、ServletContext对象
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
在web.xml文件中使用<context-param>标签配置WEB应用的初始化参数,如下所示:
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
1、获取web.xml中配置的上下文参数context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param参数username的值是:" + username);
2、获取当前的工程路径,格式: /工程路径
System.out.println( "当前工程路径:" + context.getContextPath() );
// 3、获取工程部署后在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的web目录<br/>
*/
System.out.println("工程部署的路径是:" + context.getRealPath("/"));
System.out.println("工程下css目录的绝对路径是:" + context.getRealPath("/css"));
System.out.println("工程下imgs目录1.jpg的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
context.setAttribute("key1", "value1");
System.out.println("Context1 中获取域数据key1的值是:"+ context.getAttribute("key1"));
三、HttpServletRequest对象和HttpServletResponse对象
// i.getRequestURI() 获取请求的资源路径
System.out.println("URI => " + request.getRequestURI());///contextService
// ii.getRequestURL() 获取请求的统一资源定位符(绝对路径)
System.out.println("URL => " + request.getRequestURL());//http://localhost:8080/contextService
// iii.getRemoteHost() 获取客户端的ip地址
System.out.println("客户端 ip地址 => " + request.getRemoteHost());
// iv.getHeader() 获取请求头
System.out.println("请求头User-Agent ==>> " + request.getHeader("User-Agent"));
// vii.getMethod() 获取请求的方式GET或POST
System.out.println( "请求的方式 ==>> " + request.getMethod() );//GET
// 获取请求参数
String username1 = request.getParameter("username");
String[] hobby = request.getParameterValues("hobby");
req.setAttribute("key1","柜台1的章");
/**
* 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到IDEA代码的web目录<br/>
*
*/
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2").forward(req,resp);
resp.sendRedirect("http://localhost:8080");
resp.getWriter().write("response2's result!");
四、cookie对象
//1 创建Cookie对象
Cookie cookie = new Cookie("key4", "value4");
cookie.setMaxAge(60 * 60); // 设置Cookie一小时之后被删除。无效
//2 通知客户端保存Cookie
resp.addCookie(cookie);
Cookie[] cookies = req.getCookies();
五、 session对象
// 先获取Session对象
HttpSession session = req.getSession();
// 设置当前Session3秒后超时
session.setMaxInactiveInterval(3);
session().setAttribute("key1", "value1");
session.getAttribute("key");