jsp笔记

javaWeb

jsp : java server page

就是用java开发网站

浏览器、服务器(B/s)模式

客户端/服务器(C/s)模式

 

C/s模式的弊端:

 需要客户端软件,

  升级不方便

   有部分功能在客户端上的,自然就留了一个漏洞

    也叫富客户端

         因为部分功能在客户端,随着安装可以安装大量的相关资源。(贴图,模型,声音,视频。。。)

           占用客户端的系统资源

 

B/S模式不需要安装客户端,单需要浏览器

  虽然也安装了软件,但是是通用的

    升级无需改变客户端浏览器的任何资料,所有工作,全部在服务端完成。

         所有功能在服务器上,更安全。

          也叫瘦客户端

           功能不在客户端,无法完成华丽的游戏,不是B/S的长项

      

端游(c/s结构)/页游(B/S结构)

 

客户端应用程序(简称客户端):想服务器请求,并相应回来的结果

服务端应用程序(简称客户端):完成向客户端提供数据,功能处理,返回响应

浏览器:网页查看工具 在web中,通过HTML来实现用户界面

 

统称为软件

操作系统:windows\linux\MacOS...

   管理其他软件和硬件交互

应用程序: office\WPS\QQ\端游

   提供有针对性功能的软件

  

桌面应用程序:eclips\IDEA,办公软件

   采用C/S结构开发,运行在桌面系统,或者无需网络功能,运行在桌面上

web应用程序:页游、电子商务、娱乐网站、门户网站、搜索引擎,各种管理系统

   采用B/S结构开发,基于HTML网页形式的应用程序。(开发中需要重点关注如何生成这些网页)

  

 服务器软件:(服务器操作系统),提供管理维护web应用程序的。也叫服务器环境

    MySQL:数据库服务器软件。

       Tomcat:提供web应用程序的管理和维护工作。也叫web容器。IIS(apsx)、Apache(html、PHP)

 服务器:安装有服务器软件的计算机

 

 Tomcat的下载和安装

  安装格式exe:

  压缩格式zip(tar.gz/rpm):通常用于Linux    优点换系统不用愁

 

   1、安装就是解压缩

   2、运行

      2.1 TOMcat的目录结构:

           bin

 1、安装tomcat一定要对应适当的JDK版本,都是64位或者都是32位,并且版本不能相差太大,否则不支持

 2、eclipse如果无法打开一种可能是需要配置环境,另一种是复制一份JRE到eclipse解压包里面去

 3、tomcat安装好并配置好环境后,在命令窗口startup可以打开服务

 4、打开服务后,新的项目需要放置在tomcat下的webapps目录下

 5、放置好文件后打开浏览器输入 localhost:8080/复制过来的文件夹/.jsp格式的文件  即可打开项目

 

 lesson2

  在eclipse 的preference中搜索jre可以安装匹配多个jdk的jre

  

   TCP/IP Monitor 打开位置在 window/show View/other 中搜索(网页开发表单post和get方式提交的时候需要应用到)

  

   例子:

   导入java类:

    <%@page import="com.shengsiyuan.io.sample" %>

     类的方法调用:

         <%

         sample.sayHello();

         %>

   如果是system.out.println()将会打印在控制台上

  

   页面输出:

   <%

   String tmp=sample.sayHello(); //有返回值字符串时

    out.println("<h3>"+tmp+"</h3>");

   %>

  

   JSP注释:

          <%--JSP注释--%>

   JSP设置java编译编码格式:

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

  

   设置浏览器编码格式:

             <meta http-equiv="Content-type" content="text/html; charset=UTF-8">

  

   两种编码格式必须保持一致

    

        文件保存的时候指定编码:

                 <%page pageEncoding="UTF-8" %>

  

   lesson3

   jsp可以有HTML的所有代码

  

   JSP声明 <%! 定义语句,如定义类、基本数据 %>java代码  注意只能放定于语句,不能尝试用任何方法包括new对象,也就是说非定义语句不能放入JSP声明中           

              例如 <%! public class A{  } %>

          注意:JSP不能定义抽象的东西

   JSP代码段 <% java代码 %>  例如构建类、方法调用

      注意:以后定义属性时尽量避免首字符只有一个小写的标识符uName,以后的在EL中可能会出问题

  

  

   JSP表达式:<%=java代码  %> 可以放属性和方法的调用语句

       JSP表达式有一个特别的地方,java语句的结尾不能有“;” 也不可以有多句语句

          JSP表达式的功能,就是输出语句,输出属性值或者方法的返回值

           例如:<%="number="+number %> 类似于System.out.println();

   JSP的工作原理:编辑源码->部署至服务器->启动服务器->通过浏览器访问

              其实有很大一部分程序员并未参与,而是由容器自动完成的。

                        Tomcat(Web容易在JSP中完成了很大一部分工作)具体如下:

                          (1)查询并加载JSP文件,找不到资源直接报404的错误,404代码浏览器会解析为页面未找到

                             (2)转译:翻译(将JSP文件翻译成java文件)

                  (3)编译工作:将java文件编译成class文件

                              (4)执行:执行class文件,文件执行结果就是完整的HTML页面(所谓的动态,在javaWeb实际上是指内容动态,在这里java程序可以从数据库中获取数据,所以页面会变化)

                              (5)响应:将生成的结果HTML页面传输到浏览器

               接下来由浏览器接班,负责解析HTML页面,并采用图形化的方式显示出来

  

   lesson4

   1、在eclipse中配置的tomcat,运行时配置文件存放在哪里?

   放在工作空间的一些临时文件中:

   用String path=request.getServletContext() 来获得

   插件的配置信息   \.metadata\.plugins

   web容器的插件信息 \org.eclipse.wst.server.core

   对于不同的web项目服务器配置信息 \tmpX

   相当于tomcat的webapps子文件夹 \wtwebapps

   项目名称 \myApp

  

   2、

     java代码原样复制到java文件中

     HTML代码以out对象的write()方法以字符形式输出在java文件中

        HTML注释当做HTML代码处理

        JSP注释在转译过程就已经被web容器的转译组件忽略了,即不写进java文件中,

        JSP表达式在转译过程前面加上out.println(,后面加上),相当于把表达式的结果,使用out对象直接输出

            转译过程中首先完成表达式的计算,其次使用out对象,直接输出

                这就是为什么表达式后面不可以有分号,也不可以有多句语句

                 其实也可以理解,JSP表达式中的内容,作为out.print()方法的参数

  

     JSP声明,转译到类中间,成为一个内部类,而JSP代码段转译到一个叫public void _jspservice()方法中,

            因此声明中不能有方法调用等非定义语句,而代码段不能有定义语句

      

   //TODO 将要完成的工作,主要帮助我们记住什么地方的工作未完成。

   //FIXME 修复我, 主要是帮助我们记住什么地方可能有问题未处理,FIXME 优先级高一点,会排在前面

   window/showview/other/task 查看所有TODO和FIXME

  

  

   JSP指令

   <%@ JSP指令  %> 给JSP下一些命令的功能

     指令必须放在JSP的开头,同一个指令可以多行书写

     常见的指令:

           page指令 完成JSP的一些基本设置工作。比如说可以指定JSP的语言language属性,页面字符编码pageEncoding属性,页面内容字符编码contentType属性,

                        导入类import的属性  EL表达式支持的属性,指定错误页面的属性,

              include指令 包含,在一个JSP页面中,可以引入另外一个JSP

              taglib指令,标签库指令。在JSP页面当中,引用标签库

       JSP 标准动作,类似HTML标签,也类似JSTL的标签库。动作实际上是标签

         <jsp:xxx></jsp:xxx>

       目前比较少用的有:

          redirect 重定向

          forward 转发

          include 包含

          《JSP设计》

  

  

   lesson5 会话跟踪

   什么是会话(session对象):

     用专业的说法是浏览器与服务器之间,在某一个时间段内的,多次请求和响应的过程,我们叫会话

      所谓会话实际可以理解为一组请求/响应过程。在某一个时间段内是指浏览器第一次向服务器发送消息开始,这个会话开启,

          会话终止指服务器完成最后一次响应延迟多少时间以后。

          会话的开启和终止是由web容器完成的。专业术语会话的实例化/销毁(开启和终止)

        

       什么是请求/响应?(request对象和response对象)

         简单的理解请求和响应,就是和浏览器和服务器之间的消息传递,以方向来区分请求和响应

         浏览器向服务器发送消息,叫请求。服务器向浏览器发送消息,叫响应。

   

   输出对象(out对象)将内容输出到页面上

     String uName=request.getParameter("userName");

        返回值是查询字符串的参数值

      out.println("uName的值是:"+uName);

     out.write()方法与print()一样

  

  

   在浏览器的地址栏上输入的URL后面加一个“?userName=zhangsan”可以给JSP页面传递参数。

     查询字符串:“?字符串”

        查询字符串是一个标准的字符串。可以传递中文,但建议不要传递中文。因为URL的编码与否是由客户端浏览器决定的。

        查询字符串的规则:参数名称=参数值

        多个参数使用"&"符号隔开

        

   HTML表单提交

    通过表单提交如果method="get" 方式提交,其实就是以查询方式提交

       如果表单提交 method=“post”方式提交,如果乱码,需要在JSP头部设置处理字符编码问题

           <%

              request.setCharacterEncoding("utf-8");

              response.setCharacterEncoding("utf-8");

              response.setContentType("text/html;charset=utf-8");

              %>

      post方式提交,可以传递大量文字信息,并且信息不会显示在浏览器上,安全性好

          但是需要注意,采用post方式提交需要字符编码处理

   eclipse工具:TCP/IP monitor

     新建monitor

         本地端口8088(未使用即可)

           localhost

               监听端口8080

  

   <input type="hidden" name="pkID" value=""> 隐藏的信息也会随表单提交而传递

  

   Lesson4

   String path=reqest.getServletContext().getRealPath("/");  获取eclipse中配置的tomcat,运行时的配置文件存放在哪里

   工作空间下metadata是eclipse的所有配置文件

   eclipse配置信息     metadata\.plugins 

        web容器的插件信息:                  \org.eclipse.wst.server.core

                   对于不同的web项目的配置信息:  \tempXX

                                                    \wtpwebapps 相当于tompcat的webapps  

  

   temp是服务器运行临时文件

   work是项目文件

   Catalina\localhost\MyApp\org\apache\jsp 存放全部jsp文件对应的java文件和.class文件

  

   lesson6 会话跟踪

   传递信息方式

       JSP/Servelet页面跳转方式

       1. request.setAttribute("name",name);

             <jsp:forward page="xxx.jsp"><jsp:forward>

                或者推荐采用 reqest.getRequestDispatcher("xxx.jsp").forward(reqest,response);

                web容器为每一次请求,都会分别创建一个请求对象request和一个响应对象response

                response.sendRedirect("xxx.jsp") 采用页面重定向的方式,重定向不再携带attribute()

转发是一次请求,一次响应

重定向

 

               

          相同点:都是完成页面跳转

               结果都是后面的目标页面完成的

       不同点:

            转发是一次请求一次响应

            重定向是两次请求两次响应

            转发是浏览器显示第一个目标页面地址,重定向会在浏览器显示第二个目标页面地址

             转发只能转发同意个网站页面上的,重定向可以转到其他网站上去

 

   Lesson 7  JSP九个隐式对象

不需要实例化操作就可以获取的对象,叫做隐式对象

隐式对象都是由web容器负责实例化的

page

request

response

session

application

pageContext

config

exception

  

  

   会话对象的创建和销毁(在JSP页面中是由web容器维护的,也意味着session的创建和销毁都是由web容器负责)

       但是在servlet中不负责维护

  cookie也可以跟踪会话,但是现在使用不多了

cookie的特点:

   保存在客户端浏览器临时文件夹中,不占用服务器内存资源

cookie可以被客户端关闭

  cookie不安全

  cookie保存的是文本信息,无法保存过大内容,也无法保存二进制的内容

 

九大隐式对象分类

与输入输出有关:request, response,out

与作用域有关:pageContext  request  session  application

与配置有关的: page(表示JSP页面本身的对象)  config(表示页面本身的servlet的一些配置信息)

与异常有关:exception (必须页面指令为isErroPage=”true”)  当页面需要try…catch时才使用

相当于四个存放变量的区域:PageContext,  request , session , application 表示作用域范围的对象,实际上提供了保存数据的空间

page对象表示JSP页面本身的对象

 

  

  

   Lesson8 JSTL 标准标签库

 

   分类:

   核心标签库*   :Core

   国际化标签库  fmt

SQL标签库  sql

XML标签库  xml

目前就只有核心标签库还有使用

概念:标签库,每一个标签都能完成特定的工作,可以提高代码重用性,减少JSP页面代码量。

如何使用?需要使用taglib指令放在页面顶部<%@ taglib uri=“http://java.sun.com/jsp/jstl/core  prefix=”C或者core等任意定义前缀” %>

下载jstl.jar包放在web-inf下

   标签库的组成:由若干标签处理程序(*.class)加上标签描述文件(*.tld)组成。

   每一个标准库都有三个版本的tld描述文件 可以寻找到c文件的url

标签库的使用

1、导入JSTL的支持包(jstl1.2.jar)

2、需要使用taglib指令引入标签库(定义prefix和uri)

3、采用<前缀:标签名><前缀:标签名/> 形式使用标签

   forEach标签(迭代数组或者集合)

封装实体对象,通常包名:vo| pojo、 entity、  domain、 model、 bean

   <prosay:forEach items=”${pageScope.myList}” var=”obj”>

   <td>${obj.userId}</td>来获取

    <td>${obj.userName}</td>

   if标签

  <porsay:if test=”${obj.userState}”>

   <td>已经登录</td>

</prosay:if>

 

 

   <porsay:if test=”${!obj.userState}”> 或者 <porsay:if test=”${not obj.userState}”>

<td>未登录</td>

</prosay:if>

 

choose … when…otherwise标签

    <porsay:choose>

    <porsay:when test=”${obj.userState}”>

      <td>已经登录</td>

<porsay:when>

<porsay:when test=”${!obj.userState}”>

      <td>未登录</td>

<porsay:when>

<porsay: otherwise>

      <td>未登录</td>

</prosay:otherwise>

</porsay:choose>

 

 

   forTokens标签

pageContext.setAttribute(“myStr”,str)

<prosay:forTokens item=”${myStr}”  delims=”|”  var=”subStr”>

  <li>${subStr}</li>

  

</prosay:forTokens >

相当于String.split

  

重定向标签

<prosay:redirct  url=”hello.jsp”></prosay:redirct>

  

param标签  是从查询字符串中获取数据(?xx1=xxxx&xxx2=xxxx)

   <prosay:param  name=”hello”></prosay:param>

 

  

Lesson 9 EL表达式

 

描述性的语言,作用是用来替代JSP的表达式

采用EL表达式替换JSP表达式原因:

1、JSP表达式容易造成语法混乱,导致出现<<>>等混乱

2、对于null值得处理,JSP表达式将会输出“null”字符串,容易造成歧义

3、EL使用在JSP页面上的。不是java代码,不能够放在代码段或者类当中

基本语法格式:

           ${表达式}

EL表达式对于页面来说非常友好,如果表达式处理过程中有问题,并不会抛出异常导致页面出错,而是直接忽略

 

EL的内置对象:

   

   1、请求参数(从查询字符串中“url”后面的?xxx1=xxx&xxx2=xxx):

       param,  paramValues

 

  2、与作用域相关的

          pageScope,   requestScope,   sessionScope,  applicationScope

3、与请求头部相关的:

         header,  headerValues

4、与初始化参数相关的

       initParam

5、与cookie相关的:

cookie

6、与pageContext相:  功能可以获取到JSP中的隐式对象

pageContext

 

EL运算符号

  算数运算符:+ -* /  %

比较预算符 ==(eq)、!=(ne)、>、<、>=、<=

逻辑运算符 &&(and)  ||(or)  !(not)

其他运算符 空值判断(empty)、 三元运算符:条件?满足条件:不满足条件

            ()提升运算符优先级

EL功能:完成运算和输出功能

请注意:EL 表达式不能控制程序的流程,换句话说没有选择结构循环结构,程序流程结构我们通过JSTL来完成。

 

通过EL表达式获取对象,数组,集合中的数据

使用 ‘.’ 或者‘【】’来完成对象的属性调用,数组和集合的使用

${pageScope.user.userName}

${pageScope.user[“userNick”] }

相当于调用userName属性对应的get方法,也就是调用getUserName();

  获取数组可以直接加下标

 

在EL表达式中,作用域可以省略不写,EL将自动从最小的作用域范围内查找属性

如果没找到返回空字符串

 

EL表达式会自动处理数据类型!

 

EL中的param对象

<c:forEach items=”${paramValues.type}”  var=”typeStr”>

${typeStr}、

</c:forEach>

 

Lesson 10  servlet

Servlet的概述、配置

CGI(C语言)  ASP(微软的VB) Servlet/JSP(sun的java) 三分天下

Applet(sun公司的)、Flash 两个动态插件

 

Servlet是什么

   是一个用java编写运行在服务器上,处理基于请求与响应机制的动态页面的程序

   servlet源码一定是一个.java文件

   特殊性:

    //创建一个servlet必须要 继承一个父类,实现其中的service抽象方法

// GenericServlet可以处理多种更不同协议的请求, 是一个抽象类

//网站是基于HTTP协议,所以提供一个子类HttpServlet

   extends HttpServlet或者

       extends GenericServlet{

@Override

public void service(ServletRequest request, ServletResponse response)

}

在HTTP协议中,主要使用的请求方式有两种(get/post)

所以在HTTPServlet的service方法中,针对不同的请求做了判断

最终,分别采用了两个空方法doGet和doPost来实现

out对象要注意关闭和清空缓冲流

       out.flush();

       out.close();

servlet编写:

    继承一个类,重写若干方法(5选n)

web.xml 配置五个标签以及五个标签的嵌套关系

  第二行是namespace命名空间,检查语法错误的

如果Servlet处理类没有放在一个指定包中,而是默认包,会发生什么?

如果重写service要记得加上super.service(req,res)让父类来判断是get或者是post

;

Servlet的生命周期

servlet对象的创建到销毁这一阶段叫做servlet的声明周期

按五个阶段:

1、实例化:实例化的工作室Tomcat做的

2、初始化 init方法

3、服务 service方法

4、销毁 destroy方法

5、不可用:实际上是JVM做的事,属于垃圾回收机制

 

Lesson 11 Java中的注解

@开头

注解的功能:告诉编译器,接下来的类、方法‘、属性的作用

@webServlet(name=”sayHello”,urlPatterns=”/servlet/sayHello.do”)

 

servlet的多重映射

允许给同一个servlet配置多个访问路径

除了独立的配置以外,还可以使用*通配符的方式完成多路径的映射

1、虚拟路径的形式支持通配符写法“/path/*”

2、虚拟文件的形式支持通配符的写法“*.filename”

 

servlet生命周期的方法

1、servlet对象是由web容器创建的

2、web容器在启动时并没有创建servlet对象

3、web容器在首次接受到访问servlet请求的时候创建servlet对象的

4、servlet对象创建完成过之后,将会自动调用init()方法完成初始化操作

5、完成初始化以后,通过service()方法处理请求

6、处理完成请求以后,该对象不会销毁,处于等待请求状态,等待下一次的请求 。下一次请求直接调用service方法

7、当web容器资源紧张的时候,即将垃圾回收时,会根据servlet对象有多长时间没有接收请求来判断,较长时间没有访问将会呗当成垃圾回收,或者是web容器在shutdown的时候,销毁servlet对象。

8、可以通过配置方式,让servlet在容器启动是预加载

    <servlet>子标签 <load-on-startup>标签配置

 

查询字符串可能会用到的强制编码:

   String str=”你好中国”

   out.print(new String(str.getByte(“iso-8859-1”),”utf-8”))

                                原始编码    目标编码

9、生命周期的初始化参数,通过注解或者xml注解配置文件

  通过servletConfig的对象调用getInitparameter()获取已经配置好的参数

 

 

lesson12 API

request.getRequestDispatcher(“xxx.jsp”);

request.getServletContext().getContextPath();获取上下文对象的路径

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

javaWeb

jsp : java server page

就是用java开发网站

浏览器、服务器(B/s)模式

客户端/服务器(C/s)模式

 

C/s模式的弊端:

 需要客户端软件,

  升级不方便

   有部分功能在客户端上的,自然就留了一个漏洞

    也叫富客户端

         因为部分功能在客户端,随着安装可以安装大量的相关资源。(贴图,模型,声音,视频。。。)

           占用客户端的系统资源

 

B/S模式不需要安装客户端,单需要浏览器

  虽然也安装了软件,但是是通用的

    升级无需改变客户端浏览器的任何资料,所有工作,全部在服务端完成。

         所有功能在服务器上,更安全。

          也叫瘦客户端

           功能不在客户端,无法完成华丽的游戏,不是B/S的长项

      

端游(c/s结构)/页游(B/S结构)

 

客户端应用程序(简称客户端):想服务器请求,并相应回来的结果

服务端应用程序(简称客户端):完成向客户端提供数据,功能处理,返回响应

浏览器:网页查看工具 在web中,通过HTML来实现用户界面

 

统称为软件

操作系统:windows\linux\MacOS...

   管理其他软件和硬件交互

应用程序: office\WPS\QQ\端游

   提供有针对性功能的软件

  

桌面应用程序:eclips\IDEA,办公软件

   采用C/S结构开发,运行在桌面系统,或者无需网络功能,运行在桌面上

web应用程序:页游、电子商务、娱乐网站、门户网站、搜索引擎,各种管理系统

   采用B/S结构开发,基于HTML网页形式的应用程序。(开发中需要重点关注如何生成这些网页)

  

 服务器软件:(服务器操作系统),提供管理维护web应用程序的。也叫服务器环境

    MySQL:数据库服务器软件。

       Tomcat:提供web应用程序的管理和维护工作。也叫web容器。IIS(apsx)、Apache(html、PHP)

 服务器:安装有服务器软件的计算机

 

 Tomcat的下载和安装

  安装格式exe:

  压缩格式zip(tar.gz/rpm):通常用于Linux    优点换系统不用愁

 

   1、安装就是解压缩

   2、运行

      2.1 TOMcat的目录结构:

           bin

 1、安装tomcat一定要对应适当的JDK版本,都是64位或者都是32位,并且版本不能相差太大,否则不支持

 2、eclipse如果无法打开一种可能是需要配置环境,另一种是复制一份JRE到eclipse解压包里面去

 3、tomcat安装好并配置好环境后,在命令窗口startup可以打开服务

 4、打开服务后,新的项目需要放置在tomcat下的webapps目录下

 5、放置好文件后打开浏览器输入 localhost:8080/复制过来的文件夹/.jsp格式的文件  即可打开项目

 

 lesson2

  在eclipse 的preference中搜索jre可以安装匹配多个jdk的jre

  

   TCP/IP Monitor 打开位置在 window/show View/other 中搜索(网页开发表单post和get方式提交的时候需要应用到)

  

   例子:

   导入java类:

    <%@page import="com.shengsiyuan.io.sample" %>

     类的方法调用:

         <%

         sample.sayHello();

         %>

   如果是system.out.println()将会打印在控制台上

  

   页面输出:

   <%

   String tmp=sample.sayHello(); //有返回值字符串时

    out.println("<h3>"+tmp+"</h3>");

   %>

  

   JSP注释:

          <%--JSP注释--%>

   JSP设置java编译编码格式:

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

  

   设置浏览器编码格式:

             <meta http-equiv="Content-type" content="text/html; charset=UTF-8">

  

   两种编码格式必须保持一致

    

        文件保存的时候指定编码:

                 <%page pageEncoding="UTF-8" %>

  

   lesson3

   jsp可以有HTML的所有代码

  

   JSP声明 <%! 定义语句,如定义类、基本数据 %>java代码  注意只能放定于语句,不能尝试用任何方法包括new对象,也就是说非定义语句不能放入JSP声明中           

              例如 <%! public class A{  } %>

          注意:JSP不能定义抽象的东西

   JSP代码段 <% java代码 %>  例如构建类、方法调用

      注意:以后定义属性时尽量避免首字符只有一个小写的标识符uName,以后的在EL中可能会出问题

  

  

   JSP表达式:<%=java代码  %> 可以放属性和方法的调用语句

       JSP表达式有一个特别的地方,java语句的结尾不能有“;” 也不可以有多句语句

          JSP表达式的功能,就是输出语句,输出属性值或者方法的返回值

           例如:<%="number="+number %> 类似于System.out.println();

   JSP的工作原理:编辑源码->部署至服务器->启动服务器->通过浏览器访问

              其实有很大一部分程序员并未参与,而是由容器自动完成的。

                        Tomcat(Web容易在JSP中完成了很大一部分工作)具体如下:

                          (1)查询并加载JSP文件,找不到资源直接报404的错误,404代码浏览器会解析为页面未找到

                             (2)转译:翻译(将JSP文件翻译成java文件)

                  (3)编译工作:将java文件编译成class文件

                              (4)执行:执行class文件,文件执行结果就是完整的HTML页面(所谓的动态,在javaWeb实际上是指内容动态,在这里java程序可以从数据库中获取数据,所以页面会变化)

                              (5)响应:将生成的结果HTML页面传输到浏览器

               接下来由浏览器接班,负责解析HTML页面,并采用图形化的方式显示出来

  

   lesson4

   1、在eclipse中配置的tomcat,运行时配置文件存放在哪里?

   放在工作空间的一些临时文件中:

   用String path=request.getServletContext() 来获得

   插件的配置信息   \.metadata\.plugins

   web容器的插件信息 \org.eclipse.wst.server.core

   对于不同的web项目服务器配置信息 \tmpX

   相当于tomcat的webapps子文件夹 \wtwebapps

   项目名称 \myApp

  

   2、

     java代码原样复制到java文件中

     HTML代码以out对象的write()方法以字符形式输出在java文件中

        HTML注释当做HTML代码处理

        JSP注释在转译过程就已经被web容器的转译组件忽略了,即不写进java文件中,

        JSP表达式在转译过程前面加上out.println(,后面加上),相当于把表达式的结果,使用out对象直接输出

            转译过程中首先完成表达式的计算,其次使用out对象,直接输出

                这就是为什么表达式后面不可以有分号,也不可以有多句语句

                 其实也可以理解,JSP表达式中的内容,作为out.print()方法的参数

  

     JSP声明,转译到类中间,成为一个内部类,而JSP代码段转译到一个叫public void _jspservice()方法中,

            因此声明中不能有方法调用等非定义语句,而代码段不能有定义语句

      

   //TODO 将要完成的工作,主要帮助我们记住什么地方的工作未完成。

   //FIXME 修复我, 主要是帮助我们记住什么地方可能有问题未处理,FIXME 优先级高一点,会排在前面

   window/showview/other/task 查看所有TODO和FIXME

  

  

   JSP指令

   <%@ JSP指令  %> 给JSP下一些命令的功能

     指令必须放在JSP的开头,同一个指令可以多行书写

     常见的指令:

           page指令 完成JSP的一些基本设置工作。比如说可以指定JSP的语言language属性,页面字符编码pageEncoding属性,页面内容字符编码contentType属性,

                        导入类import的属性  EL表达式支持的属性,指定错误页面的属性,

              include指令 包含,在一个JSP页面中,可以引入另外一个JSP

              taglib指令,标签库指令。在JSP页面当中,引用标签库

       JSP 标准动作,类似HTML标签,也类似JSTL的标签库。动作实际上是标签

         <jsp:xxx></jsp:xxx>

       目前比较少用的有:

          redirect 重定向

          forward 转发

          include 包含

          《JSP设计》

  

  

   lesson5 会话跟踪

   什么是会话(session对象):

     用专业的说法是浏览器与服务器之间,在某一个时间段内的,多次请求和响应的过程,我们叫会话

      所谓会话实际可以理解为一组请求/响应过程。在某一个时间段内是指浏览器第一次向服务器发送消息开始,这个会话开启,

          会话终止指服务器完成最后一次响应延迟多少时间以后。

          会话的开启和终止是由web容器完成的。专业术语会话的实例化/销毁(开启和终止)

        

       什么是请求/响应?(request对象和response对象)

         简单的理解请求和响应,就是和浏览器和服务器之间的消息传递,以方向来区分请求和响应

         浏览器向服务器发送消息,叫请求。服务器向浏览器发送消息,叫响应。

   

   输出对象(out对象)将内容输出到页面上

     String uName=request.getParameter("userName");

        返回值是查询字符串的参数值

      out.println("uName的值是:"+uName);

     out.write()方法与print()一样

  

  

   在浏览器的地址栏上输入的URL后面加一个“?userName=zhangsan”可以给JSP页面传递参数。

     查询字符串:“?字符串”

        查询字符串是一个标准的字符串。可以传递中文,但建议不要传递中文。因为URL的编码与否是由客户端浏览器决定的。

        查询字符串的规则:参数名称=参数值

        多个参数使用"&"符号隔开

        

   HTML表单提交

    通过表单提交如果method="get" 方式提交,其实就是以查询方式提交

       如果表单提交 method=“post”方式提交,如果乱码,需要在JSP头部设置处理字符编码问题

           <%

              request.setCharacterEncoding("utf-8");

              response.setCharacterEncoding("utf-8");

              response.setContentType("text/html;charset=utf-8");

              %>

      post方式提交,可以传递大量文字信息,并且信息不会显示在浏览器上,安全性好

          但是需要注意,采用post方式提交需要字符编码处理

   eclipse工具:TCP/IP monitor

     新建monitor

         本地端口8088(未使用即可)

           localhost

               监听端口8080

  

   <input type="hidden" name="pkID" value=""> 隐藏的信息也会随表单提交而传递

  

   Lesson4

   String path=reqest.getServletContext().getRealPath("/");  获取eclipse中配置的tomcat,运行时的配置文件存放在哪里

   工作空间下metadata是eclipse的所有配置文件

   eclipse配置信息     metadata\.plugins 

        web容器的插件信息:                  \org.eclipse.wst.server.core

                   对于不同的web项目的配置信息:  \tempXX

                                                    \wtpwebapps 相当于tompcat的webapps  

  

   temp是服务器运行临时文件

   work是项目文件

   Catalina\localhost\MyApp\org\apache\jsp 存放全部jsp文件对应的java文件和.class文件

  

   lesson6 会话跟踪

   传递信息方式

       JSP/Servelet页面跳转方式

       1. request.setAttribute("name",name);

             <jsp:forward page="xxx.jsp"><jsp:forward>

                或者推荐采用 reqest.getRequestDispatcher("xxx.jsp").forward(reqest,response);

                web容器为每一次请求,都会分别创建一个请求对象request和一个响应对象response

                response.sendRedirect("xxx.jsp") 采用页面重定向的方式,重定向不再携带attribute()

转发是一次请求,一次响应

重定向

 

               

          相同点:都是完成页面跳转

               结果都是后面的目标页面完成的

       不同点:

            转发是一次请求一次响应

            重定向是两次请求两次响应

            转发是浏览器显示第一个目标页面地址,重定向会在浏览器显示第二个目标页面地址

             转发只能转发同意个网站页面上的,重定向可以转到其他网站上去

 

   Lesson 7  JSP九个隐式对象

不需要实例化操作就可以获取的对象,叫做隐式对象

隐式对象都是由web容器负责实例化的

page

request

response

session

application

pageContext

config

exception

  

  

   会话对象的创建和销毁(在JSP页面中是由web容器维护的,也意味着session的创建和销毁都是由web容器负责)

       但是在servlet中不负责维护

  cookie也可以跟踪会话,但是现在使用不多了

cookie的特点:

   保存在客户端浏览器临时文件夹中,不占用服务器内存资源

cookie可以被客户端关闭

  cookie不安全

  cookie保存的是文本信息,无法保存过大内容,也无法保存二进制的内容

 

九大隐式对象分类

与输入输出有关:request, response,out

与作用域有关:pageContext  request  session  application

与配置有关的: page(表示JSP页面本身的对象)  config(表示页面本身的servlet的一些配置信息)

与异常有关:exception (必须页面指令为isErroPage=”true”)  当页面需要try…catch时才使用

相当于四个存放变量的区域:PageContext,  request , session , application 表示作用域范围的对象,实际上提供了保存数据的空间

page对象表示JSP页面本身的对象

 

  

  

   Lesson8 JSTL 标准标签库

 

   分类:

   核心标签库*   :Core

   国际化标签库  fmt

SQL标签库  sql

XML标签库  xml

目前就只有核心标签库还有使用

概念:标签库,每一个标签都能完成特定的工作,可以提高代码重用性,减少JSP页面代码量。

如何使用?需要使用taglib指令放在页面顶部<%@ taglib uri=“http://java.sun.com/jsp/jstl/core  prefix=”C或者core等任意定义前缀” %>

下载jstl.jar包放在web-inf下

   标签库的组成:由若干标签处理程序(*.class)加上标签描述文件(*.tld)组成。

   每一个标准库都有三个版本的tld描述文件 可以寻找到c文件的url

标签库的使用

1、导入JSTL的支持包(jstl1.2.jar)

2、需要使用taglib指令引入标签库(定义prefix和uri)

3、采用<前缀:标签名><前缀:标签名/> 形式使用标签

   forEach标签(迭代数组或者集合)

封装实体对象,通常包名:vo| pojo、 entity、  domain、 model、 bean

   <prosay:forEach items=”${pageScope.myList}” var=”obj”>

   <td>${obj.userId}</td>来获取

    <td>${obj.userName}</td>

   if标签

  <porsay:if test=”${obj.userState}”>

   <td>已经登录</td>

</prosay:if>

 

 

   <porsay:if test=”${!obj.userState}”> 或者 <porsay:if test=”${not obj.userState}”>

<td>未登录</td>

</prosay:if>

 

choose … when…otherwise标签

    <porsay:choose>

    <porsay:when test=”${obj.userState}”>

      <td>已经登录</td>

<porsay:when>

<porsay:when test=”${!obj.userState}”>

      <td>未登录</td>

<porsay:when>

<porsay: otherwise>

      <td>未登录</td>

</prosay:otherwise>

</porsay:choose>

 

 

   forTokens标签

pageContext.setAttribute(“myStr”,str)

<prosay:forTokens item=”${myStr}”  delims=”|”  var=”subStr”>

  <li>${subStr}</li>

  

</prosay:forTokens >

相当于String.split

  

重定向标签

<prosay:redirct  url=”hello.jsp”></prosay:redirct>

  

param标签  是从查询字符串中获取数据(?xx1=xxxx&xxx2=xxxx)

   <prosay:param  name=”hello”></prosay:param>

 

  

Lesson 9 EL表达式

 

描述性的语言,作用是用来替代JSP的表达式

采用EL表达式替换JSP表达式原因:

1、JSP表达式容易造成语法混乱,导致出现<<>>等混乱

2、对于null值得处理,JSP表达式将会输出“null”字符串,容易造成歧义

3、EL使用在JSP页面上的。不是java代码,不能够放在代码段或者类当中

基本语法格式:

           ${表达式}

EL表达式对于页面来说非常友好,如果表达式处理过程中有问题,并不会抛出异常导致页面出错,而是直接忽略

 

EL的内置对象:

   

   1、请求参数(从查询字符串中“url”后面的?xxx1=xxx&xxx2=xxx):

       param,  paramValues

 

  2、与作用域相关的

          pageScope,   requestScope,   sessionScope,  applicationScope

3、与请求头部相关的:

         header,  headerValues

4、与初始化参数相关的

       initParam

5、与cookie相关的:

cookie

6、与pageContext相:  功能可以获取到JSP中的隐式对象

pageContext

 

EL运算符号

  算数运算符:+ -* /  %

比较预算符 ==(eq)、!=(ne)、>、<、>=、<=

逻辑运算符 &&(and)  ||(or)  !(not)

其他运算符 空值判断(empty)、 三元运算符:条件?满足条件:不满足条件

            ()提升运算符优先级

EL功能:完成运算和输出功能

请注意:EL 表达式不能控制程序的流程,换句话说没有选择结构循环结构,程序流程结构我们通过JSTL来完成。

 

通过EL表达式获取对象,数组,集合中的数据

使用 ‘.’ 或者‘【】’来完成对象的属性调用,数组和集合的使用

${pageScope.user.userName}

${pageScope.user[“userNick”] }

相当于调用userName属性对应的get方法,也就是调用getUserName();

  获取数组可以直接加下标

 

在EL表达式中,作用域可以省略不写,EL将自动从最小的作用域范围内查找属性

如果没找到返回空字符串

 

EL表达式会自动处理数据类型!

 

EL中的param对象

<c:forEach items=”${paramValues.type}”  var=”typeStr”>

${typeStr}、

</c:forEach>

 

Lesson 10  servlet

Servlet的概述、配置

CGI(C语言)  ASP(微软的VB) Servlet/JSP(sun的java) 三分天下

Applet(sun公司的)、Flash 两个动态插件

 

Servlet是什么

   是一个用java编写运行在服务器上,处理基于请求与响应机制的动态页面的程序

   servlet源码一定是一个.java文件

   特殊性:

    //创建一个servlet必须要 继承一个父类,实现其中的service抽象方法

// GenericServlet可以处理多种更不同协议的请求, 是一个抽象类

//网站是基于HTTP协议,所以提供一个子类HttpServlet

   extends HttpServlet或者

       extends GenericServlet{

@Override

public void service(ServletRequest request, ServletResponse response)

}

在HTTP协议中,主要使用的请求方式有两种(get/post)

所以在HTTPServlet的service方法中,针对不同的请求做了判断

最终,分别采用了两个空方法doGet和doPost来实现

out对象要注意关闭和清空缓冲流

       out.flush();

       out.close();

servlet编写:

    继承一个类,重写若干方法(5选n)

web.xml 配置五个标签以及五个标签的嵌套关系

  第二行是namespace命名空间,检查语法错误的

如果Servlet处理类没有放在一个指定包中,而是默认包,会发生什么?

如果重写service要记得加上super.service(req,res)让父类来判断是get或者是post

;

Servlet的生命周期

servlet对象的创建到销毁这一阶段叫做servlet的声明周期

按五个阶段:

1、实例化:实例化的工作室Tomcat做的

2、初始化 init方法

3、服务 service方法

4、销毁 destroy方法

5、不可用:实际上是JVM做的事,属于垃圾回收机制

 

Lesson 11 Java中的注解

@开头

注解的功能:告诉编译器,接下来的类、方法‘、属性的作用

@webServlet(name=”sayHello”,urlPatterns=”/servlet/sayHello.do”)

 

servlet的多重映射

允许给同一个servlet配置多个访问路径

除了独立的配置以外,还可以使用*通配符的方式完成多路径的映射

1、虚拟路径的形式支持通配符写法“/path/*”

2、虚拟文件的形式支持通配符的写法“*.filename”

 

servlet生命周期的方法

1、servlet对象是由web容器创建的

2、web容器在启动时并没有创建servlet对象

3、web容器在首次接受到访问servlet请求的时候创建servlet对象的

4、servlet对象创建完成过之后,将会自动调用init()方法完成初始化操作

5、完成初始化以后,通过service()方法处理请求

6、处理完成请求以后,该对象不会销毁,处于等待请求状态,等待下一次的请求 。下一次请求直接调用service方法

7、当web容器资源紧张的时候,即将垃圾回收时,会根据servlet对象有多长时间没有接收请求来判断,较长时间没有访问将会呗当成垃圾回收,或者是web容器在shutdown的时候,销毁servlet对象。

8、可以通过配置方式,让servlet在容器启动是预加载

    <servlet>子标签 <load-on-startup>标签配置

 

查询字符串可能会用到的强制编码:

   String str=”你好中国”

   out.print(new String(str.getByte(“iso-8859-1”),”utf-8”))

                                原始编码    目标编码

9、生命周期的初始化参数,通过注解或者xml注解配置文件

  通过servletConfig的对象调用getInitparameter()获取已经配置好的参数

 

 

lesson12 API

request.getRequestDispatcher(“xxx.jsp”);

request.getServletContext().getContextPath();获取上下文对象的路径

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值