JSP总结(一)

JSP总结(一)

前言:原本呢,是打算只写个JSP的内置对象总结,但是没想到这个家伙的JSP总结非常不错,我就拿来用了。

借鉴地址:http://www.cnblogs.com/cyjch/archive/2012/03/28/2420798.html

杂言(了解下即可):

(一)        JSP定义:

1)   Java Server Page, Java EE 组件,本质上是 Servlet。

2)   运行在 Web Container.接收 Http Request,生成 Http Response(默认协议是 Http 请求和响应)

3)   JSP 使得我们能够分离页面的静态 HTML 和动态部分——我们需要的技术。

4)   使页面可以混和html代码、Java代码以及JSP标签;允许访问组件。

(二)        Servlet的缺陷(JSP出现的原因):

1)   写静态页面必须部署后才能看到效果,很难控制页面的外观。

2)   从技术角度来说Servlet是Java代码和HTML静态代码的混合代码。

3)   从市场竞争角度来说,微软推出了ASP产品。

(三)        JSP的改进:

1)   JSP是标签式的文本文件(区Servlet是Java文件)

2)   JSP不需要编译(其实是由服务器监测JSP文件的变化,再将其翻译成 Servlet 代码)。服务器对其进行编译并在第一次请求时创建一个Servlet实例。所以,第一次访问JSP页面时会后延迟

3)   JSP不用写配置文件

4)   JSP以静态代码为主,Java代码为辅。Servlet反之。

5)   是J2EE蓝图的一部分(Servlet、JSP以及EJB是J2EE的三大组件)

6)   JSP从本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补的关系。

7)   JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。

8)   JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应式的工作方式)往两个方向发展。

JSP基本语法:

一、  JSP的声明(statement)

用来定义在产生的类文件中的类的属性和方法(成员变量)。可声明类(即是内部类)。

由于servlet是工作在多线程环境下,所以尽量不要在service方法体外声明成员变量。

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

如:

       <%!String hello="Hello, World!";%>  //变量的声明
         <%=hello%>   //变量的调用
           <%! private int counter=0;  public int count(){ return ++counter;} %> //函数的声明
           <h1><%=count()%></h1> //函数的调用

声明规则:

1) JSP中声明的变量和方法对应于Servlet中的实例方法和实例变量。这些将被同时请求该页面的所有用户所共享;

2) 在使用变量或方法前须先定义(不是说声明变量的位置在页面中要处于使用变量的前面,而是指变量不声明不能使用);

3) 声明的变量或方法的作用域为当前页面或包含的页面;

4) 语句间以分号分隔。

二、  JSP代码段(Scriptlet)

<% java代码 %>

是一段可以在处理请求时间执行的Java代码。可以产生输出,也可以是一些流程控制语句。

在代码段中定义的变量为service方法中的局部变量。

1.    _jspService()中的局部代码:

 <%  System.out.println("Hi,I like JSP."); %>   //在控制台打印出,网页上没显示

      <%  out.println("Hi,I like JSP."); %>          //打印在网页上
      <%  Connection conn=DriverManager.getConnection();
       Statement st=conn.createStatement();       String sql="select * from users";
       ResultSet rs=st.executeQuery(sql);
         //……
       %>

问:能否在JSP脚本里定义方法?

答:不能! //脚本相当于方法,不能在方法里定义方法

<%!public void helloworld(){}%>  //可以声明方法
<% public void helloworld(){}%>  //编译出错;脚本不能定义方法

2.    比较:

<%! int i=100;%>     //成员变量
<%  int i=101;%>     //_jspService()方法中的局部变量
<%=i%>  //同一文件里,局部变量优先

3.    脚本小程序规则:

1) 你使用的脚本语言决定了脚本小程序的规则;

2) 语句间以分号分隔;

3) 可以使用默认的对象、import进的类、declaration声明的方法和对象以及useBean tag中声明的对象。

三、JSP表达式(expression)

<%=……%>   // "="号

在JSP请求处理阶段计算他的值,表达式生成的代码是Service方法中的一个代码片断。

   JSP对于声明的处理:1、计算表达式的值

2、将值转换成String

3、用out.println发送标签;把数据输出至页面的当前位置

<%="Hello,JSP world!"%>     //out.println("Hello,JSP world");<%=name%>    //<%!String name="GiGi";%> out.println(name);
<%=new java.util.Date()%>   //out.println(new java.util.Date());

表达式规则:

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.setContentType("text/html; charset=gbk");

(1)import:导入其他的包和类; 其中,JSP默认导入的包是java.lang.*

<%@page import="java.util.Date"%> //具体的包和类
<%@page import="java.sql.*"%>     //包下的所有类
<%@page import="java.util.*, java.io.*, java.net.*"%> //连写,逗号分隔

(2)Session:指示当前的jsp是否参与会话 (默认为true; 参与会话)

通过指令使当前页面与session不可会话:    <%@page session="false"%>

session="true"时,可用内建对象session直接访问会话,例如:

<%    session.setAttribute("username","maxwell");  String name = (String)session.getAttribute("username"); %>
<%=name%>    

(3)errorPage:

isErrorPage:Jsp页面中出现异常的处理方式

对于有可能出现异常的页面:

<%@page errorPage="error.jsp"%> //异常时会跳转到处理异常的页面;这页面自己写

在有可能异常的地方打印原因:  throw new Exception("数据库连接出错");

对于处理异常的页面(error.jsp)里:

<%@page isErrorPage="true"%>,其中使用<%=exception.getMessage() %>把异常信息打印出来

(4)isThreadSafe——此属性已经不再使用(已废弃)

当前Jsp页面是否线程安全    default--->true

<%@page isThreadSafe="true"%>  //普通的Servlet,可以并发处理用户请求

<%@page isThreadSafe="false"%> //相当于Servlet实现了SingleThreadModel

2.    include指令

把目标页面的内容包含到当前页面,产生页面叠加以后的输出效果 //相当于将两个页面合并;编译时就包含进来

<%@include file="foot.jsp"%> //可插入任意位置

3.    taglib指令

留在JSTL里讲解。

五、JSP中的注释

1.      java格式注释

编译器会忽略掉此类注释中的内容(客户端的源码看不见)

<%-- JSP注释;可多行 --%>
<%// java 单行注释 %>
<%/* java multi lines comments */%>
<%/**java 特有的注释*/%>

2.      html风格注释

编译器会执行此类注释中的代码(客户端的源码看得见)

<!-- html风格注释 --> //等价于out.println("<!-- html风格注释 -->")

这种注释方式不好的地方就是当页面注释信息太多的时候会增大服务器的负荷。

还有注释信息需要在网络上传输,从而降低效率;内部程序员的测试数据一般不能写在这种注释中,以免泄露。

JSP处理过程:

JSP源文件处理分成二个阶段:

1.      JSP页面转换阶段:

页面被编译成一个Java类,所有的HTML标记和JSP标记都被转换创建一个Servlet。这时,脚本和表达式还没有被执行;

2.      请求处理阶段:

发生在服务器,将一个客户端请求指向JSP页面。

一个请求对象创建、解析以及提交给编译好的JSP对应的servlet。

当这个servlet处理请求的时候它执行先前在JSP中定义的处理脚本小程序和表达式。

使用脚本代码的缺点和指导方针

1.      缺点:

a. 过度使用脚本代码使用JSP页面混乱和难以维护;

b. 脚本代码降低JSP二个主要的优点:软件重用和代码分开

2.      指导方针:

只在组件功能无能为力或需要有限的脚本时使用。

JSP调用JavaBean

通过引入JavaBean,JSP才能较好的把页面展示与业务逻辑分离。

其中,业务逻辑放到后台的Java Bean中,减少JSP中的脚本代码,有利于程序的可维护性与可重用性。

(一)    定义Java Bean

形式:

<jsp:useBean id = "BeanName" class = "className"  sope="范围域">

 id   ——声明bean对象的标识符,方便其他地方使用

 class——bean对象的类型,注意要使用完全限定名

 scope——java bean对象的共享范围(page、request、session、application)

page:当前页面范围(范围最小,生命周期最短)

request:同一个请求范围 (forward,include)

session:同一个会话(30分钟不使用,会自动结束)

application:同一个应用(范围最大,生命周期最长)  ServletContext

例如:

  

SuperGirl <jsp:useBean id="girl" class="com.tarena.vo.SuperGirl" scope="session"/>

等价于:

   

<% SuperGirl girl=(SuperGirl)session.getAttribute("girl");
    if(girl==null){
      girl = new SuperGirl(); //对应 id 和 class
      session.setAttribute("girl",girl);  //对应 scope 的值
    }
%>

可以用表达式获得bean的值:

<%=girl.getName();%>

(二)    对JavaBean的属性赋值

    形式:

<jsp:setProperty name="JavaBean对象名" property="JavaBean属性名" value="属性值"/>

例子:

<jsp:setProperty name="girl" property="name" value="Lily"/>

等价于:

<% girl.setName("Lily");%>

可以嵌套JSP表达式:

<jsp:setProperty name="girl" property="name" value=‘<%=request.getParameter("name")%>‘/>

Java Bean中的属性名与form中输入域的名字保持一致的话,可以使用通配符*,一次设置所有字段的值。

<jsp:setProperty name="" property="*"/>

(三)    获取JavaBean的属性值

形式:

<jsp:getProperty name="" property=""/>

name:标识具体的Bean对象,这与<jsp:useBean>标准动作中的id值相匹配

property:标识属性中的标识符。

JSP总结(一)

时间: 2024-11-09 10:00:49

JSP总结(一)的相关文章

不用动手术的肝脏清洗法

几乎每个人体内都有肝胆结石,或许很多人只知道胆结石,不知道肝脏内也有结石,也不知道其实很多胆结石的初期就是在肝脏内形成的,更不知道吃夜宵.晚饭在7点之后吃.吃油炸食品.甚至喝水较少也会导致肝胆结石.就以上几个不良生活习惯,我们每个人占多少?简单的讲,肝脏是人体内最大的器官,它是人体的解毒工厂,它的构造极其复杂,所以至今为止,人类无法设计出人造肝脏,它的复杂度仅次于脑组织.所以让肝脏维持正常功能直接关系着人体的健康.肝脏可以使激素,酒精以及某些有害药物在体内失效.各种人体无法代谢的毒素都会由肝脏负

导演与明星老婆离婚 恋亲手捧红干女儿

http://www.ehotelier.cn/Thread.jsp?tid=182934http://www.ehotelier.cn/Thread.jsp?tid=182940http://www.ehotelier.cn/Thread.jsp?tid=182946http://www.ehotelier.cn/Thread.jsp?tid=182951http://www.ehotelier.cn/Thread.jsp?tid=182957http://www.ehotelier.cn/T

jsp获取当前项目跟路径

在jsp中获取当前项目的根路径: <% String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%> 可以使用${basePath}获取.

Jsp通过Filter实现UrlRewriter原理

web.xml文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q

jsp声明周期

https://www.w3cschool.cn/jsp/jsp-life-cycle.html 几点注意: jsp初始化期: 容器载入jsp文件后,它会在为请求提供任何服务前调用jspinit()方法.如果需要执行自定义的jsp初始化任务,就重写jspinit()方法就行了. public void jspInit() { //代码 } 一般来讲程序只初始化一次,servlet也是一样的.通常情况下您可以在jspInit()方法中初始化数据库连接打开文件和创建查询表. jsp执行期: jspS

JSP、JSTL、EF学习笔记

JSP 1)Java Server Page,在html中嵌入java代码 2)九个内置(隐式)对象 request response out page pageContext config session application Exception 3)JSP指令 <%@ page ... %> Page指令,定义页面属性 eg:<%@ page language="java" contentType="text/html;charset=UTF-8&qu

【JSP】配置错误页面

1,使用JSP方式 如果配置是Jsp时,需要把isErrorPage设置为true, 以及设置 <%@ page language="Java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" isErrorPage="true"%> 错误页面: <%@page import="java.io.PrintStream"

jsp映射为其他地址上去 ???

在web.xml 里面配置servlet不起作用,所以配置jsp,然后在jsp里面跳转到servlet去   ???  第八天中的<08-jsp常用标签.avi> 在web.xml里面先设定 14.jsp 为默认首页,然后在14.jsp 里面设定跳转到servlet 代码里面去 映射到其他地址去:

关于tomcat JSP虚拟目录的这点事儿!

最简单的情况当然是将.jsp文件放在C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT目录下,运行tomcat, 在浏览器中直接访问http://localhost:8080/HelloWorld.jsp  即可运行.jsp文件 而在实际的开发运用中,我们是不可能将Tomcat应用程序安装在系统盘如C盘. 所以,我们需要运用到设置虚拟目录的知识: 为创建虚拟目录以在浏览器中运行jsp文件:1:假设我们将tomca

jsp&amp;el&amp;jstl-01

案例1-在页面中展示所有商品信息,不要使用jsp的脚本技术分析: jsp/el/jstl jsp: java 服务器页面 作用: 将内容的生成和信息的展示相分离 运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.jsp脚本: <%..%> java代码片段 <%=..%> 输出表达式 相当于out.print(); <%!...%> 声明成员jsp的指令 作用:声明jsp页面的一些属性和动作 格式: <