0
点赞
收藏
分享

微信扫一扫

关于Servlet的补充知识

海滨公园 2022-06-05 阅读 63

在这里插入图片描述

目录


🍌一.Cookie和Session

在Servlet中,对于Cookie和Session都有很好的支持,也就是有一些API可以完成会话管理的操作!

🍓 1.请求

在HTTPServletRequest里面就有相关的方法:

那么HttpSession是什么:

在这里插入图片描述

🍓 2.响应

响应(HTTPServletResponse)里面也有相关的方法:addCookie()(把指定的Cookie添加到响应中)
而通过这个方法,就可以添加Cookie信息到响应报文中了,这里添加进来的键值对,就会作为HTTP响应中的set-Cookie字段!!!
在这里插入图片描述


🍌 二.实现用户登录

在这里插入图片描述
Cookie和Session的这些方法都是非常关键的,下面就通过一个用户登录的案例来使用一下这些方法:
首先是主要的逻辑:在浏览器页面登录,点击登录按键之后就会给服务器发送一个请求,然后服务器就会处理这个登录请求,处理成功了就会给页面返回一个302响应,然后跳转到主页面上,主页面上就会显示一些用户信息(用户的用户名…)

🍓 1.约定前后端交互接口

这里有两组交互:

  • 登录的交互: 在这里插入图片描述

  • 获取主页的交互:
    在这里插入图片描述

🍓 2.编写一个简单的登录页面

这里使用form表单来构造post请求(这里的样式就不设计了,简单的页面能实现想要的功能就可以了):

    <form action="login" method="post">
        <input type="text" name="username">
        <input type="text" name="password">
        <input type="submit" value="登录"> 
    </form>

🍓 3.编写Servlet代码来处理登录请求

登录页面:

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取到请求中的信息
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //然后判断这个信息是否正确,如果正确就可以跳转到一个新的页面,如果错误就直接返回登录失败的信息
        //这里的验证本来是要根据数据库中的信息来进行判断的,但是这里就不使用了,直接使用唯一的用户名这密码来进行判断了
        if("zhangsan".equals(username) && "123".equals(password)){
            //登录成功
            //如果登录成功就看有使用一个HttpSession对象来保存需要的用户信息,然后在后续的页面中显示,这里的参数设置为true,如果没有这个会话没救主动创建一个会话
            HttpSession httpSession = req.getSession(true);
            //这里的键值对就是必要的用户信息
            httpSession.setAttribute("username",username);

            //这里还可以实现一个登录次数的信息
            httpSession.setAttribute("count",0);
            //然后重定向到一个新的页面
            resp.sendRedirect("index");
        }else{
            //登录失败
            //返回一个登录失败的响应
            resp.getWriter().write("login failed!!!");
        }
    }
}

这里就可以使用HttpSession对象来保存一些必要的信息,而且这里的信息是可以自定义的,想保存什么信息就保存什么信息,这里存好了就方便后面获取!

🍓 4.编写Servlet代码来处理返回到主页面的请求

跳转到主页面:

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 javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       
    
        //这里的参数应该是false,因为前面登录的时候已经创建过了,而这里就不需要再创建了,直接获取就可以了
        HttpSession httpSession = req.getSession(false);
        
        //然后通过getAttribute这个方法就可以获取到信息了
        String username = (String)httpSession.getAttribute("username");
        //登录一次就让登录次数加1
        Integer count = (Integer) httpSession.getAttribute("count");
        count += 1;
        //需要把次数更新写回
        httpSession.setAttribute("count",count);
        //防止乱码
        resp.setContentType("text/html;charset=utf8");
         //这里就直接返回一个简单的页面就可以了
        resp.getWriter().write("<h3> 欢迎你!" + username +" 这是第" + count + "次访问页面 </h3>");
    }
}

在这里所获得的对象就和登陆成功所创建的对象是同一个对象,然后通过这个对象,就可以获取到前面保存好的信息了!!

🍓 5.验证

第一次交互:登录页面
在这里插入图片描述
第二次交互:跳转到主页面
在这里插入图片描述
然后多刷新几次就可以这个次数也就会不断叠加
在这里插入图片描述
这样一个简单的用户登录的页面也就创建成功了,这也就使用到了HttpSession对象及其方法!!
在这里插入图片描述


🍌 三.上传文件

上传文件在实际的开发中也是一个典型的需求,而在Servlet中也对上传文件进行了支持,主要就是使用getPart(),通过给定的name就可以获得到对应的文件!而上传文件的时候,前端就需要用到form表单,而此时form表单就需要使用到特殊的类型form-data,然后提交文件的时候,浏览器就会把文件内容以form-data的格式构造到HTTP请求中去了,然后服务器通过这个getPart方法就可以获得到这个文件内容了!
另外Part类也有一些方法可以获得一些文件对应的属性:
getSubmittedFileName()(可以获得文件名),getContentType()(获得文件类型),getSize()(获得文件大小),write()(可以将提交的文件写入到磁盘文件中去)
下面就具体实现一下:

    <!-- 这里enctype="multipart/form-data"就是使用form-data的格式构造到请求中 -->
    <form action="upload" method="post" enctype="multipart/form-data">
        <!-- 设置为file就会有个自带的选择文件的按钮 -->
        <input type="file" name="MyImage">
        <input type="submit" value="提交">
    </form>

Servlet代码:

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;


@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //要上传文件就需要获取这个文件,而通过getPart方法就可以获取到
        //而这里的参数就是html里面的那么内容
        Part part = req.getPart("MyImage");
        //然后这里可以打印出这个文件的一系列信息
        System.out.println(part.getSubmittedFileName());//获取文件名字
        System.out.println(part.getContentType());//获取文件类型
        System.out.println(part.getSize());//获取文件大小
        //将这个文件写入到哪里去
        part.write("E:/picture/test/b.jpg");
        resp.setContentType("text/html;charset=utf8");
        resp.getWriter().write("上传成功!");
    }
}

这里一定要写@MultipartConfig,给这个类加上这个注解,才能开启对于上传文件的支持,否则getPart调用的时候就会抛出异常!!
接下来验证一下:
上传文件页面:
在这里插入图片描述
选择一个粽子图片:
在这里插入图片描述
写入到刚才所指定好的路径去(提交之前):
在这里插入图片描述

点击提交:
在这里插入图片描述
就会发现图片已经上传成功了:
在这里插入图片描述
这样上传文件的功能也就实现成功了!!!
在这里插入图片描述
以上内容就是对Servlet内容的补充了,通过这些就可以做一些简单的项目出来了!
在这里插入图片描述

举报

相关推荐

对知识补充

矩阵知识补充

servlet相关的知识

补充Lua知识

补充C++知识

0 条评论