JSP复习

day01


JSP定义:
1) Java Server Page , JavaEE组件,本质上市servlet。
2)运行在Web Container上。接收HttpRequest,生成HttpResponse(默认是Http协议,请求和响应)。
3) JSP使得我们能够分离页面的静态HTML和动态部分
4)是页面可以混合HTML代码、java代码以及JSP标签;允许访问组件。


Servlet的缺陷(JSP页面出现的原因)
1)写静态页面必须部署后才能看到效果,很难控制页面外观。
2)从技术角度来说Servlet是java代码和HTML静态代码的混合代码。
3)从市场角度来说,微软推出了ASP产品。

JSP的改进:
1)JSP是标签式的文本文件。
2)JSP不需要编译(其实是由服务器监测JSP文件变化,再将其翻译成Servlet代码)。
3)JSP不要写配置文件。
4)JSP以静态代码为主,java代码为辅。Servlet反之。
5)是JavaEE蓝图一部分(Servlet、JSP以及EJB是JavaEE的三大组件)。

JSP本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补关系。
JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。
JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应的工作方式)往两个方向发展。


基本语法:
一、JSP声明语句
用来定义在产生的类文件中的属性和方法(成员变量)。可声明类(即内部类)。
由于Servlet是工作在多线程环境下的,所以尽量不要在Servlet方法外声明成员变量。

<%!...... %> //声明时要加!,属于类成员,最先加载,可写于任何位置;不加则是脚本的局部变量,必须调用前写。


声明规则:
1)JSP声明的变量和方法对应于Servlet中的实例方法和实例变量。这些将 被同时请求该页面的所有用户所共享
2)在使用变量或方法前必须先定义(不是说明变量的位置在页面中要处于使用变量的前面,而是指变量不声明不能被使用)。
3) 声明变量或方法的作用域为当前页面或包含的页面
4)语句间以分号间隔。


二、JSP代码块:
<% 代码块 %>
是一段可以在处理请求时执行的java代码。可以产生输出,也可以是一些流程控制语句。
在代码段中定义的变量为servlet方法的局部变量。
1.不能再脚本里面定义方法,脚本相当于方法不能再方法里面定义方法。
2.同一文件里面,局部变量优先。
3.脚本小程序规则:
1)你是要的脚本语言决定脚本小程序的规则。
2)语句之间以分号间隔。
3) 可以使用默认对象、import进的类、declareation声明的方法和对象以及useBean tag 中声明的对象。

三、JSP表达式(expression)
<%=......%>
在JSP请求处理阶段计算他的值,表达式生成的代码是Service方法中的一个代码片段。
JSP对于声明的处理:
1.计算表达式的值。
2.将值转换成String。
3.用out.println发送标签;把数据传输出至页面的当前位置。
表达式规则:
1)你使用的脚本决定了脚本小程序的规则。
2)执行顺序为从左到右。
3)分号不能用于表达式。


四、JSP指令(direction)
指令用于从JSP发送信息到容器上。用来设置全局变量,声明类,要实现的方法和输出内容等等
指令在JSP整个文件内有效。他为翻译阶段提供全局信息。
<%@......%>
指令包括: page、include、taglib

1.page指令
import、session、errorPage、isThreadSafe
页面的语言、内容的类型、字符集、页面的编码
<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>
language:java唯一值,表示脚本中使用的语言。
contentType:设置了内容的类型和静态页面的编码(告诉浏览器以什么编码显示)。
pageEncoding:页面本身的编码格式(写页面是用的格式)。<==>Servlet中的response.setContextType("text/html;charset=utf-8");
import导入其他的包和类。
Session:指示当前的JSP是否参与会话(默认为true)。
session="true"时,可用内建对象session直接访问会话,如
<%
session.setAttribute("userName","dch");
String name=session.getAttribute("userName");
%>
<%=name%>
errorPage:
<%@ page errorPage="error.jsp" %>

isThreadSafe:过时!
2.include指令
把目标页面的内容包含到当前页面,产生页面叠加以后的输出效果
3.taglib指令
JSTL

五、JAVA中注释
1.java格式的注释:
编译器会忽略掉此类注释中的内容(客户端的源码看不见)
<%
//单行注释
/*  多行注释  */
/** 文档注释 */
%>
2.html风格的注释
编译器会执行此类注释中的代码( 客户端源码可见
<!-- html风格的注释 --> 等价于 out.println("<!--html风格的注释-->");


六、动作(Action)
<jsp:actionName attributeName=attributeValue />
JSP动作包括:
forward、include、useBean、setProperty、getProperty
1.forward动作
<jsp:forward page="another.jsp" >
<jsp:param name="name" value="dch" />
<jsp:param name="age" value="20" />
</jsp:forward>
2.include动作
<jsp:include page="another.jsp" />

与<%@ include file="" %>比较
include动作在运行期处理,包含的是所包含URI的响应,而不是URI本身。

JSP处理过程包含两个阶段:
1)JSP页面转换阶段:
页面被编译成一个java类,所有的HTML标记和JSP标记都被准换创建一个Servlet。这时,脚本和表达式还没有被执行。
2)请求处理阶段:发生在服务器,将一个客户端请求指向JSP页面。
一个请求对象创建、解析以及提交给编译好的JSP对应的servlet。
当这个servlet处理请求的时候他执行先前在JSP中定义的处理脚本小程序和表达式。


使用脚本代码的缺点:
1)过渡使用脚本代码,使得JSP页面混乱和难以维护。
2)脚本代码降低JSP的两个主要优点:软件重用和代码分离。

day02


POJO Plain Old Java Object --> 简单传统的java对象

JavaBean:组件、构件的规范(属性:提供set/get方法;还可能包含其他方法)。
JSP调用JavaBean
通过引入JavaBean,JSP才能较好的把页面展示与逻辑业务分离。
其中,业务逻辑放到后台的JavaBean中,减少JSP中脚本代码,有利于程序的可维护性和可重用性。

一、JavaBean
无参构造器(默认的构造方法)
标准的getter和setter方法
如要进行网络传输(支持RMI),需实现Serializable接口


二、如何在JSP中使用JavaBean
1.定义JavaBean
<jsp:useBean id="BeanName" class="完整包名" scope="范围域">

scope=page、request、response、session、application


2.JavaBean的属性赋值
<jsp:setProperty name="JavaBean对象名" property="JavaBean属性" value="属性值" />
等价于
<% JavaBean对象名.setName("属性值") %>
可嵌套JSP表达式<%=... %>
3.获取JavaBean的属性值
<jsp:getProperty name="对应<jsp:useBean>中的id" property="">

JSP中的异常处理
一、try/catch/finally/throws/throw
//局部代码里处理异常
二、errorPage,isErrorPage
//在整个页面里处理异常
1.<%@ page errorPage="error.jsp" %>
//表示错误处理页面
2.<%@ page isErrorPage="true" %>
//指示错误页面
隐含对象里exception可以<%=exception %>
<%=exception.getMessage() %>
 
三、声明方式处理异常
//在整个应用处理异常。

web.xml

...<error-page>
<exception-type></exception-type>
<location></laocation>
  </error-page>
...
三种异常处理同时出现,作用域越小,优先级越高。故 一 > 二 > 三




day03


一、隐含对象
1.九大对象
out PrintWriter
request HttpServletRequest
response HttpServletResponse
pageContext pageContext
session HttpSession
application ServletContext
config ServletConfig
page 页面实现类的对象
exception Exception



2.域对象
pageContext、request、session、application

1)pageContext:每一个页面都对应着一个pageContext。
在实际应用中主要是使用它来存储属性。另外pageContext对象能够存取其他隐含对象。
a)pageContext对象能够存取其他隐含对象,此时需要制定范围参数。
Object.getAttribute(String name,int scope)
Enumeration getAttributeNamesInScope(int Scope)
void removeAttribute(String name,int scope)
void setAttribute(String name,Object value,int scope)

其中范围参数有:
PAGE_SCOPE,REQUEST_SCPOE,SESSION_SCOPE,APPLICATION_SCOPE
b)pageContext对象取得其他隐含对象。
Exception getException()
PrintWriter getOut()
Object getPage() 回传目前网页的Servlet实体(Instance)。
ServletRequsest getRequest()
ServletResponse getResponse()
ServletConfig getServletConfig()
ServletContext getServletContext() 回传目前网页的执行环境(context)。
HttpSession getSession() 回传和目前网页有联系的会话。
   c)pageContext对象提供取得属性方法
    Object getAttribute(String name,int scope)
    Enumeration getAttributeNamesInScope(int scope)
    int getAttributesScope(String name)
    void removeAttribute(String name)
    void setAttribute(String name,Object value,int scope)
    Object findAttribute(String name)

2)request对象
request对象包含所有的请求信息。
request对象实现javax.servlet.HttpServletRequest接口。
(1)存储和取得数据的方法:
void setAttribute(String name,Object value) 设定name的属性值为value。
Enumeration getAttributeNamesInScope(int scope)
Object getAttribute(String name)
void removeAttribute(String name)
(2)取得请求参数的方法
String getParameter(String name)
Enumeration getParameter(String name) 取得所有参数的名称
String [] getParameterValues(String name) 取得所有name的参数值
Map getParameterMap() 取得一个请求参数的Map
   (3)能够取得请求http标头的方法
    String getHeader(String name)
    Enumeration getHeaderNames()
    Enumeration getHeaders(String name)
    int getIntHeader(String name)
    long getDateHeader(String name)
    Cookie [] getCookies()
   (4)其他方法
    String getContextPath() 取得context路径,即站台路径
    String getMethod() 取得Http的方法Get/Post
    String getProtocol()
    String getQueryString() 取得请求参数字符串,不过方法必须为Get
    String getRequestedSessionId()
    String getRequestURI()
    String getRemoteAddr()
    String getRemoteHost()
    int getRemotePort()
    String getRemoteUser()
    void getCharacterEncoding(String encoding) 设定编码格式,用来 解决窗体传递中文的问题。
 
 3)Session对象
  Session表示目前个别用户的会话状况。
  Session对象实现javax.servlet.http.HttpSession接口
  long getCreationTime()
  String getId()
  long getLastAccessedTime()
  long getMaxInactiveInterval() 取得最大不活动时间
  void invalidate()
  boolean isNew()
  void setMaxInactiveInterval(int interval)
 4)application对象
  application最常被使用在存储环境的信息
  因为环境的信息通常存储在ServletContext中所以常利用application对象来存取ServletContext中的信息。
  application对象实现javax.servlet.ServletContext接口
  int getMajorVersion()
  int getMinorVersion()
  String getServerInfo()
  String getmimeType(String file)
  ServletContext getContext(String uripath)
  String getRealPath(String path)
  void log(String message)
  void log(String message,Throwable throwable)
 5)其他对象
  1.page代表JSP本身,是当前页面转换后的Servlet类实例。
 
  2.response对象
  将JSP处理后的结果传回到客户端
  a.设定表头的方法
  void addCookie(Cookie cookie)
  void addDateHeader(String name,long date)
  void addHeader(String name,String value)
  void addIntHeader(String name,int value)
  void setDateHeader(String name,long date)
  void setHeader(String name,String value)
  void setIntHeader(String name,int value)
  b.设定响应状态码的方法
  void setError(int statusCodec)
  void sendError(int sc,String msg)
  void setStatus(int sc)
  c.用来URL重写的方法
  String encodingRedirectURL(String url)
 
 
  3.out对象
  实际上是PrintWriter对象带缓冲的版本
  能把结果输出到网页上
  控制管理输出的缓冲区和输出流
  void clear()
  void clearBuffer()
  void close()
  void getBufferSize()
  int getRemaining()
  boolean isAutoFlush()
 
  4.exception对象
  使用该对象是必须在page中指明<%@ page isErrorPage="true" %>
  getMessage()
  getLocalizeMessage()
  printStackTrace(new java.io.PrintWriter(out))
  5.config对象
  config对象里存放一些Servlet初始的数据
  public String getInitParameter(name)
  public java.util.Enumeration getIntParameterNames()
  public ServletContext getServletContext()
  public String getServletName()
 
 
day04


一、文件上传
1.表单形式
<form action="" method="post" rnctype="multipart/form-data">
file:<input type="file" name="file" />
<input type="submit" value="提交" >
</form>

2.常见的分页处理:
rows 数据库表中记录总行数 select count(*) from 表名;
totalPage 总页数 int totalPage = rows/size +1;
size 每页显示记录数目 可定制,课写死
curPageNo 当前页 客户端决定
startRowNo 当前页在数据库中的起始行号 int startRowNo=(curPage-1)*size;


day05


一、EL表达式
语法:
<%=name%> <==> ${name}
${empty name} 对域的变量或对象进行判空

表达式语言查找变量的顺序:
pageContext -> request -> session -> application

[] 存取器

隐含对象
EL JSP
pageScope pageContext
requestScope request
sessionScope session
applicationScope application

param   request.getParameter()
paramValues getParameterValues()
header request.getHeader()
headerValues
cookie request.getCookies()
initParam context.param

二、JSTL
jstl.jar
standar.jar

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@taglib prefix=fmt"" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
prefix前缀,uri标签库入口

<c:set var="" value="" />
<c:remove />
<c:out />
<c:catch />
<c:if />
<c;choose />
<c:forEach />
<c:import />
<c:url />

<sql:setDataSource />
<sql:query />
<sql:update />
<sql:param />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值