前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSP二:掌握JSP

JSP二:掌握JSP

作者头像
乐心湖
发布2020-07-31 16:35:49
18.5K0
发布2020-07-31 16:35:49
举报
文章被收录于专栏:MyTechnologyMyTechnology

在JSP中,request和response是非常重要的两个东西,请务必知道他们的常用方法。

request 常用方法:

1、String getParameter(String key) 获取客户端传来的参数。

示例: 我们获取id,name,age 多个参数是通过&符号分开

代码语言:javascript
复制
        <%
            String id = request.getParameter("id");
            String name = request.getParameter("name");
            String age = request.getParameter("age");
        %>
        id:<%=id%>,name:<%=name%>,age=<%=age%>

访问地址http://localhost:8080/new_javaweb_test_war_exploded/test2.jsp?id=985&name=xn2001&age=16


2、void setAttribute(String key,Object value) 通过键值对的形式保存数据。

3、Object getAttribute(String key) 通过 key 取出 value。

4、RequestDispatcher getRequestDispatcher(String path) 返回⼀个 RequestDispatcher 对象,该对象的 forward ⽅法⽤于请求转发。

我们对前四个方法做一个小案例,首先我们建立几个jsp页面,分别叫hello1,hello2,hello3

我们让hello1获取一个name参数,保存到key为name中,然后转发给hello2.jsp,hello2不做处理直接转发给hello3.jsp,相关代码如下

hello1.jsp

代码语言:javascript
复制
    <body>
        <h1>我是Hello1</h1>
        <%
            //获取name值
            String name = request.getParameter("name");
            request.setAttribute("name",name);
        %>
        <%
            // 请求分发跳转
            request.getRequestDispatcher("hello2.jsp").forward(request,response);
        %>
    </body>

hello2.jsp

代码语言:javascript
复制
    <body>
        <h1>我是Hello2</h1>
        <%
            request.getRequestDispatcher("hello3.jsp").forward(request,response);
        %>
    </body>

hello3.jsp

代码语言:javascript
复制
    <body>
        <h1>我是Hello3</h1>
        <%=request.getAttribute("name")%>
    </body>

我们启动项目,到浏览器中访问hello1.jsp,会发现其实访问的是hello3.jsp中的内容,但是地址栏不改变,name值也成功取出来。


5、String[] getParameterValues() 获取客户端传来的多个同名参数。

实例:

我在test2.jsp中加入该方法的使用,获取多个name,保存为数组。

代码语言:javascript
复制
    <body>
        <%
            String id = request.getParameter("id");
            String[] name = request.getParameterValues("name");
            String age = request.getParameter("age");
        %>
        
        id:<%=id%>,name:<%=Arrays.toString(name)%>,age=<%=age%>

    </body>

访问地址/test2.jsp?name=乐心湖&name=心湖博客&id=211&age=16

6、void setCharacterEncoding(String charset) 指定每个请求的编码。中文乱码时需要设置,不乱码一般用不到。

HTTP 请求状态码

200:正常

404:资源找不到

400:请求类型不匹配

500:Java 程序抛出异常

response 常用方法:

sendRedirect(String path):重定向,页面之间的跳转。

转发 getRequestDispatcher 和 重定向 sendRedirect 的区别:

  • 转发是将同⼀个请求传给下⼀个页面
  • 重定向是创建⼀个新的请求传给下⼀个页面,之前的请求将结束⽣命周期。

扩展

面试常问:

转发和重定向有什么区别

转发:同⼀个请求在服务器之间传递,地址栏不变,也叫服务器跳转。

重定向:由客户端发送⼀次新的请求来访问跳转后的⽬标资源,地址栏改变,也叫客户端跳转。

实例:

如果两个页面之间需要通过 request 来传值,则必须使用转发,不能使用重定向。

在用户登录功能里,如果⽤户名和密码正确,则跳转到首页(转发),并且展示用户名,否则重新回到登陆页面(重定向)。

我们去写一套完整的登录系统,

首先新建一个login.jsp,里面是一个表单,有用户名,密码,登录

代码语言:javascript
复制
    <body>
        <form action="check.jsp" method="post">
            用户名:<input type="text" name="username"/><br>
            密码:<input type="password" name="password"><br>
            <input type="submit" value="登录">
        </form>
    </body>

我们点击登录会提交到check.jsp,所以我们需要去写这个jsp,我们在里面加入验证用户名密码的功能,如果正确就转发给welcome.jsp,因为转发才可以传递request。失败就重定向到login.jsp

代码语言:javascript
复制
    <body>
        <%
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            if (username.equals("admin")&&password.equals("123456")){
                request.setAttribute("name",username);
                request.getRequestDispatcher("welcome.jsp").forward(request,response);
            }else{
                response.sendRedirect("login.jsp");
            }
        %>
    </body>

我们去写一个简单welcome.jsp

代码语言:javascript
复制
    <body>
        <%
            String name = (String) request.getAttribute("name");
        %>

        你好<%=name%>,欢迎来到心湖演示。
    </body>

启动项目,访问login.jsp,进行测试。效果如下图。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • request 常用方法:
  • HTTP 请求状态码
  • response 常用方法:
  • 扩展
    • 面试常问:
      • 实例:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档