1.ServletConfig
ServletConfig:代表当前Servlet在web.xml中的配置信息
- String getServletName() -- 获取当前Servlet在web.xml中配置的名字
- String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
- Enumeration getInitParameterNames() -- 获取当前Servlet所有初始化参数的名字组成的枚举
- ServletContext getServletContext() -- 获取代表当前web应用的ServletContext对象
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中
配置Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Servlet_ServletConfig</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>AchieveParam</servlet-name> <servlet-class>com.servlets.AchieveParamServlet</servlet-class> <init-param> <param-name>userName</param-name> <param-value>jtx</param-value> </init-param> <init-param> <param-name>userPwd</param-name> <param-value>123456</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AchieveParam</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
Servlet处理类
package com.servlets; import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 可以实现Servlet接口 * * @author yyx 2019年3月13日 */ public class AchieveParamServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置输出内容的编码方式 response.setCharacterEncoding("UTF-8"); // 获得Session HttpSession httpSession = request.getSession(); // 获得ServletConfig对象 ServletConfig servletConfig = this.getServletConfig(); String userName = servletConfig.getInitParameter("userName"); String userPwd = servletConfig.getInitParameter("userPwd"); httpSession.setAttribute("userName", userName); httpSession.setAttribute("userPwd", userPwd); /* * getServletName()获取当前Servlet在web.xml中配置的名字 * getServletContext()获取代表当前web应用的ServletContext对象 * getInitParameterNames()获取当前Servlet所有初始化参数的名字组成的枚举 */ System.out.println(servletConfig.getServletName()); ServletContext sContext = servletConfig.getServletContext(); Enumeration<String> enumeration = servletConfig.getInitParameterNames(); while (enumeration.hasMoreElements()) { String name= enumeration.nextElement();
String value = servletConfig.getInitParameter(name); System.out.println(value); } // 转发 request.getRequestDispatcher("/success.jsp").forward(request, response); } @Override public void destroy() { super.destroy(); System.out.println("Servlet销毁"); } @Override public void init(ServletConfig config) throws ServletException { super.init(config); System.out.println("Servlet初始化"); } }
JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="${pageContext.request.contextPath}/achieveparamservlet.do">获取参数</a> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h2>${ userName}</h2> <h2>${ userPwd}</h2> </body> </html>
2.ServletContext
ServletContext官方叫servlet上下文
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用
- 是一个域对象
- 可以读取全局配置参数
- 可以搜索当前工程目录下面的资源文件
- 可以获取当前工程名字
配置Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Servlet_ServletConfig</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>company</param-name> <param-value>Alibaba</param-value> </context-param> <servlet> <servlet-name>AchieveParam</servlet-name> <servlet-class>com.servlets.AchieveParamServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AchieveParam</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
Servlet处理类
package com.servlets; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.Properties; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 可以实现Servlet接口 * * @author yyx 2019年3月13日 */ public class AchieveParamServlet extends HttpServlet { private static final long serialVersionUID = 1L; private int count; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置输出内容的编码方式 response.setCharacterEncoding("UTF-8"); // 获得Session HttpSession httpSession = request.getSession(); // 获得ServletContext对象,读取全局参数 ServletContext servletContext = this.getServletContext(); String company = servletContext.getInitParameter("company"); httpSession.setAttribute("company", company); Enumeration<String> names = servletContext.getInitParameterNames(); while (names.hasMoreElements()) { String name = names.nextElement(); String value = servletContext.getInitParameter(name); System.out.println(value); } // web应用范围内共享数据,每调用一次方法都会加1 servletContext.setAttribute("count", count++); // 读取配置文件 InputStream is = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties"); Properties properties = new Properties(); properties.load(is); System.out.println(properties.getProperty("driverClass")); System.out.println(properties.getProperty("url")); is.close(); // 获取工程名称 System.out.println(servletContext.getContextPath()); // 转发 request.getRequestDispatcher("/success.jsp").forward(request, response); } @Override public void destroy() { super.destroy(); System.out.println("Servlet销毁"); } @Override public void init(ServletConfig config) throws ServletException { super.init(config); System.out.println("Servlet初始化"); } }
JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="${pageContext.request.contextPath}/achieveparamservlet.do">获取参数</a> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h2>${ company}</h2> <h2>${ count}</h2> </body> </html>