response和request

发布时间 2023-04-29 14:45:42作者: 怪树

request 和 response

request

主要使用的是HttpServletRequest 在实际的开发中我们使用的servlet都是httpservlet

  • 请求一共分为三步

    1. 请求行

      1. •String getMethod():获取请求方式: GET

        •String getContextPath():获取虚拟目录(项目访问路径): /request-demo

        •StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1

        •String getRequestURI():获取URI(统一资源标识符): /request-demo/req1

        •String getQueryString():获取请求参数(GET方式): username=zhangsan&password=123

    2. 请求头

      1. •String getHeader(String name):根据请求头名称,获取值
    3. 请求体(只有在post请求中才会有请求体的存在,在请求体中存在的是请求的数据)

      •ServletInputStream getInputStream():获取字节输入流

      •BufferedReader getReader():获取字符输入流

  • 获取统一的请求参数的方法(目的是为了使doget和dopost都调用的是同一个方法这样的话减少代码的书写)

    •Map<String, String[ ]> getParameterMap():获取所有参数Map集合

    •String[ ] getParameterValues(String name) :根据名称获取参数值(数组)

    •String getParameter(String name):根据名称获取参数值(单个值)

  • 解决中文乱码问题

  • post方式解决中文乱码问题

  • req.setCharacterEncoding(“UTF-8");
    
  • 通用的方式解决中文乱码问题(其中的username是要获取的具体的值)

  • new String(username.getBytes("ISO-8859-1"),"UTF-8");
    
    
  • request请求转发

    req.getRequestDispatcher("资源B路径").forward(req,resp);
    
    
    

response

  • 重定向

  • resp.setStatus(302);
    resp.setHeader(“location”,“资源B的路径");
    简化的方法:resp.sendRedirect("资源B的路径");
    
  • 设置字符数据的响应体

    @WebServlet("/Servletresponse3")
    public class Servletresponse3 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            PrintWriter writer = response.getWriter();
            writer.write("aaaaa");
            流不需要关闭
            如果要使用中文的话会出现乱码的情况
        }
    }
    

    案例:使用servlet来实现用户的注册和登录

  • 首先是登录和注册页面的准备

  • 登录页面
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>login</title>
        <link href="css/login.css" rel="stylesheet">
    </head>
    
    <body>
    <div id="loginDiv">
        <form action="/C/loginServlet" method="post" id="form">
            <h1 id="loginMsg">LOGIN IN</h1>
            <p>Username:<input id="username" name="username" type="text"></p>
    
            <p>Password:<input id="password" name="password" type="password"></p>
    
            <div id="subDiv">
                <input type="submit" class="button" value="login up">
                <input type="reset" class="button" value="reset">&nbsp;&nbsp;&nbsp;
                <a href="register.html">没有账号?点击注册</a>
            </div>
        </form>
    </div>
    
    </body>
    </html>
    
  • css样式
    * {
        margin: 0;
        padding: 0;
    }
    
    html {
        height: 100%;
        width: 100%;
        overflow: hidden;
        margin: 0;
        padding: 0;
        background: url(../imgs/Desert.jpg) no-repeat 0px 0px;
        background-repeat: no-repeat;
        background-size: 100% 100%;
        -moz-background-size: 100% 100%;
    }
    
    body {
        display: flex;
        align-items: center;
        justify-content: center;
        height: 100%;
    }
    
    #loginDiv {
        width: 37%;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 300px;
        background-color: rgba(75, 81, 95, 0.3);
        box-shadow: 7px 7px 17px rgba(52, 56, 66, 0.5);
        border-radius: 5px;
    }
    
    #name_trip {
        margin-left: 50px;
        color: red;
    }
    
    p {
        margin-top: 30px;
        margin-left: 20px;
        color: azure;
    }
    
    input {
        margin-left: 15px;
        border-radius: 5px;
        border-style: hidden;
        height: 30px;
        width: 140px;
        background-color: rgba(216, 191, 216, 0.5);
        outline: none;
        color: #f0edf3;
        padding-left: 10px;
    }
    #username{
        width: 200px;
    }
    #password{
        width: 202px;
    }
    .button {
        border-color: cornsilk;
        background-color: rgba(100, 149, 237, .7);
        color: aliceblue;
        border-style: hidden;
        border-radius: 5px;
        width: 100px;
        height: 31px;
        font-size: 16px;
    }
    
    #subDiv {
        text-align: center;
        margin-top: 30px;
    }
    #loginMsg{
        text-align: center;color: aliceblue;
    }
    
  • 注册页面
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>欢迎注册</title>
        <link href="css/register.css" rel="stylesheet">
    </head>
    <body>
    
    <div class="form-div">
        <div class="reg-content">
            <h1>欢迎注册</h1>
            <span>已有帐号?</span> <a href="login.html">登录</a>
        </div>
        <form id="reg-form" action="/C/registerServlet" method="post">
    
            <table>
    
                <tr>
                    <td>用户名</td>
                    <td class="inputs">
                        <input name="username" type="text" id="username">
                        <br>
                        <span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span>
                    </td>
    
                </tr>
    
                <tr>
                    <td>密码</td>
                    <td class="inputs">
                        <input name="password" type="password" id="password">
                        <br>
                        <span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
                    </td>
                </tr>
    
    
            </table>
    
            <div class="buttons">
                <input value="注 册" type="submit" id="reg_btn">
            </div>
            <br class="clear">
        </form>
    
    </div>
    </body>
    </html>
    
  • css样式
    * {
        margin: 0;
        padding: 0;
        list-style-type: none;
    }
    .reg-content{
        padding: 30px;
        margin: 3px;
    }
    a, img {
        border: 0;
    }
    
    body {
        background-image: url("../imgs/reg_bg_min.jpg") ;
        text-align: center;
    }
    
    table {
        border-collapse: collapse;
        border-spacing: 0;
    }
    
    td, th {
        padding: 0;
        height: 90px;
    
    }
    .inputs{
        vertical-align: top;
    }
    
    .clear {
        clear: both;
    }
    
    .clear:before, .clear:after {
        content: "";
        display: table;
    }
    
    .clear:after {
        clear: both;
    }
    
    .form-div {
        background-color: rgba(255, 255, 255, 0.27);
        border-radius: 10px;
        border: 1px solid #aaa;
        width: 424px;
        margin-top: 150px;
        margin-left:1050px;
        padding: 30px 0 20px 0px;
        font-size: 16px;
        box-shadow: inset 0px 0px 10px rgba(255, 255, 255, 0.5), 0px 0px 15px rgba(75, 75, 75, 0.3);
        text-align: left;
    }
    
    .form-div input[type="text"], .form-div input[type="password"], .form-div input[type="email"] {
        width: 268px;
        margin: 10px;
        line-height: 20px;
        font-size: 16px;
    }
    
    .form-div input[type="checkbox"] {
        margin: 20px 0 20px 10px;
    }
    
    .form-div input[type="button"], .form-div input[type="submit"] {
        margin: 10px 20px 0 0;
    }
    
    .form-div table {
        margin: 0 auto;
        text-align: right;
        color: rgba(64, 64, 64, 1.00);
    }
    
    .form-div table img {
        vertical-align: middle;
        margin: 0 0 5px 0;
    }
    
    .footer {
        color: rgba(64, 64, 64, 1.00);
        font-size: 12px;
        margin-top: 30px;
    }
    
    .form-div .buttons {
        float: right;
    }
    
    input[type="text"], input[type="password"], input[type="email"] {
        border-radius: 8px;
        box-shadow: inset 0 2px 5px #eee;
        padding: 10px;
        border: 1px solid #D4D4D4;
        color: #333333;
        margin-top: 5px;
    }
    
    input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus {
        border: 1px solid #50afeb;
        outline: none;
    }
    
    input[type="button"], input[type="submit"] {
        padding: 7px 15px;
        background-color: #3c6db0;
        text-align: center;
        border-radius: 5px;
        overflow: hidden;
        min-width: 80px;
        border: none;
        color: #FFF;
        box-shadow: 1px 1px 1px rgba(75, 75, 75, 0.3);
    }
    
    input[type="button"]:hover, input[type="submit"]:hover {
        background-color: #5a88c8;
    }
    
    input[type="button"]:active, input[type="submit"]:active {
        background-color: #5a88c8;
    }
    .err_msg{
        color: red;
        padding-right: 170px;
    }
    #password_err,#tel_err{
        padding-right: 195px;
    }
    
    #reg_btn{
        margin-right:50px; width: 285px; height: 45px; margin-top:20px;
    }
    
  • Mybatis的xml

  • <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!--起别名-->
        <typeAliases>
            <package name="com.itheima.pojo"/>
        </typeAliases>
    
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql:///db1?useSSL=false&amp;useServerPrepStmts=true"/>
                    <property name="username" value="root"/>
                    <property name="password" value="1234"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!--扫描mapper-->
            <package name="com.itheima.mapper"/>
        </mappers>
    </configuration>
    
  • 用于查询的mapper接口

    package com.itheima.mapper;
    
    import com.itheima.pojo.User;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    
    public interface UserMapper {
        /*根据用户名来登录的*/
        @Select("select * from tb_user where username=#{username} and password = #{password}")
    
        User select(@Param("username") String username, @Param("password") String password);
    
    
    
        @Select("select * from tb_user where username=#{username}")
        User selectByUsername(String username);
    
    
        @Insert("insert into tb_user values(null,#{username},#{password})")
        void add(User user);
    
  • mapper的映射配置文件

  • <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.itheima.mapper.UserMapper">
    
    </mapper>
    
  • 获取sqlsession的工具类

  • package com.itheima.util;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class SqlSessionFactoryUtils {
        private static SqlSessionFactory sqlSessionFactory;
    
        /*静态代码块会随着类的加载而创建而且只会创建一次*/
        static {
            try {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static SqlSessionFactory getSqlSessionFactory()
        {
            return sqlSessionFactory;
    
        }
    }
    
    
  • 登录页面的servlet

  • package com.itheima.response;
    
    import com.itheima.mapper.UserMapper;
    import com.itheima.pojo.User;
    import com.itheima.util.SqlSessionFactoryUtils;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    
    @WebServlet( "/loginServlet")
    public class loginServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            /*调用mybatis来查询数据*/
            SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = userMapper.select(username, password);
            sqlSession.close();
    
            /*获取对应的字符输出流并设置contentType*/
            response.setContentType("text/html;charset=utf-8");
            PrintWriter writer = response.getWriter();
    
            /*判断是否为null*/
            if (user != null) {
            writer.write("登录成功");
    
            }
            else {
                writer.write("登录失败");
    
            }
    
    
    
        }
    }
    
    
  • 注册页面的servlet

  • package com.itheima.response;
    
    import com.itheima.mapper.UserMapper;
    import com.itheima.pojo.User;
    import com.itheima.util.SqlSessionFactoryUtils;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.InputStream;
    
    @WebServlet("/registerServlet")
    public class registerServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            /* 对用户对象完成封装*/
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
    
            SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User u = userMapper.selectByUsername(username);
    
            /*判断查询出来的用户是否是存在的如果不存在就创建 */
            if (u == null) {
                userMapper.add(user);
                /*由于是增删改的操作所以我们需要进行提交事务*/
                sqlSession.commit();
                sqlSession.close();
            }else {
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write("用户名已经存在");
    
            }
    
        }
    }