jsp页面渲染

1.jsp

  1.jsp脚本和注释

    1)<%java代码%> --------------内部的java代码翻译到service方法的内部

    2)<%=java变量或表达式%>  ----------会被翻译成service 方法内部 out.print()

    3)<%! java代码%> -----------------会被翻译成servlet 的成员的内容

    jsp注释:不同的注释可见范围是不同

    1)HTML注释:<!--注释内容 -->  ---------可见范围jsp源码、翻译后的servlet、页面显示HTML源码

    2)java注释://单行注释  /* 多行注释*/---------可见范围 jsp 源码 翻译后的servlet

    3)jsp注释:<%-- 注释内容--%> --------可见范围jsp源码可见

  2.jsp运行原理-----------------jsp本质就是servlet

    jsp在第一次访问时会被Web容器翻译成servlet,在执行过程:

      第一次访问----->helloServlet.jsp --------helloServlet_jsp.java------>编译运行

      PS:被翻译后的servlet在Tomcat的work目录中可以找到

  3.jsp指令(3个)

    jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:

    1)page指令 ---- 属性最多的指令(实际开发中page指令默认)

      属性最多的一个指令,根据不同的属性,指导整个页面特性

      格式:<%@page 属性名1=“属性值1” 属性名2 = “属性值2”...%>

      常用属性如下:

        language:jsp 脚本中可以嵌入的语言种类

        pageEncoding :当前jsp文件的本身编码 --- 内部可以包含contentType

        contentType:response.setContentType(text/html;charset = UTF-8)

        session :是否jsp在翻译时自动创建session

        import :导入java的包

        errorPage:当 当前页面出现错误后跳转到哪个页面

        isErrorPage:当前页面是一个处理错误的页面

     2)include 指令

      页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中

      格式:<%@ include file = "被包含的文件地址"%>

    3)taglib 指令

      在jsp页面中引入标签库(jstl标签库、Struts2标签库)

      格式:<%@taglib uri = "标签库地址" prefix = "前缀"%>

  4.jsp内置/隐式对象(9个)

   jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,在jsp脚本中可以直接使用这9个对象

   

   1)out对象

    out的类型:JspWriter

    out 作用就是向客户端输出内容 --------out.write()

    out 缓冲区默认 8kb 可以设置成0 代表关闭out缓冲区,内容直接写到response缓冲器

   2)pageContext对象

    jsp页面的上下文对象,作用如下:

    page对象与pageContext对象不是一回事:

    1)pageContext是一个域对象

      setAttribute(String name,Object obj)

      getAttribute(String name)

      removeAttribute(String name)

    

    pageContext可以向指定的其他域中存取数据

      setAttribute(String name,Object obj, int scope)

      getAttribute(String name,int scope)

      removeAttribute(String name,int scope)

      findAttribute(String name)-------依次从 pageContext域、request域、session域、application域中获取属性,在某个域中获取后将不在向后寻找

    四大作用域:

      page域:当前jsp页面范围

      request域:一次请求

      session域:一次会话

      application域:整个web应用

    2)可以获得其他8大隐式对象:

      例如:pageContext.getRequest()

         pageContext.getSession()

  5.jsp标签(动作)

   1)页面包含(动态包含):<jsp:include page = “被包含的页面”>

   2)请求转发:<jsp:forward page = "要转发的资源"/>  

****************************************************************************************************

2. EL技术

  1.EL表达式:

    el 表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,el出现的目的是要替代jsp页面中脚本的编写。

  2.el从域中取出数据(EL最重要的作用

    jsp脚本:<%=request.getAttribute(name)%>

    EL表达式替代上面的脚本:${requestScope.name}

    el最主要的作用是获得四大域中的数据,格式 ${el表达式}

    el获得pageContext域中的值: ${pageScope.key};

    el获得request域中的值:${requestScope.key};

    el获得session域中的值:${sessionScope.key};

    el获得application域中的值:${applicationScope.key};

    EL从四个域中获得某个值${key};

      ----同样是依次从pageContext域、request域、session域、application域中获取属性,在某个域中获取后将不在向后寻找;

    1)获得普通字符串

    2)获得User对象的值

    3)获得List<User> 的值

  例子:

     <!-- 使用EL表达式获得域中的值 -->
     ${requestScope.company }
     ${sessionScope.user.name }
     ${applicationScope.list[1].name }
     <hr>
     <!-- 使用el表达式 全域查找 -->
     ${company }
     ${user.name}
     ${list[1].name }

3.EL的内置对象(11个)

  pageScope,requestScope,sessionScope,applicationScope

                ---- 获取JSP中域中的数据

  ${pageContext.request.contextPath}

                ----获得web应用的名称

4.EL执行表达式:

  例子:

    ${1+1}

    ${empty user}

    ${user == null?true:false}

********************************************************************************************

1.JSTL技术:

  jstl(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl 的目的同el一样也是要代替jsp 页面中的脚本代码。jstl标准标签库有5个子库,目前常使用的是他的核心库:

  

  2.下载:“http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”网址下载JSTL的安装包:jakarta-taglibs-standard-1.1.2.zip

  导入:

    

  使用jsp的taglib指令导入核心标签库:

        

  3.jstl核心库的常用标签

    1)<c:if test = "  ">

      其中test是返回boolean 的条件

    2)<c:forEach>

      使用方式有两种组合形式:

      <!-- forEach模拟

        for(int i=0; i<=5 ; i++){

          syso(i)

        }

      -->

      <c:forEach begin="0" end = "5" var = "i">

        ${i}<br/>

      </c:forEach>

      <!-- 模拟增强for        productList-----List<Product>

        for(Product product : productList){

          syso(product.getPname());

        }

      -->

      <!-- items:一个集合或数组  var :代表 集合中的某一个元素-->

      <c:forEach items = "${productList }"  var = "pro">

        ${pro.pname}

      </c:forEach>  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="com.itheima.domain.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        //模拟List<String> strList
        List<String> strList = new ArrayList<String>();
        strList.add("itcast");
        strList.add("itheima");
        strList.add("boxuegu");
        strList.add("shandingyu");
        request.setAttribute("strList", strList);

        //遍历List<User>的值
        List<User> userList = new ArrayList<User>();
        User user1 = new User();
        user1.setId(2);
        user1.setName("lisi");
        user1.setPassword("123");
        userList.add(user1);
        User user2 = new User();
        user2.setId(3);
        user2.setName("wangwu");
        user2.setPassword("123");
        userList.add(user2);
        application.setAttribute("userList", userList);

        //遍历Map<String,String>的值
        Map<String,String> strMap = new HashMap<String,String>();
        strMap.put("name", "lucy");
        strMap.put("age", "18");
        strMap.put("addr", "西三旗");
        strMap.put("email", "[email protected]");
        session.setAttribute("strMap", strMap);

        //遍历Map<String,User>的值
        Map<String,User> userMap = new HashMap<String,User>();
        userMap.put("user1", user1);
        userMap.put("user2", user2);
        request.setAttribute("userMap", userMap);

    %>

    <h1>取出strList的数据</h1>
    <c:forEach items="${strList }" var="str">
        ${str }<br/>
    </c:forEach>

    <h1>取出userList的数据</h1>
    <c:forEach items="${userList}" var="user">
        user的name:${user.name }------user的password:${user.password }<br/>
    </c:forEach>

    <h1>取出strMap的数据</h1>
    <c:forEach items="${strMap }" var="entry">
        ${entry.key }====${entry.value }<br/>
    </c:forEach>

    <h1>取出userMap的数据</h1>
    <c:forEach items="${userMap }" var="entry">
        ${entry.key }:${entry.value.name }--${entry.value.password }<br/>
    </c:forEach>

</body>
</html>

******************************************************************************************************************

1.ajax异步加载+jeson数据格式

 1.ajax概述

  1)什么是同步,什么是异步

    同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态

    异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会卡死

  2)ajax的运行原理

    页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到服务器端,在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回给Ajax引擎后,会触发你设置的事件,从而执行自定义的js逻辑代码完成某种页面功能。

  

2.Json数据格式

  json是一种与语言无关的数据交换格式,作用:

    使用ajax进行前后台数据交换

    移动端与服务端的数据交换

  1)Json的格式与解析

    json有两种格式:

      1)对象格式:{"key1":obj,"key2":obj,"key3":obj...}

      2)数组/集合格式:[obj,obj,obj...]

    例如:user对象  用json数据格式表示:

      {"username":"zhangsan","age":28,"password":"123","addr":"北京"}

      List<Product> 用json数据格式表示:

      [{"pid":"10","pname":"小米4C"},{},{}...]

        注意:对象格式和数组格式可以互相嵌套

        注意:json的key是字符串,json的value是Object

     json的解析:

      json是js的原生内容,也就意味着js可以直接取出json对象中的数据

  2)Json的转换插件

    将java的对象或集合转换成json形式字符串

    json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串。

    常用的json转换工具:

      1)jsonlib

      2)Gson:google

      3)fastjson:阿里巴巴

  jsonlib工具使用:

     1.导包

      

    2.

      //使用json的转换工具将对象或集合转成json格式的字符串
        JSONArray fromObject = JSONArray.fromObject(productList);
        String string = fromObject.toString();
        System.out.println(string);

  jsonlib工具使用:

    1.导包:

      

    2.

     Gson gson = new Gson();
        String json = gson.toJson(productList);
        System.out.println(json);

        response.setContentType("text/html;charset=UTF-8");

        response.getWriter().write(json);

4.Jquery 的Ajax技术

 jQuery是一个优秀的js框架,自然对js原生的ajax进行了封装,封装后的ajax的操作方法更简洁,功能更强大,与ajax操作相关的jQuery方法,开发中常用三种:

  1)$.get(url,[data],[callback],[type])

  2)  $.post(url,[data],[callback],[type])

    其中:

      url:表示请求的服务器地址

      data:表示请求服务器端的数据(可以是key=value 形式 也可以是json格式)

      callback:表示服务器成功响应所触发的函数(只有正常成功返回才执行)

      type:表示服务器端返回的数据类型(jQuery会根据指定的类型自动类型转换)

        常用的返回类型:text、json、html

例子代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script type="text/javascript">
    function fn1() {

        //get访问服务器
        $.get(
            "/WEB22/ajaxServlet2",//url地址
            {"name":"张三","age":25},//请求参数,get提交如果有中文,需在提交的servlet中解决编码问题
                                    //需要先编码,再解码
            function(data){ //执行成功后的回调
                //{\"name\":\"tom\",\"age\":21}
                alert(data.name);
            },
            "json"
        );
    }

    function fn2() {
        //post访问服务器
        $.post(
            "/WEB22/ajaxServlet2",//url地址
            {"name":"lisi","age":25},//请求参数 post提交如果有中文,不需在提交的servlet中解决编码问题
                                    //request.setCharacterEncoding("UTF-8");该代码无影响
            function(data){ //执行成功后的回调
                //{\"name\":\"tom\",\"age\":21}
                alert(data.name);
            },
            "json"
        );
    }

</script>

</head>
<body>

    <input type="button" value = "get访问服务器端" onclick="fn1()"><span id="span1"></span>
    <input type="button" value = "post访问服务器端" onclick="fn2()"><span id="span2"></span>

</body>
</html>
package com.itheima.ajax02;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AjaxServlet2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String name = request.getParameter("name");
        String age = request.getParameter("age");

        System.out.println(name + "  " + age);

        //java代码只能返回json格式的字符串
        //{"name":"tom","age":21}
        //需用转义{\"name\":\"tom\",\"age\":21}

        //如果返回的json字符串中含有中文,需设置编码问题
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("{\"name\":\"汤姆\",\"age\":21}");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

  3)$.ajax({option1:value1,option2:value2...});

    常用的option:

      async:是否异步,默认是true,代表异步

      data:发送到服务器的参数,建议使用json格式

      dataType:服务器端返回的数据类型,常用text和json

      success:成功响应执行的函数,对应的类型是function类型

      type:请求方式,POST/GET

      url:请求服务器端地址

例子代码:

function fn3() {
        //ajax访问服务器
        $.ajax({
            url:"/WEB22/ajaxServlet2",
            async:true,
            type:"POST",
            //可以是字符串格式,可以是json格式
            data:{"name":"lucy","age":18},
            success:function(data){
                alert(data.name);
            },
            error:function(){
                alert("请求失败!!");
            },
            dataType:"json"

        });
    }

原文地址:https://www.cnblogs.com/chengshun/p/9764270.html

时间: 2024-10-12 18:05:42

jsp页面渲染的相关文章

Servlet处理业务逻辑,JSP处理视图渲染,Servlet处理请求后,把输出的结果转到JSP页面的解决方法

Servlet处理请求后,一般情况下,请求重定向或转发处理. (dispatcher)请求转发:也被称为服务器端重定向,是指服务器在处理多个request请求的过程中,先后委托多个JSP 接替处理的过程.用dispatcher的方法来实现,通过RequestDispatchers来实现,一个是forward,另一个是include.相应的JSP里实现dispatch的标签也有两个:<jsp:forward/>和<jsp:include/> Servlet跳转到JSP, reques

Spring Framework源码(十三):SpringMVC之从ModelMap到页面渲染

SpringMVC在调用了Controller的方法后会返回ModelAndView对象,这个对象会被传回DispatcherServlet的doDispatch方法中.接下来再调用以下的方法渲染页面: processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException); private void processDispatchResult(HttpServletRequest reque

如何在jsp页面里使用vue

只针对需要的 以下各类同学可以直接跳过 1.不推荐jsp和vue加一起写的 2.说直接用jq写的 3......的 4.吐槽的 5.各种解决方案的 总结以上说的都是对的,但是已经写完了页面,所以 emmmm..... 申明楼主只是个前端自己写的大部分也都是前后的分离的,不懂java不懂jsp,而且页面也是用vue写完了才知道要加入原有的jsp页面,所以记录一下全当教训了. 本文只是针对维护老项目,需要修改或者重新写新的jsp页面的同学. 开始 1. jsp 和html(vue)页面有申明区别 我

【中文乱码】jsp页面传值到后台中文乱码情况.

作为一名程序员,在项目中偶尔会遇到jsp传到后台出现中文乱码而不知所措.下面将讲解出现中文乱码的几种情况. 一.jsp页面没有设置编码格式, 二,后台没有在web.xml中字符编码过滤器, 三,在ajax提交的时候用get提交, 四,数据库连接的时候也可以试着加上字符编码, 五,所有的前台和后台字符编码必须一致.

高性能滚动 scroll 及页面渲染优化

本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的关系,节流与防抖,pointer-events:none 优化滚动.因为本文涉及了很多很多基础,可以对照上面的知识点,选择性跳到相应地方阅读.    滚动优化的由来 滚动优化其实也不仅仅指滚动(scroll 事件),还包括了例如 resize 这类会频繁触发的事件.简单的看看: 1 2 3 4 var i = 0; window.addEventListener('scroll',function(){   

java分页的实现(后台工具类和前台jsp页面)

1.首先,新建一个类Page.java 1 public class Page implements Serializable { 2 private static final long serialVersionUID = -3198048449643774660L; 3 private int pageNow = 1; // 当前页数 4 private int pageSize = 10; // 每页显示记录的条数 5 private int totalCount; // 总记录条数 6

js从jsp页面获得值

<input type="hidden" name="duan" value="<s:property value="#session.ipNumber"/>"/> 但下面不行 <input type="hidden" name="duan" value="<% session.getAttribute("ipNumber"

jsp页面通过使用s标签获取值栈中的值(初识)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitio

Struts的JSP页面标签&lt;html:errors/&gt;的使用方法

一个jsp里两个或多个<html:errors/>时如何让他们分别显示自己该显示的错误信息 关键字: <html:errors/> 一个jsp里两个或多个<html:errors/> 分别显示错误信息 我在一个jsp里用到了两次<html:errors/>,分别在两个form表单里,可是写了两个之后<html:errors/>, 点任何一个表单中的提交按钮这两个<html:errors/>都会一起显示错误信息, 要想让他们分别显示自己