【Servlet】05-使用JSP
2017-02-20 16:54
190 查看
Servlet作为服务器的小程序,为我们解决了业务问题(作为控制器)。但是,我们想要写出更接近“前端”的代码,需要我们了解JSP相关技术。
在JSP中,我们要了解:
JSP代码组成
模板
脚本元素(指令、动作、声明、scriptlet和表达式)
标准动作和定制动作
使用指令写JSP代码
page
include
tablib
JSP标准动作
include(运行时调用-单独的.class文件)
forward(跳转JSP、Servlet)
JSP内置对象
request
response
out
session
config
application
page
pageContext
exception
JSP的生命周期
页面转换:JSP->Servlet
JSP页面编译
加载类
创建实例
jspinit
使用_jspService
一个JSP示例:
首先,我们要考虑的是,容器对我们的JSP页面做了什么,如何让JSP转换成Servlet的:
小脚本里的代码会放在通用服务方法,变量为局部变量
使用JSP声明的变量,会成为Servlet的类变量
容器,实际上,按照如下的步骤生成Servlet
查看指令,转换相应的方法
创建一个HttpServlet的子类
检查声明,把变量写入类
创建服务方法
把HTML转换成流输出的方式
好了,该看一下JSP的生命周期了:
JSP文件被部署到Web容器里
第一个请求到来,JSP文件被转换成.java
Java文件被编译成.class文件
容器加载Servlet类
实例化Servlet,调用servlet的jspInit()初始化
和Servlet一样,我们的JSP也是可以配置初始化参数的,我们需要在DD文件里这样写:
或者,自己在JSP文件中写声明:
然后,我们的JSP中也是有作用域(PageContext中的枚举值):
APPLICATION_SCOPE
PAGE_SCOPE
REQUEST_SCOPE
SESSION_SCOPE
好了,终于可以聊聊JSP的指令,动作和内置对象了:
指令列表:
page(属性如下)
import
isThreadSafe
contentType
isErrorPage
errorPage
pageEncoding
。。。。。。
taglib
include
其实,这些指令已经允许我们在JSP页面中书写Java代码,但是,为了后期维护,我们不应该写scriptlet。这就需要我们在DD中禁用小脚本
不过,当我们写了太多的脚本,我们开始寻求无脚本页面,于是,JSP标准动作可以来帮忙:
JavaBean相关
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:param
如果某个JavaBean的属性还是一个对象,我们就得写EL咯!
EL中有一些隐式对象,下面是其一览表:
作用域
pageScope
requsetScope
sessionScope
applicationScope
请求参数
param
paramValue
请求首部
header
headerValues
cookie
initParam
pageContext
a0e7
在JSP中,我们要了解:
JSP代码组成
模板
脚本元素(指令、动作、声明、scriptlet和表达式)
标准动作和定制动作
使用指令写JSP代码
page
include
tablib
JSP标准动作
include(运行时调用-单独的.class文件)
forward(跳转JSP、Servlet)
JSP内置对象
request
response
out
session
config
application
page
pageContext
exception
JSP的生命周期
页面转换:JSP->Servlet
JSP页面编译
加载类
创建实例
jspinit
使用_jspService
一个JSP示例:
<%@ page language="java" pageEncoding="utf-8"%> <%@ page import="com.web.po.*"%> <%-- 这是一个JSP注释 --%> <% int number = 0; %> <%= number++1 %>
首先,我们要考虑的是,容器对我们的JSP页面做了什么,如何让JSP转换成Servlet的:
小脚本里的代码会放在通用服务方法,变量为局部变量
使用JSP声明的变量,会成为Servlet的类变量
容器,实际上,按照如下的步骤生成Servlet
查看指令,转换相应的方法
创建一个HttpServlet的子类
检查声明,把变量写入类
创建服务方法
把HTML转换成流输出的方式
好了,该看一下JSP的生命周期了:
JSP文件被部署到Web容器里
第一个请求到来,JSP文件被转换成.java
Java文件被编译成.class文件
容器加载Servlet类
实例化Servlet,调用servlet的jspInit()初始化
和Servlet一样,我们的JSP也是可以配置初始化参数的,我们需要在DD文件里这样写:
<servlet> <jsp-file>somefile</jsp-file> <init-param> <param-name></param-name> <param-value></param-value> </init-param> </servlet>
或者,自己在JSP文件中写声明:
<%! public void jspInit(){ // 在这里写初始化的逻辑代码 } %>
然后,我们的JSP中也是有作用域(PageContext中的枚举值):
APPLICATION_SCOPE
PAGE_SCOPE
REQUEST_SCOPE
SESSION_SCOPE
好了,终于可以聊聊JSP的指令,动作和内置对象了:
指令列表:
page(属性如下)
import
isThreadSafe
contentType
isErrorPage
errorPage
pageEncoding
。。。。。。
taglib
include
其实,这些指令已经允许我们在JSP页面中书写Java代码,但是,为了后期维护,我们不应该写scriptlet。这就需要我们在DD中禁用小脚本
<web-app> <jsp-config> <jsp-property-group> <!-- 下面的配置对所有的JSP文件,都禁用Java小脚本 --> <url-pattern>*.jsp</url-pattern> <scripting-invalid>true</scripting-invalid> <jsp-property-group> </jsp-config> <web-app>
不过,当我们写了太多的脚本,我们开始寻求无脚本页面,于是,JSP标准动作可以来帮忙:
JavaBean相关
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:param
<%-- 带体的useBean --%> <jsp:useBean id="beanId" class="someClass" scope="someScope"> <jsp:setProperty name="propertyName" value="propertyValue"/> </jsp:useBean> <%-- 使用多态的useBean --%> <jsp:useBean id="xx" class="someClass" type="superClassName"> </jsp:useBean> <%-- 使用param设置bean的属性 --%> <jsp:useBean id="xx" class="xx" scope="someScope"> <jsp:setProperty name="propertyName" param="propertyName"/> </jsp:useBean> <%-- 如果bean的属性和表单属性名一致,可以使用如下代码 --%> <jsp:useBean id="xx" class="xx" scope="someScope"> <jsp:setProperty name="beanName" property="*"/> </jsp:useBean>
如果某个JavaBean的属性还是一个对象,我们就得写EL咯!
<%-- dot-operator --%> ${requestScope.name} <%-- []-operator --%> ${requstScope.someList["0"]}
EL中有一些隐式对象,下面是其一览表:
作用域
pageScope
requsetScope
sessionScope
applicationScope
请求参数
param
paramValue
请求首部
header
headerValues
cookie
initParam
pageContext
<%-- 下面是一个表单 --%> <form action="result.jsp" method="post"> 用户名:<input type="text" name="username"> 食物1:<input type="text" name="food"> 食物2:<input type="text" name="food"> </form> <%-- 下面是result.jsp --%> ${param.username} <%-- 使用paramValues获取多值参数 --%> ${paramValues.food[0]} <%-- 获取头部信息 --%> ${header.host}
a0e7
相关文章推荐
- 在jsp中使用servlet
- 关于MyEclipse+Tomcat下的JSP 与 Servlet 的使用
- jsp、Servlet、Struts1.X 中使用application对象
- 使用jxl,Servlet,JSP 动态生成excel文件并提示下载的简单方法
- JSP培训(6)——使用Servlet作为控制器实现MVC模式
- 视频教学:使用Eclipse(3.1 M?)写第一个JSP/Servlet程序
- 掌握 JSP 九大隐式对象--(Servlet 中使用的对象在 JSP 中的应用)
- 假如已使用了servlet,为什么还要用JSP?
- 假如已使用了servlet,为什么还要用JSP?
- Ajax技术概要复习及使用Ajax调用jsp或servlet进行异步验证
- 在 JSP/Servlet 中使用 Bean 自动属性填充机制(含原理分析)
- (JSP)在文本域中显示超链接——如何在Servlet中使用服务器端代码
- JSP培训(6)——使用Servlet作为控制器实现MVC模式
- 教案:《开发基于JSPServletJavaBean的网上交易系统》第7章 View层开发,JavaBean在JSP中的使用
- jsp/servlet:标签使用详解
- 在jsp/servlet中使用apache FileUpload组件文件上传(jsp,servlet,fileupload)
- JSP中使用AJAX示例:分别将结果提交为STRUTS,SERVLET,WEBWORK的不同操作方式
- JSP中使用AJAX示例:分别将结果提交为STRUTS,SERVLET,WEBWORK的不同操作方式
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之35.安装使用MySQL及SQL Manager 推荐
- jsp/servlet使用ajax动态加载dtree, dtree样式/图片修改 (java 生成dtree servlet json)