JSP学习初体验

JSP简介:

1)JSP--Java Server Pages

2)拥有servlet的特性与优点(本身就是一个servlet)

3)直接在HEML中内嵌JSP代码

4)JSP程序由JSP Engine先将它转换成servlet代码,接着将它编译成类文件载入执行

5)只有当客户端第一次请求执行JSP时,才需要将其转换、编译

JSP的优点:

1)优良的性能

 优于CGI、PHP、ASP

2)平台无关性

 操作系统无关,web服务器无关

3)可扩展性

 tag的扩展机制,简化页面开发

JSP编程--基本语法:

JSP传统语法:

1)Declaration:

基本语法:
<%!  %>
说明:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行。此部分声明的变量会转化为SERVLET的成员变量,函数只能在此处声明。
例:
<%!
int i;
public void setName(){… …}
%>

【注意】:<% %>这种形式声明的变量和方法是局部的,例如<% int count1=0 %>

<%= xxx %>:原样输出xxx的内容
2)Scriptlet:

基本语法:
<%程序代码区%>
可以放入任何的Java程序代码,此部分声明的变量为局部变量,在service()方法里
例:
<%
for (int i=0;i<10,i++)
{
 … …
}
%>

3)注释格式:

1)<%--...  ...--%>
2)<%//...  ...%>
3)<%/*...  ...*/%>

4)表达式:

基本语法:
<%=… …%>
=后面必须是字符串变量或者可以被转换成字符串的表达式
不需要以;结束,只有一行
例:
<%=“hello world”%>
<%=i+1%>
<%=request.getParameter(“name”)%>

【注意】:形如http://localhost:8888/test/Expressions.jsp?testParam=abc%20de,问号?后面的testParam=abc%20de是传递给jsp的参数,如果参数内包含空格,则会用%20来进行替换;

5)Directive:编译期指令

Directive(编译指令)相当于在编译期间的命令
格式:
<%@Directive 属性=“属性值”%>
常见的Directive:
page
include
taglib

详细了解三种常见的Directive:

5.1 Directive-page:

指明与JSP Container 的沟通方式
基本格式:
%@page language=“script language”|
 extends=“className”|
 import=“importList”|
 buffer=“none|kb size”|   --none:不缓冲,默认8k
 session=“true|false”|   --是否可以使用session,默认true
 autoFlush=“true|false”  --缓冲器是否自动清除,默认true
 isThreadSafe=“true|false”|  --默认false(永远不要设成true)
 info=“infoText”|    --任何字符
 errorPage=“errorPageUrl”|
 isErrorPage=“true|false”|
 contentType=“contentTyepInfo”|
        pageEncoding=“gb2312”
%

【注意】比较重要的几个属性:import、errorPage、isErroPage、contentType

下面分别举例说明

import和contentType

<%@Page import="java.util.*"%>

<%@page contentType="text/html;charset=gb2312"%>
<%= new Date() %>
<%    out.println("你好");%>

ErrPage和isErrorPage:友好的出错界面,当出现错误的时候提供给用户ErrPage的页面

<%-- *******ErrPage.jsp******* --%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page is ErrorPage="true" %>
<HTML>
<BODY TEXT="red">

错误信息:<%= exception.getMessage() %>
</BODY>
</HTML>

5.2 Directive-include:用于包含非动态的代码,不能向fileURL中传递参数,即不能出现形如abc.jsp?user=aaa的形式

将指定的JSP程序或者HTML文件包含进来
格式:
<%@include file=“fileURL%>
JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生成一个java和class)
限制:
不能向fileURL中传递参数
不能abc.jsp?user=aaa

6)Action:运行期间的指令

Action(动作指令)在运行期间的命令
常见的:
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forward
jsp:param
jsp:plugin
嵌入applet

6.1 jsp:inlcude/jsp:param

用于动态包含JSP程序或HTML文件等
除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。
格式:
<jsp:include page=“URLSpec” flush=“true”/>
<jsp:include page=“URLSpec” flush=“true”>
     <jsp:param name=“ParamName” value=“paramValue”/>
</jsp:include>
jsp:param用来设定include文件时的参数和对应的值

和编译指令include的区别:
include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入
Include不能带参数, 而<jsp:include>可以。
动态包含的文件和被包含文件用的是同一个request对象。产生两个class文件

6.2 jsp:forward/jsp:param

用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
格式:
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
 <jsp:param name=“paramName” value=“paramValue”/>
</jsp:forward>
<jsp:param>用于指定参数和其对应的值

Forward的页面和forward到的页面用的是同一个request
与此相对应的是
response.sendRedirect

6.3 <jsp:forward>与response.sendRedirect的区别

用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
格式:
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
 <jsp:param name=“paramName” value=“paramValue”/>
</jsp:forward>
<jsp:param>用于指定参数和其对应的值

Forward的页面和forward到的页面用的是同一个request
与此相对应的是
response.sendRedirect

两者的区别可以用下面的图示描述:

用蓝色标注的是forward方式请求页面(前后是同一个request),用绿色标注的是sendRedirect方式(不同的request)

6.4 jsp:usebean(不要使用裸体类,将bean放到包中,如com.itcast.useBean)

通过jsp:useBean,可以在JSP中使用定义好的Bean
Bean的基本要素:
必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器
Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写
通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写
基本用法:
test.jsp/CounterBean.java 不要使用裸体类(规范要求)

jsp:useBean各项参数含义:
id:对象实例名称
scope:Bean作用的范围,默认为page,对整个jsp页面有效
class:Bean类名称(全名)
type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类
Scope各项参数的意义:
page:仅涵盖使用JavaBean的页面
request:有效范围仅限于使用JavaBean的请求
session:有效范围在用户整个连接过程中(整个会话阶段均有效)
application:有效范围涵盖整个应用程序。也就是对整个网站均有效

jsp:setProperty的格式:
<jsp:setProperty name=“beanName”
 property=“propertyName” |property=“*”
value=“property value” |param=“paramName”/>
相当于beanName.setPropertyName(value)方法调用(setXxx()方法)
jsp:getProperty的格式:
<jsp:getProperty name=“beanName” property=“propertyName”/>
相当于beanName.getPropertyName()方法调用(getXxx()方法)

建立表单参数和Bean属性之间的关联
通过param指定表单元素的名称,通过perperty指定对应的Bean属性名称,由此建立这两个变量的关联
通过*来设置所有属性和输入参数之间的关联
在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据
时间: 2024-12-24 07:42:42

JSP学习初体验的相关文章

Spring学习初体验

一.首先我们要明确我们为什么要学?在我们学习了javaweb基础后,我们基本可以完成基本的网站要求,但是我们为什么要学习和使用使用Spring? 1.降低组件之间的耦合度,实现软件各层之间的解耦. controller----->service--------->dao 2.可以使用容器几桶的众多服务.如:事务管理服务.消息服务.当我们使用容器管理时,开发人员就不再需要手工控制事务,也不需处理复杂的事务传播. 3.容器提供单例模式支持,开发人员不再需要自己编写实现代码. 4.容器提供了AOP技

研一前的暑假,深度学习初体验

????在五月二十七号左右,再次来到一所新的城市,即将在这里度过我研究生的三年,之所以来这么早,是因为希望研究生阶段,能够跟着一个研究方向,自己比较感兴趣的导师.找的第一个导师比较偏学术一些,而我又希望自己在研究生阶段能够有一定的项目经历,所以在经过思考后,我和老师表明了我的想法,老师也表示理解,和我推荐了其他的导师.在找导师的过程中,发现比较热门的导师的特点有以下几点.在校刚来的几位导师中,比较年轻的导师无论能力还是学术都比较强,所有也很快就定下了人选.在来之前,自己也大致确立了方向,大数据.

暑假第一篇,linux学习初体验

在大二结束的小学期我学习了嵌入式编程andrino.智能小车和树莓派.树莓派用的就是类Unix语言,当时主要是学习了: ·简单的命令行命令和使用gcc编译c文件的各种带参数的方式. ·进程.线程.网络编程.FIFO管道的使用,并未深入了解原理. 学嵌入式主要是接线,加把c程序烧录到芯片中,通过逻辑来控制各口的电平,来显示操作的情况,或者是在PC端的串口中显示(有实验报告). 智能小车功能包括各种运动(前后左右停止),有温度.光照.距离的测试模块,有自动距离检测.如果小于一定数值会改变方向.还有红

iOS学习初体验

来到无限互联已经一个星期了,当初选择来无限互联学习ios开发,心里确实有点忐忑,但是渐渐觉得很踏实.每天早八点到晚九点的学习好像又回到了高中,来到这的第一天早上醒来,突然觉得自己呼吸的是大京都的空气,于是预期的想家了.正式上课后,这种感觉就慢慢减少了,不是不想家了,而是紧张的学习根本没有闲的发呆或者继续放大想家情绪的的时间.    入学第一天人事部的老师和教学总监汪洪俊老师在发言中都给予了我们很大的期许和信心.当然,也第一次见到了班主任张琪老师.开学典礼的最后,我们一合了影,那一刻突然就觉得,我

国美深度学习初体验,开启社交电商的智能时代!

本周五(2017 年 7 月 21 日),由 51CTO 主办的 WOTI2017  全球创新技术峰会将于北京富力万丽酒店举行,此次峰会设有全天的巅峰论坛,及深度学习.人机交互和智+应用等分论坛. 国美大数据中心副总监杨骥,将出席深度学习分论坛,做主题为"深度学习开启社交电商智能时代"的演讲.在会前交流中,杨骥介绍了此次演讲的部分技术干货,让我们抢先看. 人工智能.机器学习与深度学习的关系 从冯诺依曼体系结构的提出开始,人类使用计算机就有了智能化的诉求.也就是使用计算机或机器人能够帮助

jsp&amp;servlet初体验——用户登录功能实现

数据库准备-创建db_login数据库  t_user表 1.创建web工程 2.创建用户model   user.java 1 package com.gxy.model; 2 3 public class User { 4 private int id; 5 private String userName; 6 private String password; 7 8 public User() { 9 super(); 10 } 11 12 13 public User(String us

selenium学习初体验-C#/java/Python

背景:之前由于自己有编写CefSharp.WinForms 窗体版以及 接口化 WCF+CefSharp.WinForms的网站版本,但是由于某些原因,延伸出Selenium学习与研究 总结:selenium特点是在做自动化测试,如果公司需要自动化测试是个不错的选择,开发语言包含很多.你完全可以使用自己熟悉的语言进行开发,请查看 https://docs.seleniumhq.org/docs/ 通过几天的摸索,个人比较还是建议大家最后部署在windows平台,linux平台由于缺少可视化,在调

大数据学习初体验:Linux学习+Shell基础编程+hadoop集群部署

距离上次博客时间已经9天,简单记录下这几天的学习过程 2020-02-15 10:38:47 一.Linux学习 关于Linux命令,我在之前就已经学过一部分了,所以这段时间的linux学习更多的是去学习Linux系统的安装以及相关配置多一些,命令会一些比较常用的就够了,下面记录下安装配置Linux系统时的注意事项. 这里配置的虚拟机的内存为4g 使用的 CentOS-6.5-x86_64-minimal.iso 映射文件 在进入linux系统中时,需要将虚拟机的主机名修改成自己想要的名字,还要

json学习初体验--第三者jar包实现bean、List、map创json格式

1.的需要jar包裹json-lib.jar 下载链接: http://sourceforge.net/projects/json-lib/files/json-lib/ 此包还须要下面的依赖包, commons-lang.jar commons-beanutils .jar commons-collections.jar commons-logging.jar ezmorph.jar 2.创建javabean文件,以以下的为例: <span style="font-size:18px;&