JavaEE【服务器端技术、异步请求ajax、json】
1、服务器端技术Tomcat服务器常用的web服务器 Tomcat(Apache):当前应用最广的JavaWeb服务器。什么是Servlet(1)Servlet是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案,而具体的Servlet容器负责提供标准的实现;(2)Servlet作为服务器端的一个组件,它的本意是“服务器端的小程序”。Servlet的
1、服务器端技术
Tomcat服务器
常用的web服务器 Tomcat(Apache):当前应用最广的JavaWeb服务器。
什么是Servlet
(1)Servlet是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案,而具体的Servlet容器负责提供标准的实现;
(2)Servlet作为服务器端的一个组件,它的本意是“服务器端的小程序”。Servlet的实例对象由Servlet容器负责创建;Servlet的方法由容器在特定情况下调用;Servlet容器会在Web应用卸载时销毁Servlet对象的实例;
(3)简单可以理解为 Servlet就是用来处理客户端的请求的。
package com.hike.servlet;
import javax.servlet.RequestDispatcher;
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(name = "HelloServlet")
public class HelloServlet extends HttpServlet {
//处理post请求
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost方法被调用");
//response的作用
//1.给浏览器响应一个字符串或一个页面
PrintWriter writer = response.getWriter();
writer.write("相应字符串");
//2.重定向
response.sendRedirect("1.html");
}
//处理get请求
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet方法被调用");
//request的作用
//1.获取请求的参数
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username + " " + password);
//2.将请求再转发
//获取转发器
RequestDispatcher requestDispatcher = request.getRequestDispatcher("1.html");
requestDispatcher.forward(request,response);
//3.request是一个域对象
}
}
转发和重定向的区别
(1)转发浏览器发送一次请求,重定向浏览器发送两次请求;
(2)转发浏览器地址栏地址没有变化,重定向地址栏地址有变化;
(3)转发可以访问WEB-INF目录下的资源,重定向不可以;
(4)转发可以共享request域中的数据,重定向不可以。
JSP页面
(1)JSP全称Java Server Pages,顾名思义就是运行在java服务器中的页面,也就是在我们JavaWeb中的动态页面,其本质就是一个Servlet;
(2)其本身是一个动态网页技术标准,它的主要构成有HTML网页代码、Java代码片段、JSP标签几部分组成,后缀是.jsp;
(3)相比于Servlet,JSP更加善于处理显示页面,而Servlet更加擅长处理业务逻辑,两种技术各有专长,所以一般我们会将Servlet和JSP结合使用,Servlet负责业务,JSP负责显示;
(4)一般情况下, 都是Servlet处理完的数据,转发到JSP,JSP负责显示数据的工作;
(5)JSP的脚本片段:脚本片段是嵌入到JSP中Java代码段,格式以<%开头,%>结尾,两个%号之间就可以编写Java代码了。
<%
Date date = new Date();
%>
<h1>现在的时间是<%=date%></h1>
(6)JSP的表达式:JSP表达式用来直接将Java变量输出到页面中,格式以<%=开头,以%>结尾,中间是我们要输出的内容
<%
String string = "abc";
%>
<%=string %>
(7)JSP的内置隐含对象
在JSP中,隐含对象不用创建,直接可以使用。
- out(JspWriter):相当于response.getWriter()获取的对象,用于在页面中显示信息。
- config(ServletConfig):对应Servlet中的ServletConfig对象。
- page(Object):对应当前Servlet对象,实际上就是this。
- exception(Throwable):错误页面中异常对象
- response(HttpServletResponse):HttpServletResponse对象
- pageContext(PageContext):当前页面的上下文,是一个域对象。
- request(HttpServletRequest):当前请求(一次请求),是一个域对象
- session(HttpSession):当前会话(一次会话,也就是打开浏览器到关闭浏览器的过程)是一个域对象
- application(ServletContext):当前Web应用,服务器不关,所有资源都可以拿到,是一个域对象
<%--
四个域对象
page域
范围:当前页面
对应的域对象:pageContext
域对象类型:PageContext
request域
范围:当前请求(一次请求)
对应的域对象:request
域对象的类型:HttpServletRequest
session域(一般将用户信息存储在session中)
范围:当前会话(一次会话)
对应的域对象:session
域对象的类型:HttpSession
application域(用于显示当前在线人数)
范围:当前Web应用
对应的域对象:application
域对象的类型:ServletContext
四个域对象都有以下三个方法:
void setAttribute(String key,Object value);
Object getAttribute(String key);
void removeAttribute(String key);
四个域对象使用规则:
能用小范围的,就不用大范围的
--%>
<!-- 在当前页面中分别向四个域中添加四个属性 -->
<%
pageContext.setAttribute("pageKey", "pageValue");
request.setAttribute("reqKey", "reqValue");
session.setAttribute("sessKey", "sessValue");
application.setAttribute("appKey", "appValue");
%>
<h1>在当前页面中分别获取四个域中的属性值</h1>
page域中的属性值是:<%=pageContext.getAttribute("pageKey") %><br>
request域中的属性值是:<%=request.getAttribute("reqKey") %><br>
session域中的属性值是:<%=session.getAttribute("sessKey") %><br>
application域中的属性值是:<%=application.getAttribute("appKey") %><br>
```
(8) EL表达式:
EL全称:Expression Language,表达式语言
格式:${表达式}
作用:获取域对象中的属性值
EL表达式查询的规则:先从page域中查找,找到后直接返回,不进行其他域中的查找,否则去request域中查找,以此类推,如果最后在application域中也找不到,则什么信息也不输出。
EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。
EL表达式仅仅用来读取数据,而不能对数据进行修改。
使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。
EL提供了四个Scope对象,用来精确获取指定域中的属性值
pageScope
requestScope
sessionScope
applicationScope
<%
Date date = new Date();
//分别向四个域中添加四个属性
pageContext.setAttribute("date", date+"-");
request.setAttribute("date", date+"--");
session.setAttribute("date", date+"---");
application.setAttribute("date", date+"----");
%>
通过JSP表达式获取域对象中的属性值:<%=pageContext.getAttribute("date") %><br>
通过EL表达式获取域对象中的属性值:${date }<br>
通过EL表达式获取request域中的属性值:${requestScope.date }
2、异步请求Ajax
AJAX 是 Asynchronous JavaScript And XML 的简称。直译为,异步的JS和XML。实际意义是,不发生页面跳转、异步载入内容并改写页面内容的技术。也可以简单的理解为通过JS向服务器发送请求。
同步请求:必须等上一次请求响应成功之后才可以发送其他请求,响应成功之后会刷新整个页面,如果页面的一小部分需要改变则需要更新整个页面,用户体验不是很好。
异步请求则不然,可以局部更新页面,发送请求时不会影响到用户的正常访问。
JQuery可以实现对异步的请求,相关的方法有$.get $.post $.ajax等
通过$.aiax()方法发送Ajax请求
$.ajax(url,settings)
url:必须要有,用来设置请求地址
settings是可选的,其中的常用选项有
type:用来设置请求方式,默认是GET
data:用来设置请求参数
success:用来设置一个回调函数,相映成功之后系统会自动调用该函数,
相应数据会以参数的形式传入到该函数中
dataType:用来设置形影数据的类型,如text,json等
$.ajax({
url:"AjaxServlet",
type:"get",
data:"username=admin&password=123456",
success:function(res){
//将响应数据设置到span标签中
$("#msg").text(res);
},
dataType:"text"
});
3、JSON
json简介
(1)AJAX一开始使用的时XML的数据格式,XML的数据格式非常简单清晰,容易编写,但是由于XML中包含了过多的标签,以及十分复杂的结构,解析起来也相对复杂,所以目前来讲,AJAX中已经几乎不使用XML来发送数据了。取而代之的是一项新的技术JSON。
(2)JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式。
(3)JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。
例,有如下一个JSON对象:
{“name”:”zhangsan” , ”age”:18 , ”address”:”beijing” }
这个对象中有三个属性name、age和address
如果将该对象使用单引号引起了,那么他就变成了一个字符串
‘{“name”:”zhangs” , ”age”:18 , ”address”:”beijing” }’
变成字符串后有一个好处,就是可以在不同语言之间传递。
比如,将JSON作为一个字符串发送给Servlet,在Java中就可以把JSON字符串转换为一个Java对象。
json的格式
//json的格式
//1.json对象
//属性名必须使用双引号括起来,属性名和属性值之间使用冒号分隔;多个属性之间使用逗号分隔
var jsonObj = {"name":"张三":,"age":34};
alert(jsonObj.name);
//2.json数组
var jsonArr = ["李四",20,true,null,jsonObj];
alert(jsonArr[0]);
//获取jsonArr中jsonObj中的age值
alert(jsonArr[4].age);
//在JS中将json对象转换为json字符串
var objToStr = JSON.stringify(jsonObj);
alert(objToStr);
//声明一个json字符串
var jsonStr = '{"name":"王五","age":34}';
alert(jsonStr);
//在JS中将json字符串转换为JSON对象
var srtToObj = JSON.parse(jsonStr);
alert(strToObj.name);
在Java中对象与JSON字符串之间的转换
借助于第三方工具json-lib、jackson、gson等可用将Java对象转换为JSON字符串,也可用将JSON字符串转换回Java对象
通常是前端发送一个Ajax请求,在后台查询到对象之后将对象转换为JOSN字符串响应到前端
通过发送Ajax请求接收JSON格式的响应数据
前端代码
//发送Ajax请求接收JSON格式的响应数据
$.ajax({
url:"JSONServlet",
success:function(res){
alert(res.id);
},
dataType:"json"
});
后端代码
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//假设从数据库中查询到员工的信息
Employee employee = new Employee(1, "张三", "zhangsan@qq.com");
//创建Gson对象
Gson gson = new Gson();
//将Employee对象转换为JSON字符串
String json = gson.toJson(employee);
System.out.println(json);
//给浏览器响应一个JSON格式的字符串
response.getWriter().write(json);
}
更多推荐
所有评论(0)