• Java Web 笔记(3)


    8、JSP

    8.1、什么是JSP

    Java Server Pages : Java服务器端页面,也和Servlet一样,用于动态Web技术!

    最大的特点:

    • 写JSP就像在写HTML
    • 区别:
      • HTML只给用户提供静态的数据
      • JSP页面中可以嵌入JAVA代码,为用户提供动态数据;

    8.2、JSP原理

    思路:JSP到底怎么执行的!

    • 代码层面没有任何问题

    • 服务器内部工作

      tomcat中有一个work目录;

      IDEA中使用Tomcat的会在IDEA的tomcat中生产一个work目录

    我电脑的地址:

    C:UsersAdministrator.IntelliJIdea2018.1system	omcatUnnamed_javaweb-session-cookieworkCatalinalocalhostROOTorgapachejsp
    

    发现页面转变成了Java程序!

    浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet!

    JSP最终也会被转换成为一个Java类!

    JSP 本质上就是一个Servlet

    //初始化
      public void _jspInit() {
          
      }
    //销毁
      public void _jspDestroy() {
      }
    //JSPService
      public void _jspService(.HttpServletRequest request,HttpServletResponse response)
          
    
    1. 判断请求

    2. 内置一些对象

      final javax.servlet.jsp.PageContext pageContext;  //页面上下文
      javax.servlet.http.HttpSession session = null;    //session
      final javax.servlet.ServletContext application;   //applicationContext
      final javax.servlet.ServletConfig config;         //config
      javax.servlet.jsp.JspWriter out = null;           //out
      final java.lang.Object page = this;               //page:当前
      HttpServletRequest request                        //请求
      HttpServletResponse response                      //响应
      
    3. 输出页面前增加的代码

      response.setContentType("text/html");       //设置响应的页面类型
      pageContext = _jspxFactory.getPageContext(this, request, response,
                                                null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
      
    4. 以上的这些个对象我们可以在JSP页面中直接使用!

    在JSP页面中;

    只要是 JAVA代码就会原封不动的输出;

    如果是HTML代码,就会被转换为:

    out.write("<html>
    ");
    

    这样的格式,输出到前端!

    8.3、JSP基础语法

    任何语言都有自己的语法,JAVA中有,。 JSP 作为java技术的一种应用,它拥有一些自己扩充的语法(了解,知道即可!),Java所有语法都支持!

    JSP表达式

      <%--JSP表达式
      作用:用来将程序的输出,输出到客户端
      <%= 变量或者表达式%>
      --%>
      <%= new java.util.Date()%>
    

    jsp脚本片段

      <%--jsp脚本片段--%>
      <%
        int sum = 0;
        for (int i = 1; i <=100 ; i++) {
          sum+=i;
        }
        out.println("<h1>Sum="+sum+"</h1>");
      %>
    
    

    脚本片段的再实现

      <%
        int x = 10;
        out.println(x);
      %>
      <p>这是一个JSP文档</p>
      <%
        int y = 2;
        out.println(y);
      %>
    
      <hr>
    
    
      <%--在代码嵌入HTML元素--%>
      <%
        for (int i = 0; i < 5; i++) {
      %>
        <h1>Hello,World  <%=i%> </h1>
      <%
        }
      %>
    

    JSP声明

      <%!
        static {
          System.out.println("Loading Servlet!");
        }
    
        private int globalVar = 0;
    
        public void kuang(){
          System.out.println("进入了方法Kuang!");
        }
      %>
    

    JSP声明:会被编译到JSP生成Java的类中!其他的,就会被生成到_jspService方法中!

    在JSP,嵌入Java代码即可!

    <%%>
    <%=%>
    <%!%>
    
    <%--注释--%>
    

    JSP的注释,不会在客户端显示,HTML就会!

    8.4、JSP指令

    <%@page args.... %>
    <%@include file=""%>
    
    <%--@include会将两个页面合二为一--%>
    
    <%@include file="common/header.jsp"%>
    <h1>网页主体</h1>
    
    <%@include file="common/footer.jsp"%>
    
    <hr>
    
    
    <%--jSP标签
        jsp:include:拼接页面,本质还是三个
        --%>
    <jsp:include page="/common/header.jsp"/>
    <h1>网页主体</h1>
    <jsp:include page="/common/footer.jsp"/>
    
    

    8.5、9大内置对象

    • PageContext 存东西
    • Request 存东西
    • Response
    • Session 存东西
    • Application 【SerlvetContext】 存东西
    • config 【SerlvetConfig】
    • out
    • page ,不用了解
    • exception
    pageContext.setAttribute("name1","秦疆1号"); //保存的数据只在一个页面中有效
    request.setAttribute("name2","秦疆2号"); //保存的数据只在一次请求中有效,请求转发会携带这个数据
    session.setAttribute("name3","秦疆3号"); //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
    application.setAttribute("name4","秦疆4号");  //保存的数据只在服务器中有效,从打开服务器到关闭服务器
    

    request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!

    session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;

    application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;

    8.6、JSP标签、JSTL标签、EL表达式

    <!-- JSTL表达式的依赖 -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- standard标签库 -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    
    

    EL表达式: ${ }

    • 获取数据
    • 执行运算
    • 获取web开发的常用对象

    JSP标签

    <%--jsp:include--%>
    
    <%--
    http://localhost:8080/jsptag.jsp?name=kuangshen&age=12
    --%>
    
    <jsp:forward page="/jsptag2.jsp">
        <jsp:param name="name" value="kuangshen"></jsp:param>
        <jsp:param name="age" value="12"></jsp:param>
    </jsp:forward>
    

    JSTL表达式

    JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签,可以供我们使用,标签的功能和Java代码一样!

    格式化标签

    SQL标签

    XML 标签

    核心标签 (掌握部分)

    JSTL标签库使用步骤

    • 引入对应的 taglib
    • 使用其中的方法
    • 在Tomcat 也需要引入 jstl的包,否则会报错:JSTL解析错误

    c:if

    <head>
        <title>Title</title>
    </head>
    <body>
    
    
    <h4>if测试</h4>
    
    <hr>
    
    <form action="coreif.jsp" method="get">
        <%--
        EL表达式获取表单中的数据
        ${param.参数名}
        --%>
        <input type="text" name="username" value="${param.username}">
        <input type="submit" value="登录">
    </form>
    
    <%--判断如果提交的用户名是管理员,则登录成功--%>
    <c:if test="${param.username=='admin'}" var="isAdmin">
        <c:out value="管理员欢迎您!"/>
    </c:if>
    
    <%--自闭合标签--%>
    <c:out value="${isAdmin}"/>
    
    </body>
    

    c:choose c:when

    <body>
    
    <%--定义一个变量score,值为85--%>
    <c:set var="score" value="55"/>
    
    <c:choose>
        <c:when test="${score>=90}">
            你的成绩为优秀
        </c:when>
        <c:when test="${score>=80}">
            你的成绩为一般
        </c:when>
        <c:when test="${score>=70}">
            你的成绩为良好
        </c:when>
        <c:when test="${score<=60}">
            你的成绩为不及格
        </c:when>
    </c:choose>
    
    </body>
    

    c:forEach

    <%
    
        ArrayList<String> people = new ArrayList<>();
        people.add(0,"张三");
        people.add(1,"李四");
        people.add(2,"王五");
        people.add(3,"赵六");
        people.add(4,"田六");
        request.setAttribute("list",people);
    %>
    
    
    <%--
    var , 每一次遍历出来的变量
    items, 要遍历的对象
    begin,   哪里开始
    end,     到哪里
    step,   步长
    --%>
    <c:forEach var="people" items="${list}">
        <c:out value="${people}"/> <br>
    </c:forEach>
    
    <hr>
    
    <c:forEach var="people" items="${list}" begin="1" end="3" step="1" >
        <c:out value="${people}"/> <br>
    </c:forEach>
    
    

    9、JavaBean

    实体类

    JavaBean有特定的写法:

    • 必须要有一个无参构造
    • 属性必须私有化
    • 必须有对应的get/set方法;

    一般用来和数据库的字段做映射 ORM;

    ORM :对象关系映射

    • 表--->类
    • 字段-->属性
    • 行记录---->对象

    people表

    id name age address
    1 秦疆1号 3 西安
    2 秦疆2号 18 西安
    3 秦疆3号 100 西安
    class People{
        private int id;
        private String name;
        private int id;
        private String address;
    }
    
    class A{
        new People(1,"秦疆1号",3,"西安");
        new People(2,"秦疆2号",3,"西安");
        new People(3,"秦疆3号",3,"西安");
    }
    
    • 过滤器
    • 文件上传
    • 邮件发送
    • JDBC 复习 : 如何使用JDBC , JDBC crud, jdbc 事务

    10、MVC三层架构

    什么是MVC: Model view Controller 模型、视图、控制器

    10.1、早些年

    用户直接访问控制层,控制层就可以直接操作数据库;

    servlet--CRUD-->数据库
    弊端:程序十分臃肿,不利于维护  
    servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码
    
    架构:没有什么是加一层解决不了的!
    程序猿调用
    |
    JDBC
    |
    Mysql Oracle SqlServer ....
    

    10.2、MVC三层架构

    Model

    • 业务处理 :业务逻辑(Service)
    • 数据持久层:CRUD (Dao)

    View

    • 展示数据
    • 提供链接发起Servlet请求 (a,form,img…)

    Controller (Servlet)

    • 接收用户的请求 :(req:请求参数、Session信息….)

    • 交给业务层处理对应的代码

    • 控制视图的跳转

      登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username,password)---->交给业务层处理登录业务(判断用户名密码是否正确:事务)--->Dao层查询用户名和密码是否正确-->数据库
      
  • 相关阅读:
    cuda(2)---方阵乘法
    cuda(1)-imageBlur
    python(6) 字符串操作
    CUDA 编程之Release模式和Debug模式
    20200909 day4 刷题记录
    20200908 day3 刷题记录
    20200906 day1 模拟(一)
    刷题Day 4-6 树形dp三题
    4.28 刷题Day 3 树形dp一题
    DTQ2019-D1T2 括号树 题解
  • 原文地址:https://www.cnblogs.com/xjtu-lyh/p/12333889.html
Copyright © 2020-2023  润新知