标签:变化 baidu BMI com sub onclick 方式 简单的 use
在javaWeb阶段,前端页面发送请求有两种:
1.同步请求
2.异步请求
同步请求与异步请求的区别是:同步请求跳转界面,异步请求只传递数据,不会跳转界面
(即使用同步请求,servelt响应的是一个界面,前台需要加载这个新的界面的图片样式脚本等诸多资源,而是用异步请求的话,只传递数据,不会刷新资源)
做一个简单的案例:
1.新建一个页面login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="ServletDemo1"> 用户名:<input type="username"> 密码:<input type="password"> <input type="submit"> </form> </body> </html>
然后创建一个简易的servlet
package com.zs.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 java.io.IOException; @WebServlet("/ServletDemo1") public class ServletDemo1 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("login.jsp").forward(req, resp); } }
运行tomcat后,在浏览器输入login网页地址打开网页,然后打开F12,找到网络后点击发送可以看到如下页面
选中发送的请求,点开后可以看到如下页面:
可以看出,响应的是一个页面,同步请求响应的是页面,下面的是响应的页面的源代码,而是用异步请求的话,不会刷新网页,只是传递数据,响应只有数据。下面 使用ajax来实现异步请求,还是使用之前的login.jsp页面,修改表单为发送异步请求:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <%--需要导入jquery包--%> <script src="jquery-1.8.3.min.js"></script> </head> <body> <form> 用户名:<input type="text" name="username" id="username"> 密码:<input type="password" name="password" id="password"> <input type="button" onclick="check()" value="登录"> </form> <script> function check() { $.post("/servletbk/ServletDemo1", {"username":username.value, "password":password.value}, function(data){ console.log(data) }) } </script> </body> </html>
修改servlet:
package com.zs.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 java.io.IOException; import java.io.PrintWriter; @WebServlet("/ServletDemo1") public class ServletDemo1 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.write("hello world"); } }
然后再次输入表单发送请求并查看请求的响应
可以看出,响应只有数据,不刷新页面了,还是原来的页面,使用异步请求的方式为用户节省了流量,避免了多次加载网页的内容。
在同步请求中,有两种响应方式,一种是请求转发,一种是重定向。
请求转发与重定向的区别:
还是以具体的案例来说明:
首先是请求转发的:
新建一个index.jsp作为跳转的页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> ${user} </body> </html>
然后将servlet改为请求转发:
package com.zs.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 java.io.IOException; import java.io.PrintWriter; @WebServlet("/ServletDemo1") public class ServletDemo1 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setAttribute("user","111111"); req.getRequestDispatcher("index.jsp").forward(req, resp); } }
运行服务器,浏览器输入请求地址 http://localhost:8080/servletbk/ServletDemo1
运行结果如下:
修改servlet为重定向:
package com.zs.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 java.io.IOException; import java.io.PrintWriter; @WebServlet("/ServletDemo1") public class ServletDemo1 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setAttribute("user","111111"); resp.sendRedirect("index.jsp"); } }
然后再次发送请求结果如下:
我们可以注意到:使用请求转发后,地址栏发生了变化,但是共享数据内的数据没有传递过来,
我们再次修改请求转发的地址以及重定向的地址:
运行后可以跳转到百度的网页,使用请求转发时:
运行结果如下:
可以注意到,页面报错404,找不到页面,错误原因是找不到/servletbk下的/http:www.baidu.com,因此可以知道请求转发时转发的地址是拼接在绝对地址上的,也就是说只能访问当前项目下的地址,不能访问外部地址。
因此可以得出一下结论:
标签:变化 baidu BMI com sub onclick 方式 简单的 use
原文地址:https://www.cnblogs.com/Zs-book1/p/11077508.html