《一:jsp原理》
1:引擎: servlet引擎,支持servlet的执行环境;JSP引擎:支持jsp文件翻译成servlet和编译成.class文件的环境。
2: JSP翻译成servlet,再被编译成.class文件,存放于:Tocat根路径/work/Catalina/localhost/_log/apache/jsp,过程:
hello.jsp->hello_jsp.java->hello_jsp.class
3:继承关系:
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage{}
public final class hello_jsp extends org.apache.jsper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent{}
故jsp本质就是servlet.
1.4:当JSP内容改变时,会重新翻译和编译,生成的三个方法:
_jspInit对应init, _jspService对应service, _jspDestory对应Destory;
1.5:jsp如何映射是有jsp引擎处理的,如:
http://loalhost/hello/hello.jsp中的hello.jsp符合通配符映射,在Tomcat根/config/web.xml中有:
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
故jsp名字不可取为jsp,会造成冲突
1.6: 定义全局的错误页面:
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
《二:jsp语法》
1.静态的网页代码:HTML
2.动态的java代码,jsp的组成部分如下:
1.JSP的标准指令
2.JSP程序代码元素
3.JSP标准动作
4.标签库
3.jsp如何嵌入java代码:
3.1:jsp的java脚本表达式
作用:向jsp输出java代码内容
语法:<%=有返回的表达式%>,末尾向out.print()括号中的内容,末尾当然不加;
<%=new java.util.Date().toLocalString()%>翻译成:out.print(“new java.util.Date().toLocalString()”);
3.2:jsp中的java脚本片段:
作用:在JSP中编写java代码,实现逻辑控制,相当于在service中写代码:
语法:<%java代码;%>,末尾有分号;
<%String name=”will”%> :翻译成servlet,_jspService方法中的代码:String name=”will”
3.3:jsp中jsp成员变量的声明;
作用:在JSP(Servlet)中声明servlet成员变量/方法
语法:<%!声明语句%>
<%!private int age=17;%>翻译成:private int age = 17;
4.jsp注释:
html注释: <!--注释内容-->会被翻译到servlet中;
jsp注释: <!--注释内容-->不会被翻译到servlet中
5.jsp的标准指令:
5.1:特点:不向客户端产生输出;指令在整个JSP范围内有效;为翻译阶段提供了全局信息。
5.2:语法:<%@标准指令 属性=属性值 %>
5.3: 三大指令:
1.page指令:
<%@page language=”java”(毫无争议) import=”java.util.Date”(各种包用,分隔) contentType=”text/html;charset=”utf-8”(以此为准)
session=”true”(默认为true) errorPage=”相对路径“(由本页面跳转到指定的页面,不管全局错误页面了)%>
2.include指令(静态包含):<%@include file=”top.jsp” %>在一个jsp中包含另一个jsp中的内容。
特点:只翻译成一个servlet类,相当于把top.jsp源代码整体拷贝,故此时top.jsp中只需要保留page指令和内容即可。
3.taglib,引入标签库
6.jsp的九大内置对象(翻译在service中):
名称 对象类型 备注
request HttpServletRequest
response HttpServletResponse
pageContext PageContext
session HttpSession 若要使用该对象,必须保证page指令中session属性不能为false,默认为true
application ServletContext
config ServletConfig
out JspWriter
page Object(this)
exception Throwable 必须配置page指令isErrorPage=”true”
7.jsp中的四大作用域对象:
pageContext---PageContext 只在当前页面有效
request---HttpServletRequest 在同一次请求中有效
session---HttpSession 在同一次会话中
application---ServletContext 在服务器开启时的任何时期
共同持有的方法:
void setAttrubute(String name, Object val)
Object getAttribute(String name)
void removeAttribute(String name)
8.JSP中常见的动作元素(WEB-INF中的资源通过请求转发获取):
1.请求转发(也遵循相对路径+不跨域原则)
<jsp:forward page=”/action/target.jsp”>
<jsp:param value=”17” name=”age” />
</jsp:forward>
2.请求包含(动态包含,在main.jsp中包含top.jsp):
<jsp:include page=”top.jsp” />
特点:会分别翻译出两份class字节码文件。
9.常见笔试题:
1.jsp中的九大内置对象?
2.JSP中的四大作用域?
3.静态包含和动态包含的区别:
3.1:在翻译阶段就在一个java文件中;
3.2:后者包含文件和被包含文件都会翻译成java文件,编译成class文件,运行时才会动态地包含在一起。