1. 手工建立"web"应用:
- 在任意目录下建立文件夹,以WebDemo为例;
- 在该文件夹内建立WEB-INF文件夹(区分大小写),web容器会包含WEB-INF下的文件,但客户端浏览器无法访问该目录下的文件;
- 进入Tomcat,找到任意web应用,将该应用WEB-INF下的web.xml文件复制到2中的文件夹内
- 修改复制后的web.xml文件,修改成只有一个根元素的文件,如图所示
- 在WEB-INF目录下新建两个文件夹:class和lib,两者都用于保存web应用所需的java类文件 ,区别是class保存单个*.class文件,lib保存打包的jar文件
- 将该应用复制到tomcat的webapps下,自动部署即可
- 通常只需将jsp文件放到根目录下,就可通过浏览器访问,文件结构如下所示
2.描述配置符web.xml(servlet3.0该文件非必需,但建议保留)
- 负责配置的内容:配置JSP,标签库和JSP属性,配置管理servlet,filter和listener,JAAS授权认证和资源引用以及web首页
- 根元素为<web-app.../>,包含metadata-complete属性,当该属性为true时,不会加载annotation配置的web组件(Filter/Servlet/Listener等)
- 配置首页使用welcome-file-list元素配置首页,可包含多个welcome-file元素,每个元素配置一个首页
- jsp由静态部分(html)和动态部分组成(java),每个jsp页面就是一个servlet实例
- <%java脚本%>
- 启动tomcat后,可在work\catalina\localhost\jspPrinciple\org\appach\jsp目录下找到(假设jsp名为test),test_jsp.java和test_jsp.class,这两个文件都有tomcat生成,tomcat根据jsp页面生成对应的servlet的java和class文件,jsp的所有内容都是对应的*_jsp.java页面输出流生成
- servlet类主要包含以下三个方法(去掉_jsp前缀,将首字母小写):init《初始化jsp/servlet方法》,destroy《销毁jsp/servlet之前的方法》,service《对用户请求生成响应》
- jsp注释:<%--注释内容--%>
- html注释:<!--注释内容-->
- html注释可以再客户端的源代码中看到,jsp的则不能
- jsp声明会转换对应servlet的成员变量或成员方法
- 声明:<%!声明部分%>,声明部分可用private,public,static(类成员和类方法)控制符修饰,但不能用abstract(servlet对应的成为抽象类,无法实例化)
- jsp会编译成servlet类,每个servlet在容器中只有一个实例,jsp中声明的变量为成员变量,成员变量只在创建实例时初始化,该变量一直保存,知道实例销毁
- <%=表达式%>
- 注:输出表达式后不能有”;“
- jsp脚本将转换成servlet类里的_jspService方法里的可执行代码,这意味着jsp脚本也可以声明变量,但是为局部变量,不可以被private,static等修饰,不可以定义方法。实际上jsp里的所有静态内容都由_jspService里的输出语句输出
- 语法:<%@编译指令名 属性名="属性值"…>
- page指令
- 通常位于文件顶端,一个jsp文件可包含多个page,
- 各属性意义
- languagae——当前jsp页面所使用的脚本语言种类
- extends——java类继承的父类或实现的接口
- import——导入包(默认导入包:java.lang.*;java.servlet.*;java.servlet.jsp.*;java.servlet.http.*)
- sesssion——是否需要http session
- buffer——指定缓冲区的大小。输出缓冲区的jsp内部对象:out用于缓存jsp页面对浏览器的输出,默认值为8kb,可以设为none,也可设为其他值(kb)
- autoFlush——当缓冲区溢出时是否强制输出缓冲区的内容,true正常输出,false溢出时产生异常
- info——设置jsp信息。可以通过Servlet.getServletInfo()方法获取。在jsp页面中可直接通过getServletInfo()方法获取,因为jsp本身就是一个servlet。
- errorPage——制定错误处理页面,若Jsp页面产生异常或错误,而该jsp页面为进行处理的代码,则调用该属性的jsp页面<因为jsp内建了异常机制支持,所以可以不处理异常,即使是checked异常>,如果没有指定,则将异常信息呈现给客户端浏览器
- isErrorPage——设置此jsp页面是否是异常处理程序
- contentType设定生成网页的格式或编码字符集,即MIME格式和页面字符集类型,默认MIME为text/html,默认字符集为ISO-8859-1
- pageEncoding——网页的编码字符集
- include指令
- include静态语句,会将目标页面的其他编译指令也包含进来,即可包含静态文本,也可包含动态jsp页面,会把被包含页面加入此页面,融合成一个页面,所以被加文件可以不是一个完整页面,编译时即被包含语法:<%@include file="页面"%>
- taglib指令
-
编译指令通知servlet引擎处理消息,在jsp编译成servlet时起作用,而动作指令在运行时起作用
-
<1 jsp:forward页面跳转
a.可跳转到HTML,jsp或容器的servlet
b.语法:
JSP1.0: <jsp:forward page="{relativeURL|<%=expression>}"/>
JSP1.1: <jsp:forward page="{relativeURL|<%=expression>}"
<jsp:param.../>
</jsp:forward>
c.使用request内置对象获取传递的参数值
d.执行forward指令时。,地址栏地址不发生变化,单页面跳转,此外,客户端的请求参数不会丢失
e.<jsp:forward.../>指令并没有重新向新页面发送请求,而是用新页面响应用户请求,所以传递的参数和属性并不会丢失
-
<2 jsp:param传递参数,必须与其他支持参数的标签一起使用
语法:<jsp:param name="" value=""/>
-
<3 jsp:include动态引入一个jsp页面
a.动态include指令,用于包含某个页面,仅仅将被导入页面的body内容插入本页面,而不会编译
b.语法:
<jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
或<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="" value=""/>
<jsp:include/>
c.flush属性用于指定输出缓存是否转移到被导入页面,true 导入
d.静态导入和动态导入的区别:a.静态两个页面完全融合成一个servlet;b.静态导入页面的编译命令会起作用,动态则不;c.动态导入可以加入额外参数
- <4 jsp:plugin下载javabean的applet到客户端运行
-
<5 jsp:useBean创建一个javaBean实例
a.语法:<jsp:useBean id="name" class="classname" scope="page|request|session|application"/>id为javabean的实例名,class确定实现类,scope指定作用范围。page——尽在该页面;request——仅本此请求;session——本次session内;application——本次应用内
b.在使用usebean标签时,会将javaBean实例放入scope中。格式如下:
-
<6 jsp:setProperty设置javaBean实例的属性值
语法:<jsp:setProperty name="beanname" property="pname" value=""/>
-
<7 jsp:getProperty获取javaBean实例的属性值
a.语法:<jsp:getProperty name="beanname" property="pname"/>
b.javabean中可以没有pname ,但须有setPname和getPname方法