Java研学-Servlet 进阶

发布时间:2023年12月24日

一 请求对象

1 HttpServletRequest

??HttpServletRequest 是一个接口,该接口的实现类对象称为请求对象,请求对象封装了所有的请求信息(请求行,请求头,请求体(请求参数))。
??HttpServletRequest 接口包含了大量的方法。由 Tomcat 去实现这个对象,并且在 servlet 启动的时候调用service() 将请求对象传递进来了,在 service 方法中可直接使用。

2 请求常用方法

① request 与请求行相关方法

request 与请求行相关方法说明
String getMethod()获得请求方式 GET 或 POST
String getRequestURI()Uniform Resource Identifier统一资源标识符,代表一个资源名字
StringBuffergetRequestURL()Uniform Resource Locator 统一资源定位符,代表一个可以访问地址
String getProtocol()获得协议和版本
String getContextPath()获得上下文路径(项目名path)

② request 与请求头相关方法

request 与请求头相关方法说明
String getHeader(String headName)得到指定的请求头的值参数:键的名字 返回:相应请求头的值

③ request与请求参数相关方法

request与请求参数相关方法说明
String getParameter(String name)通过参数名得到一项参数值
String[] getParameterValues(String name)根据参数名得到一组同名的值复选框,下拉列表多选
Enumeration getParameterNames()获得所有的参数名
Map getParameterMap()得到表单所有的参数键和值,封装成Map对象

④ Enumeration接口中方法

Enumeration接口中方法说明
boolean hasMoreElements()如果还有其它元素,返回true
E nextElement()返回下一个元素

3 获取请求行与头

@WebServlet("/play")
public class Play extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取请求行
        System.out.println(req.getMethod());     //方法
        System.out.println(req.getRequestURI()); //统一资源标识符
        System.out.println(req.getRequestURL()); //统一资源定位符
        System.out.println(req.getProtocol());   //协议和版本
        System.out.println(req.getContextPath());//当前项目地址
        // 获取请求头值
        System.out.println(req.getHeader("user-agent"));
    }
}

4 获取请求参数

① 创建页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TJ</title>
</head>
<body>
<h3>用户注册</h3>
<form action="/play" method="post">
    name:<input type="text" name="name"><br/>
    sex:<input type="radio" name="sex" value="man" checked="checked"/>man
    <input type="radio" name="sex" value="woman"/>woman <br/>
    city:
    <select name="city">
        <option value="牙克石">牙克石</option>
        <option value="大雁">大雁</option>
        <option value="根河">根河</option>
    </select>
    <br/>
    hobby:
    <input type="checkbox" name="hobby" value="run"/>run
    <input type="checkbox" name="hobby" value="swim"/>swim
    <input type="checkbox" name="hobby" value="work"/>work
    <br/>
    <input type="submit" value="submit"/>
</form>
</body>
</html>

② 获取页面中的数据

@WebServlet("/play")
public class Play extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置请求参数编码 放在获取请求参数之前
        req.setCharacterEncoding("utf-8");
        // 根据参数名获得参数值
        System.out.println("name:" + req.getParameter("name"));
        // 得到一个字符串数组
        String[] hobbies = req.getParameterValues("hobby");
        // 得到多个参数
        System.out.println("hobby:" + Arrays.toString(hobbies));
        // 得到所有参数的名字
        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()) {
        // 得到其中一个名字
            String name = parameterNames.nextElement();
            System.out.println("param:" + name + ",value:" +
                    req.getParameter(name));
        }
        // 得到所有的键和值
        Map<String, String[]> map = req.getParameterMap();
        map.forEach((k,v) -> System.out.println("key:" + k + ",value:" +
                Arrays.toString(v)));
    }
}

二 响应对象

1 HttpServletResponse

??HttpServletResponse 是一个接口,该接口的实现类对象称为响应对象,用于响应数据(响应行,响应头,响应体)给浏览器。HttpServletResponse 接口包含了大量的方法。由 Tomcat 去实现这个对象,并且在 servlet 启动的时候调用 service() 将请求对象和响应对象传递进来了。于 service 方法中可直接使用。

2 响应常用方法

响应体相关的方法功能描述
OutputStream getOutputStream()服务器端返回的是二进制数据(图片)使用此方法
PrintWriter getWriter()服务器端返回的是字符的文本数据,使用此方法

3 进行响应

@WebServlet("/play")
public class Play extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //设置响应编码
    resp.setContentType("text/html;charset=utf-8");
    //响应字符信息到客户端
    PrintWriter writer = resp.getWriter();
    //writer.write("请求完成,响应数据返回!.......");
    //可以将html标签作为字符串响应到页面
    String s = "<p><a href=\"http://www.baidu.com\" style=\"color: red;background-color: aqua\">百度一下</a></p>";
    writer.write(s);
    }
}
解决中文乱码的方法说明
response.setCharacterEncoding(“字符集”)用于设置响应体的字符集,设置打印流使用的码表
void setContentType(String type)1. 告诉浏览器返回内容类型,2. 设置打印流编码,必须在获取流之前设置,否则无效
文章来源:https://blog.csdn.net/zhlyxx/article/details/135178701
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。