Servlet2

网友投稿 250 2022-11-23

Servlet2

Servlet2

​​1.HttpServletRequest类​​

​​a)HttpServletRequest类有什么作用。​​​​b)HttpServletRequest类的常用方法​​​​c) 如何获取请求参数​​​​d) POST请求的中文乱码解决​​​​e) 请求的转发​​​​f) base 标签的作用​​​​g) Web中的相对路径和绝对路径​​​​h) web 中 / 斜杠的不同意义​​

​​2. HttpServletResponse类​​

​​a)HttpServletResponse类的作用​​​​b)两个输出流的说明。​​​​c) 如何往客户端回传数据​​​​d)响应的乱码解决​​​​e) 请求重定向​​

1.HttpServletRequest类

a)HttpServletRequest类有什么作用。

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。 然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpSerdetRequest对象,获取到所有请求的信息。

b)HttpServletRequest类的常用方法

i. getRequestURI() 获取请求的资源路径 ii. getRequestURL() 获取请求的统一资源定位符(绝对路径) iii. getRemoteHost() 获取客户端的ip地址 iv. getHeader() 获取请求头 v. getParameter() 获取请求的参数 vi. getParameterValues() 获取请求的参数(多个值的时候使用) vii. getMethod() 获取请求的方式GET或POST viii. setAttribute(key, value);设置域数据 ix. getAttribute(key); 获取域数据 x. getRequestDispatcher() 获取请求转发对象

c) 如何获取请求参数

d) POST请求的中文乱码解决

演示

创建web模块07_servlet

创建Tomcat实例

application context:07_servlet

创建包和类

RequestAPIServlet

package com.servlet;import javax.servlet.ServletException;import javax.servlet.javax.servlet.javax.servlet.java.io.IOException;public class RequestAPIServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// i. getRequestURI() 获取请求的资源路径 System.out.println("URI =>"+req.getRequestURI());// ii. getRequestURL() 获取请求的统一资源定位符(绝对路径) System.out.println("URL =>"+req.getRequestURL());// iii. getRemoteHost() 获取客户端的ip地址 /** * 在IDEA中,使用localhost访问时,得到的客户端ip地址是===>>>0:0:0:0:0:0:0:1 * 在IDEA中,使用127.0.0.1访问时,得到的客户端ip地址是===>>>127.0.0.1 * 在IDEA中,使用 真实ip 访问时,得到的客户端ip地址是===>>>真实的客户端ip */ System.out.println("客户端 ip地址"+req.getRemoteHost());// iv. getHeader() 获取请求头 System.out.println("请求头User-Agent==>>"+req.getHeader("User-Agent"));// vii. getMethod() 获取请求的方式GET或POST System.out.println("请求的方式===>>"+req.getMethod()); }}

ParameterServlet

package com.servlet;import javax.servlet.ServletException;import javax.servlet.javax.servlet.javax.servlet.java.io.IOException;public class RequestAPIServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// i. getRequestURI() 获取请求的资源路径 System.out.println("URI =>"+req.getRequestURI());// ii. getRequestURL() 获取请求的统一资源定位符(绝对路径) System.out.println("URL =>"+req.getRequestURL());// iii. getRemoteHost() 获取客户端的ip地址 /** * 在IDEA中,使用localhost访问时,得到的客户端ip地址是===>>>0:0:0:0:0:0:0:1 * 在IDEA中,使用127.0.0.1访问时,得到的客户端ip地址是===>>>127.0.0.1 * 在IDEA中,使用 真实ip 访问时,得到的客户端ip地址是===>>>真实的客户端ip */ System.out.println("客户端 ip地址"+req.getRemoteHost());// iv. getHeader() 获取请求头 System.out.println("请求头User-Agent==>>"+req.getHeader("User-Agent"));// vii. getMethod() 获取请求的方式GET或POST System.out.println("请求的方式===>>"+req.getMethod()); }}

form.html

Title

用户名:
密码:
兴趣爱好:C++ java JavaScript

web.xml

RequestAPIServlet com.servlet.RequestAPIServlet RequestAPIServlet /requestAPIServlet ParameterServlet com.servlet.ParameterServlet ParameterServlet /parameterServlet

e) 请求的转发

什么是请求的转发?

请求转发是指,服务器收到请求后,从一次资源跳转到另一个服务器资源的操作叫请求转发。

代码

Servlet1

package com.servlet;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.javax.servlet.javax.servlet.java.io.IOException;public class Servlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求的参数(办事的材料) String username = req.getParameter("username"); System.out.println("在Servlet1(柜台1)中查看参数(材料)"+username); //改材料盖一个章,并传递到Servlet2(柜台2)去查看 req.setAttribute("key1","柜台1的章"); //问路:Servlet2(柜台2)怎么走 /** * 请求转发必须要以斜杠打头,/ 斜杠表示地址为: */ RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2"); //走向Servlet2(柜台2) requestDispatcher.forward(req,resp); }}

Servlet2

package com.servlet;import javax.servlet.ServletException;import javax.servlet.javax.servlet.javax.servlet.java.io.IOException;public class Servlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求的参数(办事的材料) String username = req.getParameter("username"); System.out.println("在Servlet1(柜台1)中查看参数(材料)"+username); //查看 柜台1 是否有盖章 Object key1 = req.getAttribute("key1"); System.out.println("柜台1 是否有盖章:"+key1); //处理自己的业务 System.out.println("Servlet2处理自己的业务"); }}

web.xml

Servlet1 com.servlet.Servlet1 Servlet1 /servlet1 Servlet2 com.servlet.Servlet2 Servlet2 /servlet2

f) base 标签的作用

演示 在web下创建a/b/c.htmlc.html

Title 跳回首页

在web下创建index.htmlindex.html

首页 这是web下的index.html
a/b/c.html

在web.xml配置

ForwardC com.servlet.ForwardC ForwardC /forwardC

g) Web中的相对路径和绝对路径

在javaWeb中,路径分为相对路径和绝对路径两种: 相对路径是:.      表示当前目录. .    表示上一级目录 资源名 表示当前目录/资源名 绝对路径: htp://ip:port/工程路径/资源路径

h) web 中 / 斜杠的不同意义

在web中 / 斜杠是一种绝对路径。 /斜杠如果被浏览器解析,得到的地址是href="/">斜杠

/斜杠如果被服务器解析,得到的地址是:servletContext.getRealPath("/");3、 request.getRequestDispatcher("/");

特殊情况:

response. sendRedict("/");

把斜杠发送给浏览器解析。得到HttpServletResponse类

a)HttpServletResponse类的作用

HttpServetResponse类和HtpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传 递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置

b)两个输出流的说明。

字节流 getOutputstream(); 常用于下载(传递二进制数据)

字符流 getWriter(); 常用于回传字符串(常用)

两个流同时只能使用一个。

使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。

c) 如何往客户端回传数据

d)响应的乱码解决

要求:往客户端回传数据

package com.servlet;import javax.servlet.ServletException;import javax.servlet.javax.servlet.javax.servlet.java.io.IOException;import java.io.PrintWriter;public class ResponseIOServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 要求:往客户端回传 字符串 数据。// resp.getWriter();// resp.getOutputStream(); //响应的乱码解决方案一(不推荐)// System.out.println(resp.getCharacterEncoding());//默认ISO-8859-1// //设置服务器字符集UTF-8// resp.setCharacterEncoding("UTF-8");// //通过响应头,设置浏览器也使用UTF-8字符集//默认GBK// resp.setHeader("Content-Type","test/html;charset=UTf-8"); //响应的乱码解决方案二(推荐) //它会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头 //此方法一定要在获取流对象之前才有效 resp.setContentType("test/html;charset=UTF-8"); System.out.println(resp.getCharacterEncoding()); PrintWriter writer = resp.getWriter();// writer.write("response's context"); writer.write("我很帅"); }}

e) 请求重定向

请求重定向,是指客户端给服务器放请求,然后服务器告诉客户端说。我给你一个新地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。

代码演示Response1

package com.servlet;import javax.servlet.ServletException;import javax.servlet.javax.servlet.javax.servlet.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"," //请求重定向实现方案二(推荐) resp.sendRedirect(" }}

Response2

package com.servlet;import javax.servlet.ServletException;import javax.servlet.javax.servlet.javax.servlet.java.io.IOException;public class Response2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("response2'result"); }}

web.xml

Response1 com.servlet.Response1 Response1 /response1 Response2 com.servlet.Response2 Response2 /response2

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:矽海达科技SUE1 H.264编码模块介绍
下一篇:Springboot常用注解及配置文件加载顺序详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~