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() {
}
}