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>

时间: 2024-12-24 08:12:14

jsp/servlet学习笔记(核心编程)jsp部分的相关文章

jsp/servlet学习笔记(核心编程)servlet部分

功用:1.读取客户端显示数据2.赌气浏览器隐式请求数据3.生成结果4.向客户发送显示数据(文档)5.发送隐式HTTP相应数据 1.效率:传统CGI对每一个请求都会启动一个进程 servlet使用轻量级的java线程处理2.便利 3.强大 4.廉价 5.可移植 6.安全 jsp作用某种程度上,servlet看作是含有html的java程序将jsp看作是含有java代码的html页面jsp会翻译成servlet,servlet会被编译,在请求期间运行的就是servlet Web目录html以及jsp

jsp/servlet学习笔记(核心编程)mysql部分

第十七章 访问JDBC(1)载入JDBC驱动程序需要在Class.forName方法中指定数据库驱动程序的类型try{ Class.forName("connect.jdbc.driver.OracleDriver");}catch(ClassNotFountException){ System.err.println("");} (2)定义链接URL(指定协议,主机名.端口和数据库名)String host="dbhost.yourcompany.com

JSP Servlet学习笔记

在面试Java程序员工作时,经常会被问到JSP Servlet中相关的知识.这些知识都是JSP Servlet的基础,这篇文章主要梳理一下JSP Servlet比较基础但是又比较重要的知识. 1 service方法调用过程 在Servlet接口中有一个service方法,这个方法不是有人手动的调动,而是在运行时由tomcat自动调用的.GenericServlet抽象类实现了Servlet接口,当然它也重写了service方法,但是它也没有具体实现.到了HttpServlet类中,service

JSP&amp;&amp;SERVLET学习笔记(七):Servlet处理上传的文件

package cc.openhome; import java.io.DataInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.se

JSP&amp;&amp;SERVLET学习笔记(一):HelloServlet

package cc.openhome; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.s

JSP&amp;&amp;SERVLET学习笔记(三):URL模式设置

//URL模式的设置 //                         环境路径          Servlet路径    路径信息 //requestURI = contextPath + servletPath + pathInfo; //Servlet路径认为/*为空串 package cc.openhome; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletExc

JSP&amp;&amp;SERVLET学习笔记(四):关于HttpServletRequest

package cc.openhome; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.

Hibernate学习笔记--核心编程

参考资料:Java Web核心框架 http://blog.csdn.net/lsh6688/article/details/7611950 Part 1.hibernate核心接口层次架构关系 图:hibernate核心接口层次架构关系 上图中,Hibernate的接口大致可以分为以下几种类型: 1. 基本操作类:一些被用户的应用程序调用的,用来完成基本的创建.读取.更新.删除操作以及查询操作的接口.这些接口是Hibernate实现用户程序的商业逻辑的主要接口,它们包括Session.Tran

Servlet学习笔记(七)—— JSP概述

1.Servlet两个缺陷: ①所有HTML标签必须包在Java字符串中,使得发送HTTP响应十分繁琐: ②所有文本和HTML标签都必须进行硬编码,即使对表示层做极其微小的修改,也需要重新编译. 2.注释: (1)JSP备注:<% %>,不会发送到浏览器,不能嵌套 (2)HTML备注:<!-- -->,不被容器处理,直接发送到浏览器,用途之一是标识JSP页面.在处理带有许多JSP片段的应用程序时,开发者通过查看HTML源代码,可以轻松查出某个HTML代码部分生成了那个JSP页面.