JSP(JAVA Server Pages):一种特殊的Servlet,直接在HTML中内嵌JSP代码,由JSP Engine自动转为Servlet代码,再编译成Class文件载入执行。
注意:只有当客户端第一次请求JSP时,才需要将其转换、编译以及初始化。

一、基本语法

1.Declaration声明

<%! 声明语句 %> 成员变量方法
<% 声明语句 %>声明doGet/Post局部变量
★注意区分二者区别。局部变量在每次调用doGet方法时都会重新初始化。

2.Directives编译指令 编译期间的指令

<%@Directive 属性=“属性值”%> 常见Directive有:page include taglib
(1)page

clipboard.png
d.png](/img/bV0XWI)

指明与JSP Container的的沟通方式,其中主要使用
import 导包
errorPage="url" 出错后跳转的页面
isErrorPage 在errorPage指定的页面中,该页面需要设置isErrorPage="true"
contentType 指定资源类型,一般是text/html;charset=gb2312

(2)include
include file="fileURL"直接将jsp或html文件原封不动包含进来,常用于非动态代码,可以在url后面传参数。注意此时代码是被原封不动地导入,所以变量的作用域仍然在这个page中。

3.Action动作,运行期间的命令

(1)jsp:useBean

广义的Bean:拥有私有变量,getter和setter等方法的工具类。
a.原则:
原则一:不要使用裸体类,要把类放在包里,包放在WEB-INF的classes目录下
原则二:Bean必须要有一个空构造函数,不能有公共的实例变量,通过getter和setter获取值

b.用法
创建对象:
<jsp:useBean id="对象名" class="包前缀.类名" scope="page|request|session|application" type="typeName"></jsp:useBean>
例如:<jsp:useBean id="cd" class="bean.CounterBean" ></jsp:useBean>
相当于CounterBean cd = new CounterBean();
注意:cope表明有效范围,page仅涵盖使用Bean的页面 request仅限于使用Bean的请求 session仅限于用户的整个连接阶段(会话阶段均有效) application对整个webapp、网站均有效
type表示可以把New出来的这个对象当什么来用(即引用的类型),常用于实现多态

调用setter设置属性:
<jsp:setProperty name="对象名" property="属性名" value="属性值"> 相当于 对象.setter(value)

调用getter获取属性:
<jsp:getProperty name="对象名" property="属性名"> 相当于 对象.getter()

(2)jsp:include

用于包含jsp程序或html文件,除非被执行到,否则不会被编译,什么时候执行到什么时候跳出去编译执行并返回结果。
常用于动态代码,可以传参数,但是不能通过url直接传参数
用法:

<jsp:include page="URL,flush="true"/>

或者

<jsp:include page="URL,flush="true">
   <jsp:param name="Paramname" value="paramvalue">
</jsp:include>

通过jsp:param传参数

(3)jsp:forward

将一个jsp内容送到page指定的JSP或Servlet中处理,即页面跳转,但url地址不会改变,可以通过url直接传参数。注意forward后的代码将不会执行
用法:

<jsp:forward page="URL,flush="true"/>

或者

<jsp:forward page="URL,flush="true">
    <jsp:param name="Paramname" value="paramvalue">
</jsp:forward>

通过jsp:param 传参数

<jsp:forward>和resonse.sendRedirect的区别
<jsp:forward>使用的是同一个request(服务器内转发),而resonse.sendRedirect使用不同的request即服务器受到客户端请求后,先给客户端回复(resonse),客户端收到后重新访问另一个页面

4.Scrpitlet小程序段

<% java程序代码 %>会被转换到doGet方法中编译

5.Expression表达式

变成字符串输出 <%=....%> =后面的值必须是String或能转为string的表达式,该语句只有一行,不能换行

6.Comment注释

(1)<%--..注释..--%>
(2)<%//.单行注释 %>
(3)<%/*...段注释.*/%>客户端无法通过浏览器的显示源码查看到该种注释。
而html的注释 <!-- -->在源码中是可以看见的。即客户端可见

7.内置对象

clipboard.png

二、jsp和servlet之间的通信

clipboard.png
JSP→Servlet

<jsp:forward page="URL,flush="true">
    <jsp:param name="Paramname" value="paramvalue">
</jsp:forward>

Servlet→JSP
doGet/Post方法中

  this.getServletContext().setAttribute("data","serlvet数据转发");//在ServletContext中设置Attribute
  RequestDispatcher rd = this.getServletContext().getRequestDispatcher("jspURL");//通过RequestDispatcher的forward方法进行转发
  rd.forward(request, response);
  

关于ServletConfig与ServletContext对象,参考https://segmentfault.com/a/11...


Myosotis
89 声望13 粉丝