您的位置:首页 > Web前端 > JavaScript

JSP学习笔记---基础详解

2018-03-30 22:24 363 查看
本文是我在学习Servlet后,学习的。因为JSP就是一种servlet。所以建议先搞懂什么是servlet。再来看本文。(可以看我的servlet的9个学习笔记)
我后来没有整理笔记的顺序。只是简单的标注了123.
现在我还在看一个和这个有关的文档,可能会做出不定时更新。需要的朋友可以关注哦!!!欢迎随时交流!!!

如果想弄懂jsp的本质,当你写好一个jsp后,在tomcat中部署运行后会出现在work文件夹中的相应的.java文件。
这个就是jsp引擎翻译好的.java文件,也是jsp的本质(具体解释在本文的第7个部分,可以先看本质,再看应用的语法结构)。
所以想学好jsp请打开相应的.java文件,结合着学习。编译的时候可以在其中改错。

1.目录结构
当我创建了一个web应用后,会出现这个目录。当然,我后来用myEclipse2017会多几个文件夹,但是主要的就是这几个。
src:保存java的代码
JRE System Library:所使用JRE的类库
Java EE 5 Libraries:使用的JAVA EE 5的版本的类库
WebRoot:web项目核心,部署的时候,就是把目录下所有文件拷贝到Tomcat中

   META-INF:版本的设置;不要更改
   WEB-INF:
lib第三方架包,
web.xml整个项目的总控制器。
   WEB-INF中自动生成一个index.jsp文件

2 9大内置对象(就是不需要自己声明,只需要直接使用就可以。)
pageContext    代表当前页面
    作用:基本包含该界面所有的对象和基本信息。如果要传递一个界面,只需要传递这个对象就可以。

request         一次请求
session         多次请求,不能关闭浏览器(一次对话)
    如果在<%@ page session=“false”%>,那么就相当于在.java中不会默认声明一个session对象。那么该界面就不可以使用session来处理。

application     整个服务器
    _jspServive()中是这么定义的:  ServletContext application = null;

                                                        application = pageContext.getServletContext();

out 用于输出
        源码中定义为:JspWriter out = null; out = pageContext.getOut();

request
response

3.JSP指令标签:
1.page指令,在jsp中如果想要导包需要用到import指令。
例如,在自动生成的index.jsp文件中第一行代码一般为:
              <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
而且该page其中还有很多的参数可以使用,比较常用的还有session="true"
如何判断导入什么包:通常如果该.jsp用的哪个.java文件中的函数,就需要在import中导入相应的java类就可以了。

2.taglib指令,可以在jsp页面中引入第三方标签库(JSTL,SpringMVC,Struts)
URL:引入的地址,predix:别名
例如<%@ taglib url="http://java.sun.com/jst1/core" prefix="c" %>

3.include指令,实现源码级导入。是静态的。
例如:在2.jsp页面添加该句话,相当于把included.jsp添加进来。
<%@ include file="included.jsp" @>

结果,在Tomcat中是找不到include.java。但是会发现included.jsp的代码被添加到了2_jsp.java中.相当于是源码的导入,
因此如果included.jsp中存在变量a,b。那么在2.jsp中可以直接使用。

4.JavaBean
有一种类型的类,他其中的所有属性都是私有方法,并且都提供getter和setter方法,
同时也提供一个无参数构造方法。这样的方法也可以被称作是VO,entity,model,bean。

5.jsp动作标签
  5.1、完成页面跳转
使用param传递的参数必须使用request.getParameter();进行接收参数
形式:<jsp:forward page="included.jsp">
       <jsp:param value="sylar" name="username"/>
     </jsp:forward>
    这种方式实现的页面插入是动态的,就相当于2_jsp.java代码中不会包括included.jsp代码。二者是独立的。(与上面讲的静态包括区别)

  5.2在页面中使用javabean
       1.可以直接创建类的对象,然后对类进行赋值。
Student stu = new Students();
stu.setStuNo("1");
stu.setStuName("sylao"):
       2.使用useBean标签完成。
表示创建了一个stu的对象,那么对这个对象两个属性赋值。
<jsp:useBean id="stu" class="com.sylar.entity.Student" scope="request"></jsp:useBean>
<jsp:setProperty property="stuNo" value="2" name="stu" />
<jsp:setProperty property="stuName" value="sylee" name="stu"/>

在<body>中引用
<body>
<jsp:getProperty property="stuNo" name="stu" />
<js[:getProperty property="stuName" name="stu" />
</body>

6.el表达式
作用:可以直接从request、pageContext、session、application中获取数据(Attribute)
在body中为  ${name}获得一个key为name的值。当然这么写就是省略了session、request的省略。
如果忽略了这个限制,默认从最小的开始调用,顺序为从pageContext,request,session,application中找name这个key的名字,找到就提取出value
   ${stu.sname}获取stu对象中的sname属性值
--------------------------------------------------------------------------------------------------------------------------------
前面部分多数讲的是语法结构,现在我们来看下JSP的本质到底是什么回事!!!
-------------------------------------------------------------------------------------------------------------------------------

7.JSP的本质

JSP本质是特殊的servlet,本本质是java类。[/b]

详细解释:
就是当你编写一个.jsp后,通过jsp引擎会转译成servlet。也就是一个相应的.java文件,在被编译成.class文件。
在Tomcat的work文件夹中,可以找到被jsp引擎转译后的.java的文件。打开该文件。
会发现,原本在jsp中写的html语句和out.print("<html...>")(或者out.println("<html...>))其实是一回事。
在JSP中的静态信息(例如<html>等)在“.java文件”中都是使用out.write()完成打印!这些静态信息都是作为字符串输出给了客户端。
例如:当你的.jsp界面中有如下代码时:在相应的.java中会显示如下形式。
                                        


                                                (*.JSP)

                                       


                                                            (*.JAVA)

同时,在该项目的web.hmtl的文件中(tomcat中),查看有关.jsp的配置信息后会发现。
        当你访问.jsp的文件时候,是统一去找.JspServlet的这个类。这个类会根据你调用的不同的jsp文件,去找相应的.java。

       比如,你的jsp是1.jsp。那么不是直接去找1_jsp.java这个文件。

                                




功能:用于实现动态网页技术。
常见的动态页面技术:jsp、asp、php
JSP优点是页面表现方便,但是缺点是逻辑处理麻烦,想上面那个判断a!=b的例子。
但是servlet是逻辑处理方便,但是页面变现麻烦,因此现在采用jsp+servlet+javabean的模式。
一般采用jsp做表现+servlet业务逻辑+javabean用来分装数据,封装模型。

8.脚本语法
HTML注释: <!--  Comments  -->但是该注释在JSP编译成.java时是存在的,他不会被忽略,而且会被送到客户端浏览器。
                    但是在浏览器显示客户端发送回来的html时是不会显示的,因为他是html的注释。

Servlet注释:<%-- Comments --> comments在JSP编译成.java的时候会被忽略



"声明”:<%!  ......  %>     用于定义一个成员变量或者一些方法。该内容会被放在_jspService()方法之外,被类直接包含。
“表达式”:<%=   comments   %> 该方法与out.print()效果相同,comments相当于是out.print()的参数。
“脚本段”:<% ..... %>  如果两段的<%  .... %>中间有什么内容,都是连通的。语句放在_jspService()内部。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息