zoukankan      html  css  js  c++  java
  • jsp/servlet学习笔记(核心编程)jsp部分

    jsp
    jsp最终需要转换成servelt,并进行编译,在请求期间实际上是编译的servlet

    jsp擅长生成大量组织有序的结构化HTML或其他字符数据组成的页面。servlet擅长生成为进制数据,构建数据多样的页面,以及执行输出很少或者没有输出的任务(重定向)

    1.jsp仅在修改后第一次访问时才会转换成servlet并进行编译;
    2.载入到内存中初始化和执行遵循servlet的一般规则

    基本语法:第十一章
    <%...%>

    jsp调用动态代码策略
    1.直接调用(使用及少量代码)
    2.简介调用java代码(开发单独实用工具类,只在jsp中调用工具所需的java代码)
    3.实用Bean
    4.使用MVC
    5.使用jsp表达式
    6.使用定制标签

    jsp脚本元素类型
    1.<%=java Expression%> 求值后插入到servlet输出中
    2.<%java Code%>的scriptlet,他们将插入到select的_jspService方法
    3.<%!Field/Method Declaration%>的声明,它们将插入到servlet类的定义中,不属于任何己有的方法

    限制jsp中的java代码
    最好将java代码放在封装放在WEB_INF/classes/包,然后使用一两句java代码去调用

    不管编写什么样的java类,类文件都要部署在WEB_INF/classes/包中。
    所有的类最好都放在包中

    一、jsp表达式的应用
    <%=java Expression%> 该式子在气质转化成字符串插入到页面中。求值是在运行期间执行。因此可以访问到请求中的所有信息。
    为了简化表达式,可以使用多个预定义变量。_jspService方法(在jap页面生成的servlet中,等同于doGET)的局部变量就会使用什么名称

    就表达式来说,最重要的是对象:
    request response session out application(ServletContext)由Web应用中所有servlet和jsp页面共享的数据结构
    out实际上是jsp中getWrite修改相对应的PrintWrite

    表达式xml语法 <jsp:expression>..</jsp:expression>
    一定要小写

    二、scriptlet
    编写scriptlet完成更复杂的任务,可以将任意代码插到_jspService方法中去调用
    <% java Code%>
    将Word导入HTML(不需要在相应文件那里指定类型。jsp的jspWirte会对文档进行缓冲)
    <% response.setContentType("application/msword")%>

    表达式不以分号结尾,而scriptle包涵java代码必须以分号结尾

    <jsp:scriptlet>java code</jsp:scriptlet>
    尽量的避免html代码和scriptle混合使用,有的时候为了把后面html内容包含到if...else中去可能会使用这种方法
    <%if(math.random() < 0.5) {%>
    <H1> Have e nice day<H1>
    <%} else {%>
    <H1> Have e nice day<H1>
    <%}%>
    等同于
    if(math.random() < 0.5) {
    out.println("<H1> Have e nice day<H1>")
    } else {
    out.println("<H1> Have e nice day<H1>")
    }

    三、使用声明 插入到servlet类的主定义体中
    <%! Field or Method Definition%>
    一般不产生输出。可以包含任何字段或代码。但不要覆盖doget,dopost init等代码
    可以使用jspInit或者jspDestory对页面进行初始化和清理
    相当于在servlet类里面重新定义了一个继承了HttpJspPage接口的类,类中包含声明中的代码。然后再_jspService中调用该代码

    <jsp:declaration>Field or Method Definition</jsp:declaration>

    _jspService方法中的隐式变量(其实也就是内置的局部变量)
    request response out session application
    config(该页ServletConfig) page(相当于this) exception(错误页) pageContext类(该类拥有getRequest,getResponse,getSession以及getSession方法)

    第十二章 控制所生成servlet结构 JSP Page
    <% directive attribute="value"%>
    jsp中主要有三种指令 page include taglib
    page控制servlet结构
    include 将一个文件插入jsp页面中
    taglib 自定义标签

    page:
    import属性:
    <%@ page import="package.class",...%>
    使用类必须放在WEB-INF/Classes中

    contentType和pageEncoding属性:
    <%@ page contentType="MIME-Type; charset=character-Set" %>
    相当于
    <% request.setContentType("...");%>
    可以引入电子表格 原书253页
    更改语言:
    <%@ page pageEncoding="Shite_JIS";%> 日语

    session属性:
    <%@ page session="true"%> 是否启用session

    isELIgnored属性:

    buffer和autoFlush属性:缓冲区大小与自动清空缓冲区
    <%@ page buffer="32Kb" autoFlush="true"%>

    info属性:定义一个在servlet中通过getServletInfo方法获取的字符串
    <%@ page info="someMessage"%>

    errorPage和isErrorPage属性:
    <%@ page erroPage="errprPage URL"%> 当页面发生错误转到错误页面
    <%@ page isErrorPage="true"%> 是否可以作为其他页面的错误页面

    错误页面放在WEB-INF中,防止用户直接访问

    isThreadSafe 废弃 SingleThreadModel设计不好

    extends属性:
    指定jsp页面所生成类的超类
    <%@ page extends="package.class"%>

    language属性:指定脚本语言
    <%@ page language="java"%> 不用管 默认java

    <jsp:directive.directiveType attribute="value">
    如:
    <jsp:directive.page import="java.util.*" >

    第十三章 jsp包含文件和applet
    jsp:include动作 请求期间包含页面
    html页面 jsp页面 纯文本 servlet输出等
    与RequestDispatcher类中的include方法完全相同

    <jsp:include page="relation-oath-to-resource"/>
    次级属性flush:页面包含时是否清空主页面输出流
    任何时候,凡是由服务器处理的,都要按照当前web应用进行解释。只有浏览器去处理的时候,才会相对于服务器根目录去解释

    默认被包含的页面与主页面使用同一个请求参数
    可以使用 jsp:param增加请求参数
    <jsp:include page="relation-oath-to-resource">
    <jsp:param name="id" value="a123">
    </jsp:include>

    jsp:param会被包含的页面优先采用

    include指定
    <%@ include file="Relative url"%>

    jsp:include在请求期间激活,只有请求时才起作用
    include指令在页面转化期间激活,难维护

    jsp:include只有在被包含页面发生请求时才会编程成servlet,因此include指令更为强大

    <%-- Navbar.jsp modified 9/1/03 --%>
    <%@ include file = "Navbar.jsp"%>
    添加注释时,修改被包含文件可自动更改修改日期

    <jsp:directive.include file="...">

    转发请求 使用jsp:forword可获得辅助页面的完整输出
    但不推荐这么做,因为这样主页面不能含有任何输出。
    可以使用servlet调用RequsetDispather的forword方法

    jsp:plugin 添加applet

    第十四章 JavaBean组件在jsp文档中的应用
    优点:不需要java语法 对象共享简单 请求参数与对象属性之间方便对应起来
    系统会首先寻找Bean对象,找不到在创建对象
    特点:
    1.必须拥有一个0参数的构造函数
    2.不应该由公开的实例变量(字段)
    3.持续性的值应该通过set/getXxx方访问

    bean基本任务
    jsp页面中,主要使用三种构建和操作javaBean操作javaBean组件

    1.<jsp:useBean id="beanname" class="Package.Class"/>

    <%ClassName beanname = new ClassName();%>

    2.<jsp:getProperty name="beanname" property="propertyName"/>
    <%=beanname.propertyName()%>
    3.<jsp:setProperty name="beanname" property="propertyName" value="propertyValue"/>
    <% beanname.propertyName("propertyValue");%>

    <jsp:setProperty name="beanname" property="*"/>
    属性自动关联 简化操作

    type="可以声明的变量类型是父类或者接口"

    共享属性 scope
    scope="page" page作用域表示:处理当前请求,加bean对象绑定到局部变量外,还应该放在PageContext里面,servlet可以通过预定义变量pageContext的getAttribute访问。一般省略不写

    scope="request"
    表示将bean对象绑定到局部变量外,还会写入HttpServletRequest中,从而通过getAttribute访问它。在页面跳转时会共享请求对象

    scope="session"
    表示将bean对象绑定到局部变量外,还会写入HttpSession中,从而通过getAttribute访问HttpSession中的对象。

    scope="application"
    表示将bean对象绑定到局部变量外,还会写入ServletContext中,在整个web应用中共享。通过ServletContext的getAttribute访问获取。

    Bean可以自动转换String int double类型 且对大小写敏感

    模拟构造函数,在第一次访问时初始化变量
    <jsp:useBean id="counter" class="CounterClass" scope="applicaion">
    <jsp:setproperty name="counter" property="fristPage" value="Share,jsp"
    </jsp:useBean>

  • 相关阅读:
    rpc框架thrift
    rpc框架 SimpleXMLRP
    pyqt与拉勾网爬虫的结合
    python打造线程池
    python concurrent.futures包使用,捕获异常
    linux环境下pytesseract的安装和央行征信中心的登录验证码识别
    使用装饰器捕捉错误
    hbase 学习(十六)系统架构图
    大数据入门:各种大数据技术介绍
    How MapReduce Works
  • 原文地址:https://www.cnblogs.com/luckyQi/p/6782544.html
Copyright © 2011-2022 走看看