栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet-2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet-2

目录

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


   
       RequestAPIServlet
       com.atshangma.RequestAPIServlet
   
    
    
        RequestAPIServlet
        /requestAPIServlet
    

3.如何获取请求参数

 代码演示:




    
    Title


用户名:
密码:
兴趣爱好:C++ java Javascript
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


用户名:
密码:
兴趣爱好:C++ java Javascript
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代码



   
       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代码



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

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号