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);
        	}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐