目录
1.HttpServletRequest类
1.HttpServletRequest类有什么作用
2.HttpServletRequest类的常用方法
3.如何获取请求参数
4.POST请求的中文乱码解决
5.请求的转发
6.base标签的作用
7.Web中的相对路径和绝对路径
8.web中 / 斜杠的不同意义
2.HttpSerletResponse类
1.HttpServletResponse类的作用
2.两个输出流的说明
3.如何往客户端回传数据
4.响应的乱码解决
5.请求重定向
1.HttpServletRequest类 1.HttpServletRequest类有什么作用
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们通过HttpServiceRequest对象,获取所有请求的信息。
2.HttpServletRequest类的常用方法
(1) getRequestURI() 获取请求的资源路径
(2) getRequestURL() 获取请求的统一资源定位符
(3) getRemoteHost() 获取客户端的ip地址
(4) getHeader() 获取请求头
(5) getParameter() 获取请求参数
(6) getParameterValues() 获取请求的参数(多个值得时候使用)
(7) getMethod() 获取请求的方式GET或POST
(8) setAttribute(key,value) 设置域数据
(9) getAttribute(key) 获取域数据
(10) getRequestDispatcher 获取请求转发对象
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class RequestAPIServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// getRequestURI() 获取请求的资源路径 System.out.println("URI:" + req.getRequestURI());// getRequestURL() 获取请求的统一资源定位符 System.out.println("URL:" + req.getRequestURL());// getRemoteHost() 获取客户端的ip地址 System.out.println("客户端ip地址:" + req.getRemoteHost());// getHeader() 获取请求头 System.out.println("请求头User-Agent:" + req.getHeader("User-Agent"));// getMethod() 获取请求的方式GET或POST System.out.println("请求方式:" + req.getMethod()); }}
<?xml version="1.0" encoding="UTF-8"?> RequestAPIServlet com.atshangma.RequestAPIServlet RequestAPIServlet /requestAPIServlet
3.如何获取请求参数
代码演示:
Title
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;public class ParameterServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getCharacterEncoding(); //获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String[] hobbies = req.getParameterValues("hobby"); System.out.println("用户名:" + username); System.out.println("密码:" + password); System.out.println("兴趣爱好:" + Arrays.asList(hobbies)); }}
4.POST请求的中文乱码解决
代码演示:
Title
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;public class ParameterServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置请求体的字符集为UTF-8,从而解决post请求的中文乱码问题 //setCharacterEncoding方法写在第一行 req.setCharacterEncoding("UTF-8"); //获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String[] hobbies = req.getParameterValues("hobby"); System.out.println("用户名:" + username); System.out.println("密码:" + password); System.out.println("兴趣爱好:" + Arrays.asList(hobbies)); }}
5.请求的转发
什么是请求转发?
请求转发是指,服务器收到请求后,从一个资源跳转到另一个服务器资源的操作叫请求转发。
案例:
前端页面账号密码正确,Servlet1转发到Servlt2
代码演示:
Serlvet1
package com.atshangma;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Servlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取用户名和密码 String username = req.getParameter("username"); String password = req.getParameter("password"); //如果账号密码正确转发 if ("tom".equals(username) && "123456".equals(password)){ System.out.println("/servlet1执行了"); req.setAttribute("state","登陆成功"); //设置转发的路径 RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2"); //转发到/servlet2 requestDispatcher.forward(req,resp); }else { System.out.println("账号或密码错误"); } }}
Servlet2
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Servlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取用户名 String username = req.getParameter("username"); //查看是否登陆成功 Object state = req.getAttribute("state"); System.out.println("/servlet2执行了"); System.out.println(username + state); }}
html代码
Title
xml代码
<?xml version="1.0" encoding="UTF-8"?> Servlet1 com.atshangma.Servlet1 Servlet1 /servlet1 Servlet2 com.atshangma.Servlet2 Servlet2 /servlet2
6.base标签的作用
base标签设置页面相对路径工作时参照的地址
代码演示:
c.html代码
Title 这是a下的b下的c.html页面
跳回首页
index.html代码
首页 这是web下的index.html
a/b/c.html
请求转发:a/b/c.html
java代码
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class ForwardC extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("经过了ForwardC程序"); req.getRequestDispatcher("/a/b/c.html").forward(req,resp); }}
xml代码
<?xml version="1.0" encoding="UTF-8"?> ForwardC com.atshangma.ForwardC ForwardC /forwardC
7.Web中的相对路径和绝对路径
相对路径:
. 表示当前目录
.. 表示上一级目录
资源名 表示当前目录/资源名
绝对路径:
http://ip:port/工程路径/资源路径
8.web中 / 斜杠的不同意义
在web中 / 斜杠是一种绝对路径
/ 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/
1.斜杠
/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径
1./Servlet
2.servletcontext.getRealPath(" / ");
3.request.getRequestDispather(" / “);
特殊情况:response.sendRedirect(" / "); 把斜杠发送给浏览器解析。得到http://ip:port
2.HttpServletResponse类 1.HttpServletResponse类的作用
HttpSerlvetResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpSerlvetRequest表示请求过来的信息,HttpServletResponse表示所有响应信息,我们需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置。
2.两个输出流的说明
字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)
两个流同时只能使用一个
使用了字节流,就不能使用字符流,反之亦然,否则就会报错。
3.如何往客户端回传数据
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class ResponseIOServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //要求:往客户端回传字符串数据 PrintWriter writer = resp.getWriter(); writer.print("response 回传字符串数据!!!"); }}
4.响应的乱码解决
1.解决相应中文乱码方案一(不推荐使用)
2.解决响应中文乱码方案二(推荐)
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class ResponseIOServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(resp.getCharacterEncoding());//默认字符集ISO-8859-1 //设置服务器字符集为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"); //要求:往客户端回传字符串数据 PrintWriter writer = resp.getWriter(); writer.write("response 回传字符串数据!!!"); }}
5.请求重定向
请求重定向,是指客户端给服务器发送请求,然后然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。
1.请求重定向的第一种方案(不推荐使用)
2.请求重定向第二种方案(推荐使用)
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Response1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("response1已废弃,跳转到百度"); //设置响应状态码302,表示重定向// resp.setStatus(302); //设置响应头,说明新地址在哪里// resp.setHeader("Location","http://www.baidu.com"); resp.sendRedirect("http://www.baidu.com"); }}
1.HttpServletRequest类有什么作用
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们通过HttpServiceRequest对象,获取所有请求的信息。
2.HttpServletRequest类的常用方法
(1) getRequestURI() 获取请求的资源路径
(2) getRequestURL() 获取请求的统一资源定位符
(3) getRemoteHost() 获取客户端的ip地址
(4) getHeader() 获取请求头
(5) getParameter() 获取请求参数
(6) getParameterValues() 获取请求的参数(多个值得时候使用)
(7) getMethod() 获取请求的方式GET或POST
(8) setAttribute(key,value) 设置域数据
(9) getAttribute(key) 获取域数据
(10) getRequestDispatcher 获取请求转发对象
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class RequestAPIServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// getRequestURI() 获取请求的资源路径 System.out.println("URI:" + req.getRequestURI());// getRequestURL() 获取请求的统一资源定位符 System.out.println("URL:" + req.getRequestURL());// getRemoteHost() 获取客户端的ip地址 System.out.println("客户端ip地址:" + req.getRemoteHost());// getHeader() 获取请求头 System.out.println("请求头User-Agent:" + req.getHeader("User-Agent"));// getMethod() 获取请求的方式GET或POST System.out.println("请求方式:" + req.getMethod()); }}
<?xml version="1.0" encoding="UTF-8"?>
3.如何获取请求参数
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;public class ParameterServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getCharacterEncoding(); //获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String[] hobbies = req.getParameterValues("hobby"); System.out.println("用户名:" + username); System.out.println("密码:" + password); System.out.println("兴趣爱好:" + Arrays.asList(hobbies)); }}
4.POST请求的中文乱码解决
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;public class ParameterServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置请求体的字符集为UTF-8,从而解决post请求的中文乱码问题 //setCharacterEncoding方法写在第一行 req.setCharacterEncoding("UTF-8"); //获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String[] hobbies = req.getParameterValues("hobby"); System.out.println("用户名:" + username); System.out.println("密码:" + password); System.out.println("兴趣爱好:" + Arrays.asList(hobbies)); }}
5.请求的转发
什么是请求转发?
请求转发是指,服务器收到请求后,从一个资源跳转到另一个服务器资源的操作叫请求转发。
案例:
前端页面账号密码正确,Servlet1转发到Servlt2
代码演示:
Serlvet1
package com.atshangma;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Servlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取用户名和密码 String username = req.getParameter("username"); String password = req.getParameter("password"); //如果账号密码正确转发 if ("tom".equals(username) && "123456".equals(password)){ System.out.println("/servlet1执行了"); req.setAttribute("state","登陆成功"); //设置转发的路径 RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2"); //转发到/servlet2 requestDispatcher.forward(req,resp); }else { System.out.println("账号或密码错误"); } }}
Servlet2
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Servlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取用户名 String username = req.getParameter("username"); //查看是否登陆成功 Object state = req.getAttribute("state"); System.out.println("/servlet2执行了"); System.out.println(username + state); }}
html代码
xml代码
<?xml version="1.0" encoding="UTF-8"?>
6.base标签的作用
base标签设置页面相对路径工作时参照的地址
代码演示:
c.html代码
跳回首页
index.html代码
a/b/c.html
请求转发:a/b/c.html
java代码
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class ForwardC extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("经过了ForwardC程序"); req.getRequestDispatcher("/a/b/c.html").forward(req,resp); }}
xml代码
<?xml version="1.0" encoding="UTF-8"?>
7.Web中的相对路径和绝对路径
相对路径:
. 表示当前目录
.. 表示上一级目录
资源名 表示当前目录/资源名
绝对路径:
http://ip:port/工程路径/资源路径
8.web中 / 斜杠的不同意义
在web中 / 斜杠是一种绝对路径
/ 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/
1.斜杠
/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径
1.
2.servletcontext.getRealPath(" / ");
3.request.getRequestDispather(" / “);
特殊情况:response.sendRedirect(" / "); 把斜杠发送给浏览器解析。得到http://ip:port
1.HttpServletResponse类的作用
HttpSerlvetResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpSerlvetRequest表示请求过来的信息,HttpServletResponse表示所有响应信息,我们需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置。
2.两个输出流的说明
字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)
两个流同时只能使用一个
使用了字节流,就不能使用字符流,反之亦然,否则就会报错。
3.如何往客户端回传数据
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class ResponseIOServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //要求:往客户端回传字符串数据 PrintWriter writer = resp.getWriter(); writer.print("response 回传字符串数据!!!"); }}
4.响应的乱码解决
1.解决相应中文乱码方案一(不推荐使用)
2.解决响应中文乱码方案二(推荐)
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class ResponseIOServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(resp.getCharacterEncoding());//默认字符集ISO-8859-1 //设置服务器字符集为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"); //要求:往客户端回传字符串数据 PrintWriter writer = resp.getWriter(); writer.write("response 回传字符串数据!!!"); }}
5.请求重定向
请求重定向,是指客户端给服务器发送请求,然后然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。
1.请求重定向的第一种方案(不推荐使用)
2.请求重定向第二种方案(推荐使用)
代码演示:
package com.atshangma;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Response1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("response1已废弃,跳转到百度"); //设置响应状态码302,表示重定向// resp.setStatus(302); //设置响应头,说明新地址在哪里// resp.setHeader("Location","http://www.baidu.com"); resp.sendRedirect("http://www.baidu.com"); }}