zoukankan      html  css  js  c++  java
  • jsp学习

    jsp为什么会出现?

    用servlet做页面很麻烦,jsp就是为了让servlet更好地做界面,对servlet做了包装而已。

    jsp是什么?

    1、jsp运行在服务器

    2、jsp(java server page)

    3、jsp的基础是servlet(相对于对servlet进行一个包装)。

    4、jsp是一个综合技术,jsp=html+java+jsp标签+js+css。

    jsp无需配置,直接使用。如果修改了jsp文件,不需要重新reload web应用。

    jsp如何访问 http://ip:8088/web应用名/jsp路径

    jsp是一种动态网页技术。

    快速入门案例

    jsp本身是动态地,jsp文件不能放在src目录下,可以放在web-inf目录下。

    jsp文件,showTime.jsp被翻译成showTime_jsp.java,然后被编译成showTime_jsp.class

    运行原理:

    如果是第一次访问该jsp文件:web服务器就会把showTime.jsp翻译成一个Servlet showTime_jsp.java,再将其编译成一个showTime_jsp.class,然后再把class加载到内存。

    如果是第二次或者以后,就直接访问内存。

    web有一个内存,记录某jsp文件是否被访问过。因此jsp也是单例。所以当你jsp第一次访问一个jsp时比较慢。

    如果某个jsp文件被修改了,相当于是第一次访问了。相当于重新访问jsp文件。

    因为第一次访问时,jsp要被翻译并编译文件加载到内存中,所以第一次访问慢,如果是以后访问jsp,那就直接调用内存中jsp实例。

     案例:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!-- language表示jsp的嵌入的语言 pageEncoding表示页面编码方式-->
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'showTime.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
    
      </head>
      
      <body>
        <%
            //<%之间可以写我们的java代码,就和我们在java文件中写java代码一样的。
            out.println("hello,world"+"当前日期"+new Date());
            //int i=9/0;
            //out.println(i);
         %>
      </body>
    </html>

    //为什么可以直接使用out对象?

    out对象是jsp的内置对象(jsp提供9个内置对象)。

    java代码是怎么发过去的?

    <%
            int i=90;
            int j=i+90;
         %>
         <h1>测试</h1>
         <%
             out.println("j="+j);
          %>

    当被翻译成jsp后:java文件

    public jspService(){
        int i=90;
        int j=i+90;
    }

    1、就是有多个<% %>其实相当于一个大的<% %>

    2、在<% %>中定义的变量,会成为service函数的局部变量。

    JSP全程是Java Server Pages,它和servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。

    JSP这门技术的最大特点在于,写jsp就像在写html,但:

    ①它相比html而言,html只能为用户提供静态数,而jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

    ②相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。

     JSP基础--语法

    (1)指令元素

    (2)动作元素

    jsp的语法

    ①指令元素

    概念:用于从jsp发送一个信息到容器,比如设置全局变量,文字编码,引入包

    1.page指令

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

    contentType="text/html;charset=utf-8"

    最终在servlet里会用代码setContentType("text/html;charset=utf-8")来实现。

    language表示内嵌的语言,import表示要引入的包,session有两个值:true和false,

    session=false,可以禁止使用session.是否在jsp页面获取session对象。

    buffer给out对象使用的缓冲区是多大,默认8k.

    autoFlash当buffer满后,是否自动刷新到浏览器。

    isThreadSafe=[true|false]默认true表示该jsp的线程安全由程序员控制。false由对应的servlet控制线程安全。

    errorPage:自动跳转到指定的页面。

    <%@ page language="java" errorPage="error.jsp" import="java.util.*" pageEncoding="utf-8"%>

    contentType和pageEncoding的区别?

    contentType指定网页以什么方式显示

    pageEncoding指定Servlet引擎以什么方法翻译jsp->servlet,并指定网页以什么方式显示。

    pageEncoding比contentType更为强大。

    2.inclulde指令

    用法如下:

    <%@ include file="文件路径" %>

     <body>
        <%@ include file="/b.jsp" %>
      </body>

    b.jsp页面中要把<body></body>和

    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    删除。

    include指令只有一个file属性,该属性用于指定插入到JSP页面当前位置的文件资源。(注意:插入的路径一般使用相对路径)

    被插入文件可以是一个JSP文件、HTML文件、文本文件或一段Java代码,单要保证被插入的文件是可访问的。

    ②脚本元素

    1.java片段:

    <% java代码 %>

    2.表达式:

    <%=java表达式%>

    3.声明

    <%! %>

     <%! int i=900;//该jsp对应的Servlet的成员变量
       %>

    面试题:

    <%! int i=90; %>
        
        <%
            int j=90;
            out.println();
            out.println("i="+(++i)+" j="+(++j));
            //第一次访问时输出什么 i=91 j=91
            //第二次访问?i=92 j=91
            //第三次访问?i=93 j=91
         %>

    在<%! %>里声明函数

    函数不能砸<%  %>里定义。

    ③动作元素

     tomcat有个保护机制,不能访问WEB-INF文件夹里的内容。

    把jsp代码放在WEB-INF中保护起来。

    在开发jsp的过程中,我们通常把jsp放入WEB-INF目录,目的是为了防止用户直接访问这些jsp文件。在WebRoot下我们有一个入口页面,它的主要作用是转发。index.jsp中这样显示:

    <jsp:forward page="WEB-INF/manage.jsp"></jsp:forward>

    将其他jsp页面都放在WEB-INF中。

    include动作和include指令的区别

    include指令只会生成一个servlet,而include动作会有生成两个servlet.

     前者是动态引入,后者是动态引入。

    <%@ include file=""%>静态引入

    <jsp:include page=""></jsp:include>动态引入

    相同点:把一个文件引入到另外一个文件。

    区别:静态引入 把两个jsp翻译成一个Servlet,所以被引入的文件不要包含<body><htm.>

    动态引入  把两个jsp分别翻译,所以被引入的jsp文件包含有<html><body>也不会报错。

    include动作要编译,反应慢。

    jsp中的注释:
    <!-- 这是注释 -->

    <%--这是注释 --%>(建议使用这种)。

  • 相关阅读:
    浅谈python socket编程
    MYSQL(三)
    python数据库操作之pymysql模块和sqlalchemy模块(项目必备)
    MYSQL(二)
    ajax应用篇
    浅析tornado web框架
    CSS学习笔记06 简单理解line-height
    CSS学习笔记05 display属性
    CSS学习笔记04 CSS文字排版常用属性
    CSS学习笔记03 CSS层叠性、继承性、特殊性
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9852565.html
Copyright © 2011-2022 走看看