JSP编程2

关于Servlet与JSP的比较:

In short: servlets should be used if you have more Java than HTML and JSP should be used if you have more HTML than Java.

It is very common to combine servlets and JSP so that the initial request gets sent to a servlet which does some Java work and then forwards it to a JSP which actually makes the HTML output.

  • In MVC, jsp act as a view and servlet act as a controller.
  • The advantage of JSP programming over servlets is that we can build custom tags(自定义标签) which can directly call Java beans. There is no such facility in servlets.

jsp文件与Servlet文件调试的不同

jsp文件是运行时编译的,所以修改后无需重新部署,修改就可以应用。而Servlet文件则不同

.jsp文件在被部署到服务器后,直到有对该页面的第一次请求,服务器才会把该jsp文件转译为java文件(则俗称的Servlet),并编译得到class文件来运行。当JSP网页在执行时,JSP Container会做检查工作,如果发现JSP网页有更新修改时,JSP Container才会再次编译JSP成Servlet; 如果JSP没有更新时,就直接执行前面所产生的Servlet。


A.jsp文件转译成A_jsp.java后变的复杂(与自己编写的Servlet(MyServlet)相比)的原因


1.服务器对httpServlet又进行了一层封装(httpJspBase),所以A_jsp.java与MyServlet不是同一个Servlet(至少不是同一个类,虽然是继承关系)


2.对于同一种行为(forward,include等等)A_jsp.java的写法和MyServlet的写法有可能不同:

(A.jsp里的java程序段的写法和MyServlet的区别只在于MyServlet需要通过request获得内置对象,而这部分在转译时服务器帮做了 所不用)

虽然我们并不需要关心(去记)A_jsp.java的写法,但通过写法才能了解服务器是如何处理这种行为的。


3.A_jsp.java里的内置对象的获取通过ServletContext获得,而MyServlet一般是通过request和respons获得



ServletContext(context:语境; 上下文; 背景; 环境;)

里面封装了一个Servlet的request和reponse,也提供了各种内置对象的获得方法





有了某个行为的写法,我们就知道了参与完成这个行为的类和方法。

既然是服务器的行为,你会发现大部分这些类和方法都来自服务器的类库


服务器各种行为的详解:

1.指令<%@

指令是编译期间执行的代码,常用的有:page、include、taglib。语法是<%@page ... %>。
page用法:导入包,jsp输出内容的类型,指定处理异常的错误页面(相当于捕捉页面异常)
include用法:等价于代码复制(所以有可能出现相同变量错误,但编译器不会发现)

2.声明

声明的变量和方法最终编译成Servlet中的成员变量和方法。语法是<%! ... %>。这里的代码
都会生成在service()方法外,所以声明的变量是编译后Servlet的成员变量,而且可以声明方法。
这是声明与后面将要介绍的普通JSP代码的区别。

3.动作 <jsp:  使用xml格式控制服务器的行为
动作是运行期执行的代码。<jsp:include>、<jsp:forward>、<jsp:useBean>等等。<jsp:include>
是动态引入其他文件,如果代码不执行到这里就不会引入,一定要与include指令区分开。
<jsp:forward>与Servlet中的forward方法功能相同,而<jsp:useBean>、<jsp:property>稍后在JSP
转换成的Servlet源文件中会看到它们的真身。

include:与include指令不同的是,include动作只把文件的输出包含进来(所以没有java代码,也就不会出现相同变量的情况)。而且,由于include指令是编译期的,所以进入运行期后就算改变include进来的文件,被include的内容仍然是编译期include进来的文件的内容;而include动作是运行期的,每次页面被请求时都被引入,所以include进来的文件是可以在运行期改变的,改变后重新请求include进来的就是改变后的文件。

forward:相当于不要现有页面内容的include动作,跳转后地址栏仍然是跳转前的地址。forward后其实仍然在当前页面,只是显示的是forward的页面的内容(即跳转没有重新请求,自然request的内容仍然是当前页面的内容(即共享request))



顺序如下: 1、多种字体大小显示 2、c:out标记输出 3、获取当前时间 4、include包含语句 5、建立错误处理页面的范例程序 6、jsp:forward 7、简单计数器 8、设置页面属性 9、使用GB2312编码 10、使用Big5编码 11、c:catch的用法 12、 begin、end和step的用法 13 、 循环 14、 varStatus 的四种属性 15、 的用法 16、从客户端传送数据至服务端 17、使用Unicode转义字符 18、使用朝鲜语字符集 19、JSP中最简单的国际化程序 20、错误检测 21、抛出异常 22、 的用法 23、和 的用法 24、 的用法 25、jsp-include的用法 26、汉字处理 27、网页重定向 28、自动更新网页 29、存取session 30、 的用法 31、单选型列表框 32、jsp文件中定义类 33、取得 JSP Container 版本 34、javax.servlet.jsp.JspWriter - out 对象 35、page 隐含对象 36、application 对象 37、PageContext 对象 38、Page范围 - pageContext 39、测试要显示的中文 40、IF控制符的操作 41、HttpServletRequest 接口所提供的方法 42、 网上测验 43、HttpSession - session 对象 44、 多选型列表框 45、解决浏览器 cache 的问题 46、使用 EL、JSTL 处理表单数据 47、 EL隐含对象 param、paramValues 48、EL隐含对象 pageContext 49、EL算术运算符 50、EL关系运算符 51、EL的运算符 52、选择钮的使用 53、检查框的使用 54、群组检查框的使用 55、数字、货币、百分数格式化 56、日期格式化 57、JSTL设置语言地区 58、Cookie数据的存取 59、session有效时间的设置与取得 60、session时间与ID 61、Cookie有效时间的设置 62、利用隐藏字段传送数据 63、JSP 使用 JavaBean 的方法 64、JSP 使用 JavaBean 65、范围为 Page 的 JavaBean范例程序 66、范围为 Request的 JavaBean 67、范围为 Session 的 JavaBean 68、范围为 Application 的 JavaBean 69、删除 JavaBean 70、url重组 71、Switch语句 72、环境变量 73、forward重定向 74、文件的建立与删除 75、取得文件属性 76、取得目录中的文件 77、目录的建立与删除 78、自Cookie存取日期/时间数据 79、管理Session变量 80、数据库中的记录数与记录指针位置 81、利用absolute方法设置记录位置 82、使用jsp指令生成Word文档 83、JSP网页模板 84、判断是否空白文件 85、cookie 用户登录次数 86、获取用户的真实IP地址 87、获取用户的浏览器信息 88、在客户端进行数据检查 89、在JSP中获取当前绝对路径 90、读取表单中所有参数 91、分行写入数据 92、显示请求URL 93、判断session是否过期 94、参数式查询数据库 95、取得数据库中各栏名称 96、使用JavaBean、设置和获取Bean的属性 97、设置Bean的一个属性与输入参数关联 98、实现基于数据库的站内搜索 99、DOM读取XML文档 100、SAX读取XML文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值