1 //建立一个 HelloServlet 类并实现 Servlet 接口
2 public class HelloServlet implements Servlet {
3
4 // Tomcat 中止服务时 Servlet 的销毁方法
5 @Override 6 public void destroy() { 7 System.out.println("destroy....."); 8 } 9 10 @Override 11 public ServletConfig getServletConfig() { 12 System.out.println("getServletConfig"); 13 return null; 14 } 15 16 @Override 17 public String getServletInfo() { 18 System.out.println("getServletInfo"); 19 return null; 20 } 21 22 // Servlet 加载时 初始化方法 23 @Override 24 public void init(ServletConfig servletConfig) throws ServletException { 25 System.out.println("init"); 26 } 27 28 // servlet 运行时的方法 每次请求调用 29 @Override 30 public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { 31 System.out.println("service"); 32 } 33 34 // HelloServlet 实现类的构造方法 加载时调用 35 public HelloServlet() { 36 System.out.println("HelloServlet's constructor"); 37 } 38 39 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 id="WebApp_ID" version="3.1"> 6 7 <!-- 配置和映射 Servlet --> 8 <servlet> 9 <!-- Servlet 注册的名字 --> 10 <servlet-name>HelloServlet_java</servlet-name> 11 <!-- Servlet 的全类名 --> 12 <servlet-class>com.panku.javaWeb1.HelloServlet</servlet-class> 13 <!-- 能够指定 Servlet 被建立的时机 --> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 17 <servlet-mapping> 18 <!-- 须要和某一个 Servlet 节点的 servlet-name 子节点的文本节点一致 --> 19 <servlet-name>HelloServlet_java</servlet-name> 20 <!-- 映射的具体访问路径: / 表明当前 Web 应用的根目录. --> 21 <url-pattern>/hello</url-pattern> 22 </servlet-mapping> 23 24 </web-app>
1). 构造器: 只被调用一次. 只有第一次请求 Servlet 时, 建立 Servlet 的实例. 调用构造器. 这说明 Serlvet 的单实例的!java
2). init 方法: 只被调用一次. 在建立好实例后当即被调用. 用于初始化当前 Servlet. web
3). service: 被屡次调用. 每次请求都会调用 service 方法. 实际用于响应请求的. 数组
4). destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源.服务器
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 id="WebApp_ID" version="3.1"> 6 7 <!-- 配置和映射 Servlet --> 8 <servlet> 9 <!-- Servlet 注册的名字 --> 10 <servlet-name>HelloServlet_java</servlet-name> 11 <!-- Servlet 的全类名 --> 12 <servlet-class>com.panku.javaWeb1.HelloServlet</servlet-class> 13 14 <!-- 配置 Servlet 的初始化参数 --> 15 <init-param> 16 <!-- 参数名 --> 17 <param-name>user</param-name> 18 <!-- 参数值 --> 19 <param-value>root</param-value> 20 </init-param> 21 22 <init-param> 23 <param-name>password</param-name> 24 <param-value>123456</param-value> 25 </init-param> 26 27 <!-- 能够指定 Servlet 被建立的时机 --> 28 <load-on-startup>1</load-on-startup> 29 </servlet> 30 31 <servlet-mapping> 32 <!-- 须要和某一个 Servlet 节点的 servlet-name 子节点的文本节点一致 --> 33 <servlet-name>HelloServlet_java</servlet-name> 34 <!-- 映射的具体访问路径: / 表明当前 Web 应用的根目录. --> 35 <url-pattern>/hello</url-pattern> 36 </servlet-mapping> 37 38 </web-app>
1 // Servlet 加载时 初始化方法
2 @Override
3 public void init(ServletConfig servletConfig) throws ServletException { 4 System.out.println("init"); 5 6 // 获取初始化参数值 7 String user = servletConfig.getInitParameter("user"); 8 System.out.println("user:" + user); 9 10 // 获取初始化参数名和值 11 Enumeration<String> names = servletConfig.getInitParameterNames(); 12 while (names.hasMoreElements()) { 13 String name = names.nextElement(); 14 String value = servletConfig.getInitParameter(name); 15 System.out.println("^^name:" + name + ":" + value); 16 } 17 18 // 获取 Servlet 注册名称 19 String servletName = servletConfig.getServletName(); 20 System.out.println(servletName); 21 }
1 // Servlet 加载时 初始化方法
2 @Override
3 public void init(ServletConfig servletConfig) throws ServletException { 4 System.out.println("init"); 5 6 // WEB初始化参数: 能够为全部的 Servlet 所获取, 而 Servlet 的初始化参数只用那个 Serlvet 能够获取. 7 // 获取 ServletContext 对象 8 ServletContext servletContext = servletConfig.getServletContext(); 9 10 // 获取当前 WEB 初始化参数值 11 String driver = servletContext.getInitParameter("driver"); 12 System.out.println("driver:" + driver); 13 14 // 获取当前 WEB 初始化参数名和值 15 Enumeration<String> name2 = servletContext.getInitParameterNames(); 16 while (name2.hasMoreElements()) { 17 String name = name2.nextElement(); 18 String value = servletContext.getInitParameter(name); 19 System.out.println("-->" + name + ":" + value); 20 } 21 22 // 获取当前 WEB 应用的某一个文件在服务器上的绝对路径, 而不是不部署前的路径 23 String realPath = servletContext.getRealPath("/111.txt"); 24 // 不是 E:\eclipse\workspace\JavaWeb\WebContent\111.txt 25 System.out.println(realPath); 26 27 // 获取当前 WEB 应用的名称 28 String contextPath = servletContext.getContextPath(); 29 System.out.println(contextPath); 30 31 // 获取一个文件的输入流(部署前的路径) 32 try { 33 ClassLoader classLoader = getClass().getClassLoader(); 34 InputStream is = classLoader.getResourceAsStream("jdbc.properties"); 35 System.out.println("1." + is); 36 } catch (Exception e) { 37 e.printStackTrace(); 38 } 39 40 // 获取一个文件的输入流(服务器上的路径) 41 try { 42 InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties"); 43 System.out.println("2." + is2); 44 } catch (Exception e) { 45 e.printStackTrace(); 46 } 47 }
1 // 用于应答请求: 由于每次请求都会调用 service() 方法
2 // ServletRequest: 封装了请求信息, 能够从中获取到任何的请求信息
3 // ServletResponse: 封装了响应信息, 若是想给用户什么响应, 具体可使用该接口的方法实现
4 @Override
5 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 6 System.out.println("请求成功......."); 7 System.out.println(request); 8 9 // String getParameter(String name): 根据请求参数的名字, 返回参数值. 10 String user = request.getParameter("user"); 11 String password = request.getParameter("password"); 12 System.out.println(user + "," + password); 13 14 // getParameter()方法只能获取一个参数值 15 String interesting = request.getParameter("interesting"); 16 System.out.println(interesting); 17 18 // String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组 19 String[] interestings = request.getParameterValues("interesting"); 20 for (String string : interestings) { 21 System.out.println("-->" + string); 22 } 23 24 // Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,相似于 25 // ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法. 26 Enumeration<String> names = request.getParameterNames(); 27 while (names.hasMoreElements()) { 28 String name = names.nextElement(); 29 String valuee = request.getParameter(name); 30 System.out.println("==>" + name + ", " + valuee); 31 } 32 33 // Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型. 34 Map<String, String[]> map = request.getParameterMap(); 35 for (Map.Entry<String, String[]> entry : map.entrySet()) { 36 System.out.println("**" + entry.getKey() + ":" + Arrays.asList(entry.getValue())); 37 } 38 }
1 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
2 System.out.println("请求成功......."); 3 System.out.println(request); 4 // 获取请求的 URI 5 HttpServletRequest httpServletRequest = (HttpServletRequest) request; 6 String requestURI = httpServletRequest.getRequestURI(); 7 System.out.println(requestURI); 8 9 // 获取请求方式 10 String method = httpServletRequest.getMethod(); 11 System.out.println(method); 12 13 // 如果一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串. 14 String queryString = httpServletRequest.getQueryString(); 15 System.out.println(queryString); 16 17 // 获取请求的 Serlvet 的映射路径 18 String servletPath = httpServletRequest.getServletPath(); 19 System.out.println(servletPath); 20 }
1 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
2 System.out.println("请求成功......."); 3 System.out.println(request); 4 // 设置响应方式 5 response.setContentType("application/msword"); 6 7 // 在页面响应一个内容 8 PrintWriter out = response.getWriter(); 9 out.println("HelloWorld..."); 10 }
1 public abstract class MyGenericServlet implements Servlet, ServletConfig { 2 3 // 如下方法为 Servlet 接口的方法 4 @Override 5 public void destroy() { 6 } 7 8 @Override 9 public ServletConfig getServletConfig() { 10 return servletconfig; 11 } 12 13 @Override 14 public String getServletInfo() { 15 return null; 16 } 17 18 private ServletConfig servletconfig; 19 20 @Override 21 public void init(ServletConfig arg0) throws ServletException { 22 this.servletconfig = arg0; 23 init(); 24 } 25 26 public void init() throws ServletException { 27 } 28 29 @Override 30 public abstract void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException; 31 32 // 如下方法为 ServletConfig 接口的方法 33 @Override 34 public String getInitParameter(String arg0) { 35 return servletconfig.getInitParameter(arg0); 36 } 37 38 @Override 39 public Enumeration<String> getInitParameterNames() { 40 return servletconfig.getInitParameterNames(); 41 } 42 43 @Override 44 public ServletContext getServletContext() { 45 return servletconfig.getServletContext(); 46 } 47 48 @Override 49 public String getServletName() { 50 return servletconfig.getServletName(); 51 } 52 53 }
1 public class MyHttpServlet extends MyGenericServlet { 2 3 @Override 4 public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { 5 6 if (arg0 instanceof HttpServletRequest) { 7 HttpServletRequest request = (HttpServletRequest) arg0; 8 9 if (arg1 instanceof HttpServletResponse) { 10 HttpServletResponse response = (HttpServletResponse) arg1; 11 12 service(request, response); 13 } 14 } 15 } 16 17 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 18 19 // 1.获取请求方式 20 String method = request.getMethod(); 21 22 // 2.根据请求方式再调用对应的处理方法 23 if ("get".equalsIgnoreCase(method)) { 24 doGet(request, response); 25 } else if ("set".equalsIgnoreCase(method)) { 26 doPost(request, response); 27 } 28 } 29 30 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 32 } 33 34 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 35 36 } 37 38 }