<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--配置servlet的别名,同时在servlet-class配置项中添加servlet类的完全限定名 包名+类名--> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>com.hailu.MyServlet</servlet-class> </servlet> <!--配置servlet跟请求的映射关系--> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/first</url-pattern> </servlet-mapping> <servlet> <servlet-name>second</servlet-name> <servlet-class>com.hailu.MyServlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>second</servlet-name> <url-pattern>/second</url-pattern> </servlet-mapping> <servlet> <servlet-name>life</servlet-name> <servlet-class>com.hailu.ServletLife</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>life</servlet-name> <url-pattern>/life</url-pattern> </servlet-mapping> <servlet> <servlet-name>MethodServlet</servlet-name> <servlet-class>com.hailu.MethodServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MethodServlet</servlet-name> <url-pattern>/method</url-pattern> </servlet-mapping> <servlet> <servlet-name>request</servlet-name> <servlet-class>com.hailu.RequestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>request</servlet-name> <url-pattern>/request</url-pattern> </servlet-mapping> </web-app>
package com.hailu; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Servlet类中可以有service方法, * 用来接受get或者post请求 * 如果service和doGet或者doPost同时存在,那么默认会调用service方法 * 如果同时又server,doGet和doPost方法,在service方法的实现中调用了super.service()会根据请求的方式跳转到doGet或者doPost * doget方法: * 用来接受get请求 * doPost方法: * 用来接受post请求 * * 总结: * 在编写servlet类的时候,不需要重新实现service方法,只需要重写doGet和doPost方法即可,用来接受post或者get请求 * */ public class MethodServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("我是post"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(10/0); System.out.println("我是get"); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("我是service"); super.service(req, resp); } }
package com.hailu; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration; /** * HttpServletRequest用来存放客户端请求的参数 * 请求行 * 请求头 * 请求体 * * */ public class RequestServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("post请求"); this.doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get请求"); //获取请求行数据 //获取请求中的请求方式 String method = request.getMethod(); System.out.println(method); //获取请求的完整地址 StringBuffer url = request.getRequestURL(); System.out.println(url); //获取请求中的资源路径 String uri = request.getRequestURI(); System.out.println(uri); //获取请求中的协议 String schema = request.getScheme(); System.out.println(schema); //获取请求头数据 //根据key获取value的值 String userAgent = request.getHeader("User-Agent"); System.out.println(userAgent); //获取请求头信息中的所有key的枚举对象 Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()){ String key = headerNames.nextElement(); String value = request.getHeader(key); // System.out.println(headerNames.nextElement()); System.out.println(key+":"+value); } //获取用户请求数据 //无论请求方式是post还是get,获取用户数据的方式不变 String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); String fav = request.getParameter("fav"); System.out.println(name+":"+pwd+":"+fav); //获取用户数据中的所有key Enumeration<String> parameterNames = request.getParameterNames(); while(parameterNames.hasMoreElements()){ System.out.println(parameterNames.nextElement()); } //获取相同key的多个数据值,例如checkbox String[] parameterValues = request.getParameterValues("fav"); for (String str:parameterValues) { System.out.println("fav:"+str); } //其他常用方法 //获取远程客户端的地址 String remoteAddress = request.getRemoteAddr(); //获取远程客户端的主机名称 String remoteHost = request.getRemoteHost(); //获取远程客户端的端口号 int remotePort = request.getRemotePort(); System.out.println(remoteAddress+":"+remoteHost+":"+remotePort); String localAddr = request.getLocalAddr(); String localName = request.getLocalName(); System.out.println(localAddr+":"+localName); } }
package com.hailu; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * * response:表示服务端返回数据的响应对象 * 响应头: * 响应行: * 响应体: * * * */ public class ResponseServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("this is post"); this.doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("this is get"); //设置响应头,按照key-value键值对的方式来设置,如果存在相同的key,会把value的值覆盖 response.setHeader("hehe","haha"); response.setHeader("hehe","heihei"); //设置响应头,按照key-value键值对的方式来设置,如果存在相同的key,不会覆盖值 response.addHeader("beijing","shanghai"); response.addHeader("beijing","guangzhou"); //服务端返回的对象数据要按照一定的格式要求进行渲染,只有是html格式才会识别标签 // response.setHeader("Content-Type","text/html"); response.setHeader("Content-Type","text/plain"); // response.setContentType("text/html"); //设置响应状态码 // response.sendError(404,"not found"); response.getWriter().write("<b>java is easy</b>"); } }
package com.hailu; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "ServletLife") public class ServletLife extends HttpServlet { /** * 完成servlet对象的初始化工作 * 在servlet接受到第一次请求的时候创建对象 * 生命周期:从第一次接受请求开始到服务器关系之后销毁 * 当在web.xml文件中配置了<load-on-startup>1</load-on-startup>,在开启tomcat的时候就会创建servlet对象,中间的数值表示优先级的意思 * @throws ServletException */ @Override public void init() throws ServletException { System.out.println("init"); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("servlet life"); System.out.println("learn servlet life"); System.out.println(req.getParameter("name")); } @Override public void destroy() { System.out.println("我被销毁了"); } }
package com.hailu; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 处理乱码问题的方式 * 1、get请求 * 1、获取字符串之后使用new String(name.getBytes("iso-8859-1"),"utf-8") * 2、设置request的编码格式,同时在server.xml中添加useBodyEncodingForURI=true的属性 * 3、在server.xml中添加URIEncoding="utf-8" * 2、post请求 * 1、request.setCharacterEncoing("utf-8") * 3、response响应编码 * response.setCharacterEncoding("gbk"); * * * * */ public class CharsetServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException { System.out.println("post"); request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); System.out.println(name); response.setCharacterEncoding("gbk"); response.getWriter().write("欢迎你!"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException { System.out.println("get"); //设置请求的编码格式 // request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); // System.out.println(new String(name.getBytes("iso-8859-1"),"utf-8")); System.out.println(name); } }