资讯专栏INFORMATION COLUMN

JavaWeb开发

soasme / 817人阅读

摘要:在页面中执行的表达式语法表达式注意表达式不以分号结束示例张学友声明一个字符串变量声明一个返回整型值的函数单行注释多行注释这里是脚本代码测试哈哈你好四页面生命周期问答题当用户第一次请求一个页面时,首先被执行的方法是构造方法答案选。

java web开发学习笔记。
一、jsp简介

JSP与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。

JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。

JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。

JSP文件后缀名为 *.jsp

JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
二、Tomcat服务器的目录结构

Tomcat目录文件

WEB-INF
classes 目录下为生成的字节码文件
lib 目录下为jar包

Tomcat安装目录

➜  tomcat pwd
/WEB/java/tomcat

启动Tomcat命令:

➜  sudo sh ./bin/startup.sh
WEB-INF目录结构

WEB-INF 是Java的WEB应用的安全目录。所谓安全目录就是客户端无法访问,只有服务端可以访问的目录。

web.xml,项目部署文件

classes文件夹,用以放置*.class文件

lib文件夹,用于存放需要的jar包

web.xml 配置默认欢迎文件:




    
        /index.jsp
    

三、JSP语法 1、jsp指令

如例:index.jsp

<%--
  Created by IntelliJ IDEA.
  User: kaiyiwang
  Date: 18/3/5
  Time: 00:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  
  $END$
  

2、jsp注释

// html注释


// jsp 注释
<%-- jsp 注释,页面不显示,在客户端代码中也不可见 --%>

<%
// 单行注释

/* 多行注释 */
%>
3、jsp脚本

在jsp脚本中执行的代码

语法:

<% Java 代码 %>

例子:

<%--
  Created by IntelliJ IDEA.
  User: kaiyiwang
  Date: 18/3/5
  Time: 00:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  
  <%
    // 单行注释
    /*
      多行注释
     */

    out.println("这里是脚本代码测试");

  %>
  

4、jsp声明

在jsp页面中声明变量或方法
语法:

<%! Java代码 %>


  <%!
    
    
    String name = "张学友";  // 声明一个字符串变量


      /**
       *  声明一个返回整型值的函数
       * @param x
       * @param y
       * @return
       */
    int add(int x, int y)
    {
       return x + y;
    }
  %>

  <%
    // 单行注释
    /*
      多行注释
     */

    out.println("这里是脚本代码测试,哈哈");

    out.println(name);
    int sum = add(2, 3);
    out.println(sum);


  %>
  
5、jsp表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

在JSP页面中执行的表达式
语法:

<%=表达式 %>  // 注意:表达式不以分号结束

示例:



  <%!


    String name = "张学友";  // 声明一个字符串变量


      /**
       *  声明一个返回整型值的函数
       * @param x
       * @param y
       * @return
       */
    int add(int x, int y)
    {
       return x + y;
    }
  %>

  <%
    // 单行注释
    /*
      多行注释
     */

    out.println("这里是脚本代码测试,哈哈");

    out.println(name);
    int sum = add(2, 3);
    out.println(sum);
  %>
  
你好,<%=name %>
x+y=<%=add(1, 10)%>
四、JSP页面生命周期

问答题:
当用户第一次请求一个jsp页面时,首先被执行的方法是( )

A:构造方法

B: jspInit()

C:jspService()

D:jspDestroy()


答案选A。
解析:
当用户第一次请求一个jsp页面时,首先被执行的方法是 构造方法。
就是转换为class文件后,他会创建一个Servlet的实例,然后调用Servlet的构造方法,再调用jspInit()方法

​(1)JSP引擎先把该JSP文件转换成一个Java源文件(Servlet),在转换时如果发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息。

(2)如果转换成功,JSP引擎用javac把该Java源文件编译成相应的class文件。

(3)创建一个该Servlet(JSP页面的转换结果)的实例,该Servlet的jspInit()方法被执行,jspInit()方法在Servlet的生命周期中只被执行一次。

小试牛刀

分别使用表达式和脚本实现打印九九乘法表

示例:

<%--
  Created by IntelliJ IDEA.
  User: kaiyiwang
  Date: 18/3/5
  Time: 00:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    打印九九乘法表
  
  

  <%!

      /**
       *  打印九九乘法表
       * @return
       */
    String printMultiTable()
    {
      String s = "";

      for(int i=1; i <= 9; i++)
      {
        for(int j=1; j <= i; j++)
        {
          s += i + "*" + j + "=" + (i * j) + "    ";
        }

        s += "
"; } return s; } /** * JSP内置out对象,使用脚本方式调用,打印九九乘法表 * * @param out */ void printMultiTable2(JspWriter out) throws Exception { for(int i=1; i <= 9; i++) { for(int j=1; j <= i; j++) { out.println(i + "*" + j + "=" + (i * j) + "    "); } out.println("
"); } } %> 表达式打印 <%=printMultiTable() %>
脚本打印,注意函数调用后边有分号 <% printMultiTable2(out); %>

打印结果:

1*1=1    
2*1=2    2*2=4    
3*1=3    3*2=6    3*3=9    
4*1=4    4*2=8    4*3=12    4*4=16    
5*1=5    5*2=10    5*3=15    5*4=20    5*5=25    
6*1=6    6*2=12    6*3=18    6*4=24    6*5=30    6*6=36    
7*1=7    7*2=14    7*3=21    7*4=28    7*5=35    7*6=42    7*7=49    
8*1=8    8*2=16    8*3=24    8*4=32    8*5=40    8*6=48    8*7=56    8*8=64    
9*1=9    9*2=18    9*3=27    9*4=36    9*5=45    9*6=54    9*7=63    9*8=72    9*9=81    
五、JSP内置对象

JSP内置对象又称为隐式对象,是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量

JSP所支持的九大隐式对象:

JSP内置对象是 Web 容器创建的一组对象,不适用new关键在创建就可以使用的内置对象。

<%
    int[] value = {60, 20, 25};
    
    for(int i:value){
      out.println(i);
    }
  %>
六、JSP基本原理

JSP的本质是Servlet,当用户向指定 Servlet 发送请求时,Servlet利用输出流动态生成 HTML 页面,包括每一个静态的 HTML 标签和所有在HTML页面中出现的内容。

示例代码:
http://localhost:8080/webDemo/index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


     
    我的第一个JSP页面


欢迎大家访问我的第一个JSP页面。

<% for(int i = 0; i < 5; i++) { // out.println(""); // out.println(i); %> JSP 原理分析
<%}%>

输出结果:

从表面上看,JSP 页面已经不需要 Java 类,似乎完全脱离了 Java 面向对象的特征。事实上,JSP 的本质依然是 Servlet(一个特殊的JAVA类),每个JSP 页面就是一个 Servlet 实例-JSP页面由系统编译成 Servlet,Servlet再负责响应用户的请求。对于Tomcat而言,JSP 页面生成的 Servlet 放在 work 路径对应的 Web 应用下。

当启动 Tomcat 之后,可以在 Tomcat 的 work/Catalina/localhost/webDemo/org/apache/jsp目录下找到如下文件(本web应用名为 webDemo, 上面 JSP 页的名为 index.jsp):index_jsp.javaindex_jsp.class

这两个文件都是由 Tomcat 生成的, Tomcat 根据 JSP 页面生成对应 Servlet 的 Java 文件和 class 文件

下面是 index_jsp.java 文件的源代码,这是一个特殊的 Java 类,是一个 Servlet 类。
index_jsp.java

/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/7.0.73
 * Generated at: 2018-04-15 16:46:57 UTC
 * Note: The last modified time of this file was set to
 *       the last modified time of the source file after
 *       generation to assist with modification tracking.
 */
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map _jspx_dependants;

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map getDependants() {
    return _jspx_dependants;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html;charset=UTF-8");
      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;

      out.write("
");
      out.write("
");
      out.write("
");
      out.write("	 
");
      out.write("	我的第一个JSP页面
");
      out.write("
");
      out.write("
");
      out.write("

欢迎大家访问我的第一个JSP页面。

"); out.write(" "); out.write(" "); for(int i = 0; i < 5; i++) { // out.println(""); // out.println(i); out.write(" "); out.write("JSP 原理分析
"); } out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write(""); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }

相关文章:Java Web基础学习

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68481.html

相关文章

  • Nodejs和JavaWeb协助开发

    摘要:实现不同语言间进行协助开发,可以使用通信的方式来实现,这次实现和的协助开发,是项目主要服务端,由于要处理一些系统底层的事务,所以要用提供一个辅助服务,为主服务端处理相关事务,以下是搭建流程和服务间通信原理。 实现不同语言间进行协助开发,可以使用通信的方式来实现,这次实现Nodejs和JavaWeb的协助开发,Nodejs是项目主要服务端,由于要处理一些系统底层的事务,所以要用JavaW...

    HmyBmny 评论0 收藏0
  • Nodejs和JavaWeb协助开发

    摘要:实现不同语言间进行协助开发,可以使用通信的方式来实现,这次实现和的协助开发,是项目主要服务端,由于要处理一些系统底层的事务,所以要用提供一个辅助服务,为主服务端处理相关事务,以下是搭建流程和服务间通信原理。 实现不同语言间进行协助开发,可以使用通信的方式来实现,这次实现Nodejs和JavaWeb的协助开发,Nodejs是项目主要服务端,由于要处理一些系统底层的事务,所以要用JavaW...

    miguel.jiang 评论0 收藏0
  • Nodejs和JavaWeb协助开发

    摘要:实现不同语言间进行协助开发,可以使用通信的方式来实现,这次实现和的协助开发,是项目主要服务端,由于要处理一些系统底层的事务,所以要用提供一个辅助服务,为主服务端处理相关事务,以下是搭建流程和服务间通信原理。 实现不同语言间进行协助开发,可以使用通信的方式来实现,这次实现Nodejs和JavaWeb的协助开发,Nodejs是项目主要服务端,由于要处理一些系统底层的事务,所以要用JavaW...

    lieeps 评论0 收藏0
  • 最详细的JavaWeb开发基础之java环境搭建(Windows版)

    摘要:会让初学者的你少踩很多坑大实话,如果你已经掌握了开发的基础部分,请耐心等待后续的进阶阶段。下面开始我们环境的安装配置。下载完成之后会是文件。要注意在已有的里面要加上表示另一个。到这里我们就完成了环境的配置,接下来我们在命令行中进行验证。 showImg(https://segmentfault.com/img/bVbapC7?w=475&h=285); 首先欢迎大家来学习JavaWeb...

    roundstones 评论0 收藏0
  • JavaWEB开发12——el&jstl

    摘要:列名字段名表单中的属性名要一至创建数据库及表开发应用搭建开发环境添加包创建实现类层业务层接口实现类数据访问层接口实现类添加工具类表示层要注意注册页面登录页面 一、JavaWeb开发模式 C/S:客户端 / 服务器 (胖客户端)B/S:浏览器 / 服务器 (瘦客户端) JavaBean: 就是一个普通类(实体bean),包含三样标准:一个无参构造、私有属性、公共的getter和se...

    Lionad-Morotar 评论0 收藏0
  • 深入分析JavaWeb Item1 -- JavaWeb开发入门

    摘要:中主要是使用语言。将的动态功能和标准的安全性引入大型网络应用的开发集成部署和管理之中。提供了一个图形界面的管理工具,称为信息服务管理器,可用于监视配置和控制服务。 一、基本概念 1.1、WEB开发的相关知识   WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。  Internet上供外界访问的Web资源分为: 静态web资源(如html 页面...

    tinna 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<