本文为博主辛苦总结,但愿本身之后返回来看的时候理解更深入,也但愿能够起到帮助初学者的做用.
转载请注明 出自 : luogg的博客园 谢谢配合!
全称 :Java Server Pages ,jsp实际就是一个servlet
jsp运行机制: 用户访问jsp页面,服务器将其转换成servlet,也就是java文件,而后编译成class文件,最后运行,最后响应给用户。html
工程jsp中不少波浪线报错,是由于找不到jar包。java
public final class HelloJSP_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent {
web
在G:\eclipse项目.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\employeePro\org\apache\jsp 中找到当前项目的jsp文件,能够看到jsp被编译成了java和class文件,修改jsp,运行,能够看到被编译以后的java文件已修改。在_jspService方法下修改了。apache
咱们去tomcat的lib目录找到org.apache.jasper.runtime.HttpJspBase,而后对其反编译,public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
发现jsp继承的HttpJspBase也继承了HttpServlet,说明jsp也继承了HttpServlet。windows
右键文件->properties->other utf-8
设置jsp默认编码:windows->preference->搜索jsp->jsp file->encoding修改utf-8
通常不直接复制文件,会乱码,ctrl+A,复制所有代码而后粘贴到同类名的文件中tomcat
<% 普通java代码,局部变量,放在了jspService方法中 %>服务器
<%! 全局变量,放在_jsp_Service方法外边%> 非静态,只是定义在类中的全局变量,在jsp声明中不可使用javaService方法中的9个隐式对象.session
<%= 表达式,输出时候使用%> 好比 : <tr><td><%=rs.getInt(1) %></td><td><%=rs.getString(3) %></td></tr>
app
1.HTML注释
注释在翻译的java文件也存在,在页面也存在
2.Java注释,在翻译成的java文件中也存在,在页面不存在.框架
<% 1.// 2./* */ 3./** **/ %>
3.JSP注释:<%-- --%>只存在于jsp页面
语法 : <%@ 指令元素 属性名=属性值 %>
若是一个指令有多个属性,这多个属性能够写在一个指令中,中间用空格隔开。即上面两条指令等价表示以下
1.page指令: page指令用于定义JSP页面的各类属性,import属性能够出现屡次,其余属性只能出现一次,重点:session,import,contentType,pageEncoding,isELIgnonred
2.include指令,静态引入其余JSP页面,
<%@ include file="/include/head.jsp" %>
3.taglib指令:引入标签库文件语法:<%taglib %>
属性:
setAttribute(String name, Object value, int scope)
getOut() //方法返回out隐式对象
pageContext类中定义了一个forward方法和两个include方法分别简化和替代RequestDispatcher.forward方法和include方法,方法接收的资源若是以"/"开头,"/"表明当前web应用。不过这里的include是动态包含,不建议使用include。
ServletContext application域,整个web应用,servletContext中存的数据在整个应用程序范围内均可以取出 session session域,一次会话,/session中存的数据在会话范围内均可以取出 request request域,一次请求,request中存的数据在请求范围内均可以取出 pageContext page域,当前页面,pageContext中存的数据在页面范围均可以取出
它用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码形成JSP页面难以维护。
1.
<jsp:include page="index.html"></jsp:include>
至关于调用pageContext.include("relativeURL")
2.
<jsp:forward page=""></jsp:forward>
3.
<jsp:include page="index.jsp"> <jsp:param value="" name=""/> </jsp:include>
或者
<jsp:forward page="index.jsp"> <jsp:param value="" name=""/> </jsp:forward>
JSP也能够像Servlet那样映射,由于JSP原本就是Servlet。
<servlet> <servlet-name>SimpleJspServlet</servlet-name> <jsp-file>/jsp/simple.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>SimpleJspServlet</servlet-name> <url-pattern>/xxx/yyy.html</url-pattern> </servlet-mapping>
/jsp/simple.jsp表示在webRoot/jsp目录下的simple.jsp文件
include指令:<%@include file="top.jsp" %>
include标准动做:<jsp:include page="top.jsp"></jsp:include>
include指令:是在编译以前就把包含文件的代码合并在了一块儿,共同生成一个.java文件,因此在编译的时候会出现重复定义了本地变量的状况。而include动做先将主页面独立生成一个.class文件,运行时候和包含的文件合并在一块儿,因此不会出现重复定义变量的错误信息。
在xml中加入:
<error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page>
而后在错误指定的页面page指令中输入isErrorPage="true"