day47_servlet

今日内容

0 复习昨日

1 接收请求

2 处理响应

0 复习昨日

HTTP请求中

  • 请求行
    • 请求方法,请求路径
  • 请求头
    • 页面信息
  • 请求正文
    • 请求的数据

HTTP响应中

  • 响应行
    • 状态码 信息
  • 响应头
    • 页面信息
  • 响应正文
    • 要给浏览器的内容

1 接收请求

浏览器发出请求,经过web.xml映射匹配,找到Servlet对应的方法(doGet/doPost),接收请求数据,可以接收请求中的请求行,请求头,请求正文

  • 浏览器发出请求
    • a/form/ajax
  • 经过web.xml映射匹配
    • web.xml(8行代码)
  • doGet/doPost
    • 前端是get请求,就重写doGet
    • 前端是post请求,就重写doPost
  • 如何接收数据
    • 通过HttpServletRequest对象处理

需求: html页面中写一个表单,发送请求,后台服务器接收所有请求数据

1.1 编写页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
    表单提交数据,一定要有name属性,
    后台服务器,就是name获得值
    ------------------------
    点击提交,会以method指定的请求方式,将数据发送到action指定后台服务器
    action路径,建议是 /项目名/路径
 -->
<form action="/day47/req" method="get">
    用户名 <input type="text" name="username"><br>
    密码 <input type="password" name="password"><br>
    性别 <input type="radio" name="sex" value="1"><input type="radio" name="sex" value="2"><br>
    技能<input type="checkbox" name="skill" value="Java">Java
        <input type="checkbox" name="skill" value="JavaScript">JavaScript
        <input type="checkbox" name="skill" value="SSM">SSM<br>
    学历<select name="xueli">
            <option value="gaozhong">高中</option>
            <option value="dazhuan">大专</option>
            <option value="benke">本科</option>
        </select>
    <input type="submit" value="提交">
</form>

</body>
</html>

1.2 编写Servlet

package com.qf.servlet;

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.Enumeration;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class MyServlet extends HttpServlet {

    /**
     *
     * @param req 处理请求的对象
     * @param resp 处理响应的对象
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 请求方法
        String method = req.getMethod( );
        System.out.println("method = "+method);

        // 获得请求路径
        String requestURI = req.getRequestURI( );// 资源标识符
        StringBuffer requestURL = req.getRequestURL( ); // 资源定位符
        System.out.println("requestURI = " + requestURI);
        System.out.println("requestURL = " + requestURL);

        System.out.println("--------------------------------------" );

        // 接收请求头【了解】
        String host = req.getHeader("Host");
        System.out.println("host = " + host);

        Enumeration<String> keys = req.getHeaderNames( );
        while (keys.hasMoreElements()) {
            String key = keys.nextElement( );
            String value = req.getHeader(key);
            System.out.println(key + " : " + value);
        }
        System.out.println("--------------------------------------" );
        // 接收请求数据【重点】
        // 接收请求数据,无论单选,还是下拉框等都是getParameter(name);
        // name是前端标签name属性的值
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        String xueli = req.getParameter("xueli");

        System.out.println("username = " + username);
        System.out.println("password = " + password);
        System.out.println("sex = " + sex);
        System.out.println("xueli = " + xueli);
        // 复选框
        // 如果一个没选,数组没有创建,是null,不是长度为0
        String[] skills = req.getParameterValues("skill");
        // 空指针异常,就是使用空对象调用属性和方法
        for (int i = 0; skills != null && i < skills.length; i++) {
            System.out.println("skill["+(i+1)+"] = " + skills[i]);
        }

    }
}

1.3 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>com.qf.servlet.MyServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <!--此处不需要写项目名,只需要写请求路径-->
        <url-pattern>/req</url-pattern>
    </servlet-mapping>
</web-app>

1.4 部署项目

1.5 启动测试

2 做出响应

做出响应是通过HttpServletResponse对象

  • 响应行
    • 状态码
  • 响应头
    • 响应信息,其中有一个cookie后续会用到,以及编码格式
  • 响应正文
    • 向浏览器展现的内容

        // 响应状态码
        // 200 是成功, 302 重定向 404 资源未找到 500 服务器错误
        // 一般不用设置,为自动响应
        // resp.setStatus(200);

        // 设置响应头
        // resp.setHeader("key","value");
        // 指定浏览器如何解析响应的内容,解决响应乱码
        resp.setContentType("text/html;charset=utf-8");


        // 向浏览器响应内容(响应正文)
        PrintWriter out = resp.getWriter( );
        out.write("<html>");
        out.write("     <head>");
        out.write("         <title>这是响应</title>");
        out.write("     </head>");
        out.write("     <body>");
        out.write("         <div style='background-color:red;width:500px;height:500px;font-size:50px'>");
        out.write("         这是响应,欢迎"+username);
        out.write("         </div>");
        out.write("     </body>");
        out.write("</html>");

3 乱码解决

请求乱码

 req.setCharacterEncoding("utf-8");

响应乱码

resp.setContentType("text/html;charset=utf-8");

作业

画javaweb开发流程图
画servlet执行图
---------------------
前端html页面用户名+密码,
后端servlet接收数据
数据库根据数据查询用户
查询到,页面欢迎语
查询不到,页面展现登录失败信息

-------------------------
复习JDBC
复习HTML(表单/表格) JS(语法/函数) JQuery(DOM)  Ajax(语法模板)
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

师范大学通信大怨总

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值