Web阶段:第十章:Servlet下

2022-09-28 11:01:02 浏览数 (1)

HttpServletRequest类 a)HttpServletRequest类有什么作用。 HttpServletRequest类它的作用是。每次只要有请求进来 。Tomcat服务器就会把请求的协议内容封装到HttpServletRequest对象中。 我们主要是从Request类中获取请求的信息。它表示了请求的全部信息。

b)HttpServletRequest类的常用方法 getRequestURI() 获取请求请求资源地址 getRequestURL() 获取请求的绝对路径(又叫统一资源定位符) getRemoteHost() 获取客户端的ip地址 localhost做为ip访问得到0:0:0:0:0:0:0:1 127.0.0.1 做为ip访问得到 127.0.0.1 getHeader() 获取请求头 getParameter() 获取请求的参数 getParameterValues() 获取请求参数(多个值) getMethod() 获取请求的方式GET或POST 域对象 setAttribute(key, value); 保存数据 getAttribute(key); 获取数据

getRequestDispatcher() 获取请求转发对象 getCookies() 获取Cookie对象 getSession() 获取Session对象

reqeust常用API:

代码语言:javascript复制
protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // i.getRequestURI() 获取请求请求资源地址
        System.out.println(request.getRequestURI());
        // ii.getRequestURL() 获取请求的绝对路径
        System.out.println(request.getRequestURL());
        // iii.getRemoteHost() 获取客户端的ip地址
        System.out.println(request.getRemoteHost());
        // iv.getHeader() 获取请求头
        System.out.println(request.getHeader("User-Agent"));
        System.out.println(request.getHeader("Host"));
        // vii.getMethod() 获取请求的方式GET或POST
        System.out.println(request.getMethod());
}

c)如何获取请求参数(重要) 页面的表单:

代码语言:javascript复制
    <body>
            <form action="http://localhost:8080/day07/parameterServlet" method="get">
                用户名:<input type="text" name="username" /><br/>
                密码:<input type="password" name="password" /><br/>
                兴趣爱好:
                    <input type="checkbox" name="hobby" value="cpp">C  
                    <input type="checkbox" name="hobby" value="C">C
                    <input type="checkbox" name="hobby" value="VB">Visual Basic
                    <input type="checkbox" name="hobby" value="js">JavaScript
                    <br/>
                    <input type="submit" />				
            </form>
    </body>

Servlet程序的代码:

代码语言:javascript复制
    public class ParameterServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            // 获取请求参数,用户名信息
            String username = request.getParameter("username");
            // 获取请求参数,密码信息
            String password = request.getParameter("password");
            // 获取兴趣爱好
            String[] hobbies = request.getParameterValues("hobby");
            System.out.println("用户名:"   username);
            System.out.println("密码:"   password);
            // Arrays.asList 把数组转换对应的List集合
            if (hobbies != null) {
                System.out.println("兴趣爱好:"   Arrays.asList(hobbies));
            }
        }
    }

d)GET请求的中文乱码解决 第一种方案:

1、先把收到的请求参数以iso-8859-1进行编码 2、再以UTF-8进行解码

代码语言:javascript复制
// 获取请求参数,用户名信息
        String username = request.getParameter("username");		
//		1、先把收到的请求参数以iso-8859-1进行编码
        byte[] bytes = username.getBytes("iso-8859-1");
//		2、再以UTF-8进行解码
    username= new String(bytes, "UTF-8");

第二种方案: 找到Tomcat服务器的配置文件server.xml配置文件,找到Connector标签,添加URIEncoding=“UTF-8”

代码语言:javascript复制
 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

e)POST请求的中文乱码解决 第一种方案(不推荐使用):

代码语言:javascript复制
//		1、先把收到的请求参数以iso-8859-1进行编码
        byte[] bytes = username.getBytes("iso-8859-1");
//		2、再以UTF-8进行解码
        username= new String(bytes, "UTF-8");

第二种方案(推荐使用):

代码语言:javascript复制
// 解决post中文乱码终极方案
// 一定要在调用getParameter方法之前才有效
request.setCharacterEncoding("UTF-8");

f)请求的转发(在jsp的时候使用)

g)Base标签的作用

h)Web中的相对路径和绝对路径 相对路径: ./ 当前目录 …/ 上一级目录 资源名 相当于./资源名 ./可以省略 绝对路径: http://ip:port/工程名/资源名 在实际项目开发中,不允许简单的使用相对路径!!! 实际项目开发中,只能使用绝对路径 或 base 相对

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

斜杠/ 就是表示一个绝对路径。 / 在html页面上,被浏览器解析得到是:http://ip:prot/ / 在服务器代码上。表示: http://ip:port/工程名/ 在web.xml中配置url-pattern /hello ====>>>> http://ip:port/工程名/hello 请求转发request.getRequestDispatcher("/a/b/c.html") 表示http://ip:port/工程名/a/b/c.html servletContext.getRealPath(“/”); =====>>>>>> 表示到http://ip:prot/工程名/ 服务器代码中的特殊情况: response.sendRedirect(“/”); =====>>>> 表示到端口号http://ip:prot/

6.HttpServletResponse类 a)HttpServletResponse类的作用 httpServletResponse类,表示响应。所有响应的http协议都可以通过HttpServletResponse类去进行设置。 每次请求进来都会创建一个Request对象,也会创建一个Response对象。Tomcat服务器负责创建。 b)两个输出流的说明。 响应有两种流,一种是字符流,一种是字节流。 response.getOutputStream() 字节流 文件下载使用 response.getWriter() 字符流 回传字符串信息(使用频率最高) 你使用了字节流,就不能使用字符流, 你使用字符流,就不能使用字节流。 两个流同时使用就会出现如下异常:

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

代码语言:javascript复制
 protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            // 往客户端回传字符串数据
            // 1、先获取字符流
            PrintWriter writer = response.getWriter();
            // 2、调用字符流的write方法输出字符串
            writer.write("this is the content of response!!!");
    }

d)响应的乱码解决 第一种方案(不推荐使用):

代码语言:javascript复制
// 设置响应的字符集为UTF-8,设置了服务器支持中文输出
        response.setCharacterEncoding("UTF-8");
        // ISO-8859-1 是默认的字符集,它不支持中文
        System.out.println( response.getCharacterEncoding() );
        // 设置响应头,Content-Type,
        // text/html; 表示返回的是html内容。
        // charset=UTF-8	告诉客户端使用UTF-8字符集查看 
    response.setHeader("Content-Type", "text/html; charset=UTF-8");

第二种方案是(推荐使用):

代码语言:javascript复制
 // 同时设置服务器和客户端都使用UTF-8字符集,
        // 并且还设置了响应头
        // 必须在获取流对象之前调用
    response.setContentType("text/html; charset=UTF-8");

e)如何设置响应头和响应状态码

代码语言:javascript复制
protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        System.out.println("请求进来 了,这是Response1");
        // 设置响应状态码302
        response.setStatus(302);
        // 设置响应头
        response.setHeader("Location", "http://localhost:8080/day07/response2");
}

f)请求重定向

代码语言:javascript复制
//也是请求重定向(推荐)
    response.sendRedirect("http://localhost:8080/day07/response2");

请求重定向的特点:

请求转发和重定向的对比

0 人点赞