JSP(全称Java Server Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
浏览器访问index.jsp,则底层执行的是 index_jsp.calss
index_jsp.calss继承HttpJspBase、HttpJspBase继承HttpServlet
Servlet的作用:逻辑处理,业务处理,连接数据库,收集数据。
JSP的作用:展示数据。
JSP是一个java程序。Servlet是JavaEE规范之一。
JSP访问
第一次访问:jsp文件翻译生成java源文件,java源文件编译成Servlet对象,调用servlet对象的init、service方法。
第n次访问:调用单例servlet对象的service方法。
在jsp中直接编写文件会自动翻译到servlet类的service方法的out.write(“***”),out.print(“***”)中。
JSP基础语法
<% %>
<% java语句 %>被翻译到Servlet类的service方法内部
<% java语句 %>
<% java语句 %>符号被视为java程序,被翻译到Servlet类的service方法内部。
<% %> 这个符号相当于在方法体中写代码。
<% int num=1;%>
<% System.out.println(num); %>
<%= %>
如果输出的内容中含有java代码(输出的内容中有变量值时使用),则可以使用
<%="输出内容"%>
<%="输出内容" %>被翻译到Servlet类的service方法内部。
JSP将其翻译成out.print();
<%! %>
向servlet方法外面写语法
<%! …%> 被翻译到Servlet类的service方法外部,class类中,可以写属性和方法。
<%!
private int i=0;
public static void mm(int m){
System.out.println(m);
}
%>
<%!
private int j=66;
%>
<%
System.out.println(j+i);
%>
不建议使用<%! %>符号来写静态变量和实例变量,存在线程安全问题。
JSP就是servlet,而servlet是单例的。如果在多线程并发的环境下,静态变量和实例变量一旦有修改操作,必然存在线程安全问题。
JSP在浏览器上输出语句
<%
out.write("hello world");
out.print("");
%>
<%="输出内容"%>
<%@...%>
<%@...%>页面指令,用来定义ASP.NET页分析器和编译器使用的特定于该页得一些定义。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.SQLOutput" %>
(1)Language: 指定页中的所有内联呈现(<%%>和<%=%>)和代码声名块进行编译时使用的语言。可以是任何.NET Framework支持的语言。请切记:每页只能使用和指定一种语言,但一个工程可以使用多种语言。
(2)AutoEventWireup : 设置页面的事件是否自动绑定。ASP.NET 2.0默认值为true,ASP.NET 1.0和ASP.NET 1.1默认为false。ASP.NET页触发的事件,如Init, Load,PreRender等,在默认情况下,可以使用“Page_事件名称”的命名约定将页事件绑定到相应的方法,页面编译时,ASP.NET将查找基础此命名约定的方法,并自动执行该方法的代码。
(3)CodeFile:指定指向页引用的代码隐藏文件的路径。此属性与Inherits属性一起使用可以将代码隐藏源文件与网页相关联。此属性仅对编译的页有效。
(4)Inherits:与CodeFile属性(包含指向代码隐藏类的源文件的路径)一起使用来定义供页继承的任何从Page类派生的代码隐藏类。
(5)session:session="false",页面不保存session。
(6)contentType:contentType="text/html; charset=UTF-8" :指定编码方式。
(7)StyleSheetTheme:此属性在.NET Framework 2.0 版中是新增的。 获取或设置应用于此页的样式表的名称;
(8)EnableTheming:获取或设置一个值,该值指示是否对此控件应用主题。EnableTheming属性指示是否为指定的控件启用主题。当 EnableTheming 属性为 true 时,将在应用程序的主题目录中搜索要应用的控件外观。
(9)ValidateRequest:要阻止依赖于恶意输入字符串的黑客攻击,约束和验证用户输入是必不可少的。跨站点脚本攻击就是此类攻击的一个示例。其他类型的恶意数据或不需要的数据可以通过各种形式的输入在请求中传入。
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览116039 人正在系统学习中