欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Servlet-2

时间:2023-07-06

目录

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"); }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。