java构造json格式的url请求参数_数据


B 就是 browser,浏览器,而 S 就是 server,服务器

这个系列的文章,将围绕两个问题来讲解:

  1. JSON 是什么?
  2. 为什么要学 JSON?

而在这研究两个问题之前,先研究 Java 中 浏览器端,也就是 JSP,与服务器端,也就是 Tomcat 的 Servlet 他们是如何进行数据传递的?

看下面的例子!

(如果很了解这个过程,可以草草看一下,或者直接跳过这个小节!)


用户登录验证
过程很简单:
获取前台输入账户和密码,传到服务器,和数据库中的账户密码验证,若数据库存在两个相匹配的字段,就是对上了就登录成功,否则登录失败

在这里,我们关注其中的几个问题:

  • 如何传前台的数据到服务器?
  • 服务器又如何获取到前台的数据?
  • 如何传服务器的数据到前台?
  • 前台又如何获取到服务器的数据?

注:这里使用 JSP + Sevlet + IDEA 2018 研究

首先对于前台

稍微用 Bootstap 修饰了下,Jquery 是待会要用的,如下:

注:在 IDEA 中直接在包右键可以快速创建一个带模板 JSP

index.jsp:写个 form,然后两个 input,能登录提交即可:


java构造json格式的url请求参数_服务器_02


若成功则跳转到 mainPage.jsp,这个就是简单的提示信息:


java构造json格式的url请求参数_数据_03


接着对于后台

我们写个简单的 servlet 然后在 web.xm 绑定以下即可(这里重点研究传值过程,不使用数据库,使用简单的 if 来验证!):

同样,在包右键即可快速创建一个 Servlet


java构造json格式的url请求参数_服务器_04


web.xml 中绑定 Servlet:


java构造json格式的url请求参数_服务器_05


最后,一个简单的,从前台到后台的,登录验证就好了,效果如下:


java构造json格式的url请求参数_服务器_06


分析这个过程,回答上面的四个问题

  • 如何传前台的数据到服务器:通过 form 表单提交
  • 服务器又如何获取到前台的数据:通过内置的 request 对象获取
  • 如何传服务器的数据到前台:通过 session 对象 + 重定向
  • 前台又如何获取到服务器的数据:通过 session 对象以及相应的 JSP 表达式

除了重定向,也可以用请求转发实现

有了上面那个实践的例子,使用方法都是类似的,现在简单罗列一下在 Java 中,数据传递的几种方式如下:

JSP 传递值给 Servlet

1.通过 form 表单提交

  • JSP:建立一个 form 表单,给里面的元素加上 name 属性,表单提交的 action 等于一个 servlet 的 url-pattern
  • Servlet:建立一个 servlet,并在 servlet 里使用 request.getParameter("parameterName"); 即可获取到对应的参数
  • web.xml:给上面要传递的 servlet 匹配一个 url-pattern

2.通过元素的 href 属性

  • JSP:有一些元素如 <a> 是带有 href 的属性的,可以指定值为 url-pattern?parameterName=xxx&parameterName=xxx ... 这样的形式来传递值给 Servlet
  • Servlet:建立一个 servlet,并在 servlet 里使用 request.getParameter("parameterName"); 即可获取到对应的参数
  • web.xml:给上面要传递的 servlet 匹配一个 url-pattern

3.通过 session 对象 session 结构可看作是 hashmap,而 session 的有效范围是项目所有的 servlet 和 jsp,生命周期大概 30min,也可以通过配置文件修改

  • JSP:调用方式例如:<% request.getSession.setAttribute("acc", "jalr"); %>
  • Servlet:建立一个 servlet,并在 servlet 里使用 (String)request.getSession().getAttribute("acc"); 即可获取到对应的参数 "jalr"
  • web.xml:给上面那个要传递的 servlet 匹配一个 url-pattern

注意:取得传过来的值上转型为 Object 类型,故要强制类型转换为原类型,否则 ClasscastException

Servlet 传递值给 JSP

1.通过 RequestDispatcher 请求转发

  • Servlet:在 doGet() 或 doPost() 中利用 request 对象以及请求转发到指定要取值的页面,注意路径问题!这里的路径需要在前面加 "/" ! request.setAttribute("acc", "jalr"); request.getRequestDispatcher("/index.jsp").forward(request, response); //跳转回 index.jsp
  • JSP:在任意需要值的地方用 <%=request.getAttribute("acc")%>,如此取得 "jalr",同 session,上转型
  • web.xml:给上面那个要传递的 servlet 匹配一个 url-pattern

2.通过 sendRedirect 重定向 重定向使用 session 作为中间传递,注意路径问题!

  • Servlet:在 doGet() 或 doPost() 中利用 response 对象以及请求转发到指定要取值的页面,注意路径问题!这里的路径不需要在前面加 "/" ! request.getSession().setAttribute("acc","jalr4ever"); response.sendRedirect("index.jsp");
  • JSP:在任意需要值的地方用 <%=session.getAttribute("acc")%>,如此取得 "jalr",同理这个值是上转型为 Object 的,使用的时候需要强制转换类型下来

后记:

关于 sendRedirect-重定向 与 RequestDispatcher-请求转发 的区别

  1. 请求转发前后页面共享一个 request ,这个是在服务端运行的,重定向前后页面用的不是一个 request,而这个是在客户端运行的
  2. 请求转发跳转后浏览器地址栏不会变化,重定向跳转后浏览器地址栏会变化