//1、编写一个类去实现 Servlet 接口
public class HelloServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } //2、实现 service 方法,处理请求,并响应数据 @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("Hello Servlet "); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
<!-- 3、到 web.xml 中去配置 servlet 程序的访问地址 -->
<!-- 给Tomcat 配置servlet程序 --> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>at.guigu.com.servlet.HelloServlet</servlet-class> </servlet> <!-- 给servlet配置访问地址 --> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
c. servlet的生命周期
1、执行 Servlet 构造器方法
public class HelloServlet2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("hello2 的post请求"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("hello2 的get请求"); } }
<!-- 配置servlet --> <servlet> <servlet-name>HelloServlet2</servlet-name> <servlet-class>at.guigu.com.servlet.HelloServlet2</servlet-class> </servlet> <!-- 给servlet配置访问地址 --> <servlet-mapping> <servlet-name>HelloServlet2</servlet-name> <url-pattern>/hello2</url-pattern> </servlet-mapping>
e. Servlet 类的继承体系
2. ServletConfig 类
@Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("2 init 初始化方法"); // 1、可以获取 Servlet 程序的别名 servlet-name 的值 System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName()); // 2、获取初始化参数 init-param System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username")); System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url")); // 3、获取 ServletContext 对象 System.out.println(servletConfig.getServletContext()); }
// 1、获取 web.xml 中配置的上下文参数 context-param ServletContext context = getServletConfig().getServletContext(); // 2、获取当前的工程路径,格式: /工程路径 System.out.println( "当前工程路径:" + context.getContextPath() ); // 3、获取工程部署后在服务器硬盘上的绝对路径 // 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录<br/> System.out.println("工程部署的路径是:" + context.getRealPath("/"));
<!--context-param 是上下文参数(它属于整个 web 工程)--> <context-param> <param-name>username</param-name> <param-value>context</param-value> </context-param> <!--context-param 是上下文参数(它属于整个 web 工程)--> <context-param> <param-name>password</param-name> <param-value>root</param-value> </context-param>
4. HttpServletRequest 类
4.1 HttpServletRequest 的作用
然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。
// 获取请求参数 String username = req.getParameter("username"); //1 先以 iso8859-1 进行编码 //2 再以 utf-8 进行解码 username = new String(username.getBytes("iso-8859-1"), "UTF-8");
// 设置请求体的字符集为 UTF-8,从而解决 post 请求的中文乱码问题
req.setCharacterEncoding("UTF-8");
4.4 请求的转发
RequestDispatcher requestDispatcher =req.getRequestDispatcher("/servlet2");
requestDispatcher.forward(req,resp);
4.5 base标签的作用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--base 标签设置页面相对路径工作时参照的地址 href 属性就是参数的地址值 -->
<base href="http://localhost:8080/07_servlet/a/b/">
</head>
<body>
这是 a 下的 b 下的 c.html 页面<br/>
<a href="../../index.html">跳回首页</a><br/>
</body>
</html>
4.6 web 中 / 斜杠的不同意义
PrintWriter writer = resp.getWriter();
writer.write("response‘s content!!!");
5.4 响应的乱码解决
// 设置服务器字符集为 UTF-8 resp.setCharacterEncoding("UTF-8"); // 通过响应头,设置浏览器也使用 UTF-8 字符集
resp.setHeader("Content-Type", "text/html; charset=UTF-8");
// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头 // 此方法一定要在获取流对象之前调用才有效 resp.setContentType("text/html; charset=UTF-8");
5.5 请求重定向
resp.sendRedirect("http://localhost:8080");
原文:https://www.cnblogs.com/Anonymity-zhang/p/14607220.html