Java学习笔记——关于getAttribute和getParameter

关于getAttribute和getParameter的区别,博主疯狂的卡夫卡给出了很好的区别
在这里插入图片描述
上图所示的是getParameter的工作流程
在这里插入图片描述
这里给出的是getAttribut的工作流程
两者区别:
①getParameter()获取的是客户端设置的数据。
getAttribute()获取的是服务器设置的数据。
②getParameter()永远返回字符串
getAttribute()返回值是任意类型

既然parameter和attribute都是传递参数,为什么不直接使用parameter呢?
①服务器端不能通过setParameter(key, value)来添加参数,因为没有这个函数
所以如果需要在服务器端进行跳转,并需要想下个页面发送新的参数时,则没法实现。但是Attribute可以,可以通过setAttribute(),将值放入到request对象,然后在其他页面使用getAttribute获取对应的值,这样就达到一次请求可以在多个页面共享一些对象信息
②parameter返回值是字符串,意味着不能传递其他的对象,如Map,List,但是attribute则可以存放任意类型的Java对象
————————————————

版权声明:本文为CSDN博主「疯狂的卡夫卡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wz2292667460/article/details/79366493

在“简单的学生成绩管理系统”这一个项目中可以给出一个对比,在Filter过滤器中,使用的是getAttribute,而userServlet中使用的是getParameter,之所以这样使用是因为在这个项目中getAttribute是获取服务器给出的会话域对象的值,总体由服务器决定有没有值,值是多少,与用户无关,所以过滤的时候使用的是这一个 参数,来判断服务器中有没有设置好的对象。而getParameter就是纯粹获取客户端给过来的值了,以便与数据库中的内容进行对比。

//表示经过index.html的路径都要经过此过滤器
@WebFilter(value={"/index.html"})
public class LogInFilter implements Filter {
    //重写必要的抽象方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain){

        try {
            //强行转为http的请求和响应对象以调用响应的方法
            HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
            HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;

            //从请求中获取对话域的对象,并获取其中名为username的值
            Object username = httpRequest.getSession().getAttribute("username");

            //如果用户未曾登录,则将页面重新定向到login页面
            if (username == null || username.equals("")) {
                //这里调用request对象的getContextPath方法是为了降低代码之间的耦合度
                httpResponse.sendRedirect(httpRequest.getContextPath() + "/login.html");
                return;
            }
            //过滤器放行,这是每一个过滤器所必须执行的操作,如果没有这一个语句,那么最终会显示一个空白的页面
            filterChain.doFilter(httpRequest, httpResponse);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面是过滤器使用getAttribute来判断是否有登录好的账号,下面是UserServlet,就是用的getParameter来获取用户的输入值来进行对比了

@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式防止出现乱码
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF08");

        //获取username与password对象
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //将获取到的数据封装成一个对象,以便进行传递
        User user = new User(username,password);
        
        //其他后续操作
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值