1.为什么使用JSP
JSP是简Servlet编写的一种技术,它将Java代码和HTML语句混合在同一文件中编写。只对页面中要动态产生的内容采用Java编写,而对静态固定不变的内容采用HTML编写。
2.JSP的helloword
1)新建JSP文件,在<body>节点中<% %>内编写Java代码即可。
2)在JSP页面中编写的Java代码需要嵌套在<%和%>中,嵌套在<%和%>之间的Java代码被称之为脚本片段(Scriptlets),没有嵌套在<%和%>之间的内容被称之为JSP的模版元素
3)JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。
4)在JSP页面中也可以使用一种称之为JSP表达式的元素,只需将要输出的变量或表达式直接封装在<%= 和 %>之中,就可以向客户端输出这个变量或表达式的运算结果。在JSP表达式中嵌套的变量或表达式后面不能有分号。
5)JSP本质上就是Servlet。每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
3.JSP页面的隐含变量
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException, ServletException
{
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
...
...
//使用<% %>编写代码在此位置,可以用到request,response,pageContext,session,
//application,config,out,page八个隐含对象(实际上,还可以使用exception对象)
}
1)request:HttpServletRequest对象
2)response:HttpServletResponse对象(在JSP页面中几乎不会调用response的任何方法)
3)pageContext:页面的上下文,是PageContext的一个对象,可以从该对象中获取其他的八个隐含对象,亦可以从中获取到当前页面的其他信息(学习自定义标签时使用它)
4)session:代表浏览器和服务器的一次会话,是HttpSession的一个对象(后面详细学习)
5)application:代表当前WEB应用,是ServletContext的一个对象,
6)config:是当前JSP对应的Servlet的ServletConfig对象(开发时,几乎不使用)
7)out:JspWriter对象,调用out.println()可以直接把字符串打印到浏览器上。换行:out.println("<br>")
8)page:指向当前JSP对应Servlet对象的引用,但为Object类型,只能调用Object类方法(几乎不使用)
9)exception:在声明了page指令的isErroPage=true时才可使用
pageContext request session application(属性域返回从小到大)
4.和属性相关的方法
1)方法:
Object getAttribute(String name):获取指定的属性
Enumeration getAttributeNames():获取所有属性的名称
setAttribute(String name,Object o):设置指定的属性
removeAttribute(String name):移除指定的属性
2)相关对象:
pageContext request session application都有上述方法。
pageContext:仅限于当前JSP页面
request:仅限于同一个请求
session:一次会话(浏览器从打开到关闭,此期间会话不失效)
application:当前WEB应用,全局的作用范围
5.请求重定向与转发
1)区别
2)具体实现方法
(1)请求转发:
request.getRequestDispatcher("/finalPage.jsp").forward(request, response);
(2)请求重定向
response.sendRedirect("finalPage.jsp");
6.JSP指令(page include taglib)
1)page:page指令最好是放在整个JSP页面的起始位置。
import:导入类包
session=[true|false] : 当前JSP页面是否允许使用session
errorPage="relative_url" :如果WEB应用出现错误,将转到该属性指定的页面
isErrorPage="true | false" :页面是否可以使用exception对象
contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]:当前页面的响应编码类型
pageEncoding="characterSet | ISO-8859-1" :当前页面的编码类型
isELIgnored="true | false" :当前页面是否可以使用EL表达式,通常为true2)inclue:include指令用于通知JSP引擎在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称之为静态引入,当前JSP页面与静态引入的页面紧密结合为一个Servlet。
(1)<%@ include file="relativeURL"%>
(2)file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。
7.JSP标签
1)<jsp:inclue>:用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
(1)<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
(2)page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。
(3)flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。
2)<jsp:forward>:用于把请求转发给另外一个资源
(1)<jsp:forward page="relativeURL | <%=expression%>" /> :page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得
(2)RequestDispatcher.forward方法、PageContext.forward方法、<jsp:forward>标签的区别:调用RequestDispatcher.forward方法的JSP脚本代码的前后不能有JSP模版内容。调用PageContext.forward方法的JSP脚本代码的后面不能有JSP模版内容。<Jsp:forward>标签的前后都能有JSP模版内容。
3)<jsp:param>:
(1)<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
(2)标签的name属性用于指定参数名,value属性用于指定参数值
8.中文乱码
1)在JSP页面上输入中文,请求页面后不出现乱码,保证contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%,charset和pageEncoding编码一致,且都支持中文,通常建议取值为UTF-8。还需要保证浏览器的显示的字符编码支持也和请求编码相一致。