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中的注释:
<!-- 这是注释 -->

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

 

posted @ 2018-10-25 20:20  寒潭渡鹤影  阅读(182)  评论(0编辑  收藏  举报