Serclet 是一个容器接口,可以实现Serclet接口来达到简单的Web和Tomcat之间的交互
1,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"> <!-- Web应用的初始化参数,相当于全局的,任何都可以用 --> <context-param> <param-name>driver</param-name> <param-value>oracle.jdbc.DriverManager</param-value> </context-param> <!-- 配置和映射Servelt ,只有当前helloServelt能获取 --> <servlet> <!-- 注册的名字 --> <servlet-name>helloServelt</servlet-name> <!-- 类的权限类名 --> <servlet-class>servlet.HelloServlet</servlet-class> <!-- 配置servlet的初始化参数,此节点必须放在 load-on-startup节点之前 --> <init-param> <param-name>user</param-name> <param-value>huhu</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>1234</param-value> </init-param> <!-- 可指定servlet被创建的时机 :为负数则在第一次访问时创建,为0或正数则在servlet加载进servlet容器时创建,且越小先被创建 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <!-- 跟 servlet 节点的servlet-name节点的text一致 --> <servlet-name>helloServelt</servlet-name> <!-- 映射具体的访问路径 /代表访问当前Web应用的根目录 --> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
2,Servlet实现类常用的方法及说明
package servlet; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Enumeration; import java.util.Map; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; /** * Servlet的实现以及一些常用方法注释 * * @author SmartTiger * @created 2018年10月15日 下午4:33:31 */ public class HelloServlet implements Servlet { // 当前Web应用关闭时启动的方法 @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } // 初始化配置信息 @Override public void init(ServletConfig servletConfig) throws ServletException { // 知道名字的情况下求值 String initParameter = servletConfig.getInitParameter("user"); String initParameter2 = servletConfig.getInitParameter("password"); System.out.println("user:" + initParameter + " " + "password:" + initParameter2); // 不知道名字的情况下,求所有,然后遍历 Enumeration<String> initParameterNames = servletConfig.getInitParameterNames(); while (initParameterNames.hasMoreElements()) { String name = initParameterNames.nextElement(); String value = servletConfig.getInitParameter(name); System.out.println("name:" + name + " " + "value:" + value); } // 获取servletContext(全局初始化信息) ServletContext servletContext = servletConfig.getServletContext(); // 1.获取当前Web应用的初始化信息 String driver = servletContext.getInitParameter("driver"); System.out.println("driver:" + driver); // 2.获取当前Web应用下在服务器上的文件的绝对路径 String realPath = servletContext.getRealPath("/web.xml"); System.out.println("realPath:" + realPath); // 3.获取当前Web应用下的应用的名称 String contextPath = servletContext.getContextPath(); System.out.println("contextPath:" + contextPath); // 4.获取当前Web应用下文件的输入流(/WEB-INF/classes) InputStream resourceAsStream = servletContext.getResourceAsStream("/WEB-INF/classes/lianxi.properties"); System.out.println("resourceAsStream:" + resourceAsStream); } // 每一次请求时调用的方法 @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // 设置编码格式 request.setCharacterEncoding("utf-8"); // 获取请求内容(request相关的方法) // 1,在知道name的情况下获取value String parameter = request.getParameter("名字"); System.out.println(parameter); // 2,不知道名字的情况下:先求名字的集合 Enumeration<String> parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()) { String name = parameterNames.nextElement(); System.out.println(name + " " + request.getParameter(name)); } // 获取该name下的value集合:例如html中的多选框 String[] parameterValues = request.getParameterValues("interesting"); for (int i = 1; i < parameterValues.length; i++) { System.out.print(" " + parameterValues[i]); } // 获取值的键值对,键为名字,值为值的数组 Map<String, String[]> map = request.getParameterMap(); System.out.println(Arrays.toString(map.get("姓名"))); System.out.println(Arrays.toString(map.get("熟悉技能"))); HttpServletRequest httpServletRequest = (HttpServletRequest) request; // 获取请求URL System.out.println(httpServletRequest.getRequestURL()); // 获取请求方式 System.out.println(httpServletRequest.getMethod()); // 获取GET请求方式后边的参数 System.out.println(httpServletRequest.getQueryString()); // 获取请求url-pattern System.out.println(httpServletRequest.getServletPath()); // response:先设置响应编码格式(respose相关的方法) response.setCharacterEncoding("GBK"); // 设置响应的内容类型:以Word为例 response.setContentType("application/x-abiword"); // 获取响应打印流 PrintWriter writer = response.getWriter(); writer.println("你好"); } public HelloServlet() { } }