1. JSP简介

JSP(Java ServerPages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据,运行在服务器端(底层是servlet)。

jsp: 作为请求发起页面,例如显示表单、超链接;作为请求结束页面,例如显示数据。

Servlet:作为请求中处理数据的环节。

jsp的组成

jsp = html +java脚本 + jsp标签(指令)

jsp中可直接使用的对象一共有9个,被称之为9大内置对象

3种java脚本

表达式   <%=表达式%>

    局部代码<%  java代码   %> 

全局声明  <%! 方法、变量 %>

jsp注释:

html注释<!--  -->客户端可见

运行原理

A.       客户端发送请求,jsp翻译成java文件(Servlet)

B.       编译生成class文件

C.       创建该类对象

D.       调用它的service()方法

E.        第二次请求同一个jsp时,直接调用service()方法,使用已经编译好的字节码文件

jsp文件的修改,会让jsp重新翻译和编译.

2. jsp三大指令

A.page指令:设置当前jsp页面属性,怎样运行jsp页面

  写法: <%@page 属性名="值"  属性="值"....%>

  属性

    import:导入java包,可以写多个

java文件所使用的编码,服务器需要知道这个jsp文件应该是什么编码

响应的页面应该用什么编码来显示

             第一阶段:jsp翻译成java文件(pageEncoding)

             第二阶段:java文件编译成class文件(UTF-8)

             第三个阶段:tomcat加载class文件,输出结果(contentType)

             建议:pageEncoding,contentType都是UTF-8

B.include包含指令

   <jsp:include>:页面包含动态包含

         <jsp:param>:携带参数

         静态包含:<%includefile="要包含的文件"%>   先包含,后编译处理

         动态包含:<jsp:includepage="要包含的文件"> 先编译处理,后包含

         静态包含不能携带参数,动态包含携带参数

C.forward跳转指令

         <jsp:forwardpage="页面地址"> 服务器内部转发(页面不跳转)不用写项目名,不会丢失request请求

             <jsp:param value="karry"name="aidou"/> 可携带参数,value值显示在前端

         </jsp:forward>

             通过request.getParameter():得到参数值

D.taglib 导入标签库

两个属性:

prefix:指定标签库在本页面中的前缀!由我们自己来起名称!

uri: 指定标签库的位置!

<%@taglibprefix=”s” uri=”地址”%> 前缀的用法<s:text>

3.  JSP九大内置对象及四大作用域概述

这些内置对象将由容器为用户进行实例化,用户直接使用即可,常用pageContext,request,response,session,application(config,out,page,exception)

JSP四大作用域:pageContext,request,sessionapplication域对象  不同范围内数据共享

通用的方法:removeAttribute, setAttribute,getAttribute

1.pageContext范围:只在一个页面中保存数据,javax.servlet.jsp.PageContext(抽象类),相当于页面中所有对象功能的集合,即使用它可以访问到本页面所有对象(一个顶九个!)。

2.Request范围:只在一个请求中保存数据(发短信),javax.servlet.http.HttpServletRequest(接口)

         客户端--->服务器  请求对象

         方法:域对象方法

获取客户端信息(头部信息,防止盗链)、获取请求参数(表达数据)

中文乱码:

get:newString(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"):

post: request.setCharacterEncoding("UTF-8");

3.Session范围:在一次会话范围中保存数据,仅供单个用户使用(一次通话),javax,servlet,http,HttpSession(接口)

4.Application范围:在整个服务器上保存数据,所有用户共享,javax.servlet.ServletContext(接口)

response

         与request对应,服务器-->客户端,响应用户请求

         自动刷新应用,

                  页面重定向,客户端跳转

                  操作cookie应用

config

Servlet在web.xml初始化的时候,jsp引擎通过config向它传递信息 

<init-param>
                   <param-name>jdbcName</param-name>
                   <param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
        
StringjdbcName=config.getInitParameter("jdbcName");

4. javaBean标签

减少重复代码。JavaBean主要是用来通过反射操作的类!因为需要通过Class的newInstance()方法来创建类的实例,所以要求类必须提供public的无参构造器。

a.      jsp:useBean创建javaBean

         <!--id="实例化对象名称" scope="保存范围" class="类完整名称" -->

         <jsp:useBeanid="student" scope="page"class="com.yunhe.Student" />

b.      jsp:setProperty设置javabean属性值   

<jsp:setProperty property="属性名称"name="实例化对象的名称" value="属性值" param="参数名称"/>

         Value:设置后无论输入什么值,都提交显示value值

         Param:当属性名称!=提交属性名称时,可使参数名称=提交属性名

         property="*"自动匹配所有

c.      jsp:getProperty获取javabean属性值

         <jsp:getPropertyproperty="属性名称" name="实例化对象的名称" />

d.      javabean的保存范围  

         保存范围有page,request,session,application,默认是page;

e.      javabean删除

         page范围:pageContext.removeAttribute("javaBeanName"); 

         request范围:request.removeAttribute("javaBeanName");

         session范围:session.removeAttribute("javaBeanName");

         application范围:application.removeAttribute("javaBeanName");

5.EL表达式

规则:${表达式语言}

         JSP页面也可以忽略EL:<@pageisELIgnored=”true”%>

         EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!pageContext不是map,它就是PageContext类型,1一个顶九个。

作用:

      获取域对象中的值(重要)

      执行运算

      调用方法(了解)

      el表达式中内置对象

获取值的写法

    .的方式:

    [""]的方式:如果key中有特殊字符,必须使用[]的方式

    关于数组,对象,集合,map值的获取

EL操作四大域的内置对象:它们是Map类型

pageScope 、requestScope 、sessionScope 、applicationScope

6. jstl标签库

jsp标准标签库,导入jar包。jstl依赖el表达式,使用el表达式获取值

使用步骤:1. 导入jar(jstl.jar  standard.jar)

              2. 在jsp使用taglib命令导入标签库

out标签:输出内容(常量值,域对象的值)

<c:out

    value:输出的内容

    escapeXml:是否转义

    default:默认值

set标签:向域对象中赋值

<c:set

    var:值的key

    value:值

    scope:范围(从配置范围寻找值,找不到按page  request  session application顺序找)

remove标签(了解) <c:removevar="pass"/>

if标签(重点)

<c:set

<c:if

       <c:outvalue="a=10"></c:out>

</c:if>       

<c:out

         test:判断的条件

         var:将判断的结果赋值给某一个变量

         scope:作用域(将变量赋值给某个域对象)

choose标签(重点)

<c:choose>
       <c:when test="${a gt10}">
              <c:outvalue="a>10"></c:out>
       </c:when>
       <c:when test="${a lt10}">
              <c:outvalue="a<10"></c:out>
       </c:when>
       <c:otherwise>
              <c:outvalue="a=10"></c:out>
       </c:otherwise>
</c:choose>
foreach标签(重要)
<c:forEachvar="a" begin="1" end="10" step="2"varStatus="as"><!-- 注意大小写 -->
       ${a }
       ${as.count }
       ${as.first }
       ${as.last }
       </br>
</c:forEach>
         var  :声明变量
         begin:从哪开始
         end:结束
         step:步长
         varStatus:循环状态变量
* count:循环元素的个数                             
* index:循环元素的下标
* first:是否为第一个元素
* last:是否为最后一个元素
* current:当前元素

7.       Tomcat

黑窗口闪退:-->javahome配置  因为tomcat本来就是一个java程序,运行需要jvm

端口占用时除了修改端口号:杀死占用端口的进程 taskkill /pid 端口号 -t -f

tomcat安装目录(开源,轻量级)

    bin:存放tomcat启动和终止的文件

    conf:tomcat配置文件

    lib:tomcat运行所需要jar文件

    logs:tomcat日志文件

    temp:运行时存放的临时文件

    webapps:部署的项目

    work:JSP和session所需要的文件(存放jsp比那以后产生的class文件)

配置 web.xml,每次修改完必须重启服务器。