JSP全称是JavaServerPages,它和servle技能相同,都是SUN公司界说的一种用于开发动态web资源的技能。JSP实际上就是Servlet。
jsp=html+java
html:静态内容
servlet:服务器端的小应用程序。合适编写java逻辑代码,假如编写网页内容则工作量适当巨大
jsp:合适编写输出动态内容,但不合适编写java逻辑。
jsp的原理
(1)当客户第一次恳求JSP页面时,JSP引擎会经过预处理把JSP文件中的静态数据(HTML文本)和动态数据(Java脚本)全部转化为Java代码。这个转化工作实际上是非常直观的,关于HTML文本只是简略的用out.println()办法包裹起来,关于Java脚本只是保留或做简略的处理。
(2)JSP引擎把生成的.java文件编译成Servlet类文件(.class)。关于Tomcat服务器而言,生成的类文件默许的情况下存放在work目录。
(3)编译后的class目标被加载到容器中,并依据用户的恳求生成HTML格局的呼应页面。
在履行JSP网页时,通常可分为两个时期:转译时期(TranslationTime)和恳求时期(RequestTime)。在转译时期,JSP网页被转译成Servlet类,然后被编译成类文件;在恳求时期,Servlet类履行后,呼应结果至客户端。
一个jsp的小案例
案例阐明:本案例经过运用jsp的技能和servlet技能完成一个简略的网页登陆模型。主要是由三个页面构成,一个login页面,一个dologin页面,一个success页面。首要咱们均选用jsp的形式完成。
login页面完成的代码如下:
<%@pagelanguage=”java”contentType=”text/html;charset=UTF-8″
pageEncoding=”UTF-8″%>
Inserttitlehere
用户名:
密码:
login.jsp页面当中我只做了一个简略的登陆表单,然后转发到dologin.jsp进行处理。
下面是dologin.jsp页面代码
<%@pagelanguage=”java”contentType=”text/html;charset=UTF-8″
pageEncoding=”UTF-8″%>
<%
//获取表单数据额
StringuserName=request.getParameter(“userName”);
Stringpwd=request.getParameter(“pwd”);
//处理事务逻辑
if(“tom”.equals(userName)&&”123″.equals(pwd)){
request.getRequestDispatcher(“/success.jsp”).forward(request,response);
}else{
response.sendRedirect(“/day01_00_jsplogin/dologin.jsp”);
}
//分发转向
%>
dologin做完判断之后进行分发转向到success页面,下面是sucess.jsp页面的代码
<%@pagelanguage=”java”contentType=”text/html;charset=UTF-8″
pageEncoding=”UTF-8″%>
Inserttitlehere
欢迎你:<%
StringuserName=request.getParameter(“name”);
out.print(userName);
%>
跳到主页
由此咱们完成了一个简略的login登陆页面,部署到tomcat之后测验页面如下:
最终咱们能够改造一下运用servlet进行操控,将dologin操作写成servlet代码如下:
packagecom.itheima.servlet;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.SingleThreadModel;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassDoLoginServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//获取表单数据
StringuserName=request.getParameter(“userName”);
Stringpwd=request.getParameter(“pwd”);
//处理事务逻辑
if(“tom”.equals(userName)&&”123″.equals(pwd)){
request.getSession().setAttribute(“name”,userName);
request.getRequestDispatcher(“/success.jsp”).forward(request,response);
//response.sendRedirect(request.getContextPath()+”/success.jsp”);
}else{
//response.sendRedirect(request.getContextPath()+”/login.jsp”);
request.setAttribute(“msg”,”用户名或密码不正确!”);
request.getRequestDispatcher(“/login.jsp”).forward(request,response);
}
//分发转向
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}
jsp简介及工作原理
JSP是Servlet的扩展,JSP没呈现之前,就现已呈现了Servlet技术.Servlet是运用了”输出流”,动态的生成了HTML页面。包含每一个HTML标签和所有的HTML页面中呈现的内容,简略点说便是运用Servlet的输出流将HTML标签生成一个HTML页面。由于时刻长了Servlet中包含了很多的HTML标签、很多的静态文本及格局等,导致了Servlet的开发效率非常低下.
这时候JSP诞生了,JSP弥补了这种情况,JSP经过在规范的THML页面中嵌入JAVA代码,使其静态的部分无需JAVA程序操控,只有那些需求从数据库读取或需求动态生成的页面内容,才运用JAVA脚本操控。
JSP主要是由两部分组成:
(1)静态部分:规范的HTML标签、静态的页面内容,这些内容与静态HTML页面相同.
(2)动态部分:Java程序操控的内容,这些内容由Java程序来动态生成。
下面是一个最简略的一段jsp代码:
<%@pagecontentType=”text/html;charset=GBK”language=”java”errorPage=””%>
欢迎
欢迎学习JavaJSP!现在时刻是:<%out.println(newjava.util.Date());%>
页面中粗体字代码放在<%和%>之间,标明这些是Java脚本,而不是静态内容,经过这种方法就可以把Java代码嵌入HTML页面中,这就变成了动态的JSP页面。从表面上来剖析,JSP页面现已不再需求Java类,似乎感觉完全脱离了Java面向对象的特征了,可是,实际上JSP是Servlet的一种特别的方法,每一个JSP的页面便是一个Servlet的实例。
工作原理
(1)当用户拜访一个JSP页面时,回想一个Servlet容器(Tomcat)发出恳求;
(2)假如是第一次恳求页面,或页面有所改动,则servlet容器首要要把JSP页面(假设为test.jsp)转化为Servlet代码(test.java),再将其转化为(test.class文件);由于这个过程(编译)会消耗一定时刻,所以第一次拜访或jsp文件有改动时,拜访时刻有些长;
(3)JSP容器担任调用从JSP转换来的servlet,这些servlet担任供给服务相应用户恳求(比方客户端发送表单,要求servlet:formprocessor.java来处理,则容器会树立一个线程,调用formprocessor.java来处理该恳求);假如用户有多个恳求,则容器会树立多个线程处理多个恳求;
(4)容器履行字节码文件(包含调用的servlet:formprocessor.java字节吗),并将其结果回来到客户端;(回来的最终方法是有servlet输出html格局的文件流)
注释:
JSP页面有必要要在JSP服务器内运转,如tomcatweblogic,jboss等等.(顺便说一下,apache和tomcat是两码事儿,有不少人以为
apache便是tomcat,其实是错误的理解!~,tomcat仅仅apache中的一个子项目,apache是作为WEB应用服务器,而tomcat可以说是JSP或Servlet的一个web容器);
JSP页面的拜访者无须装置任何客户端,乃至不需求可以运转Java的运转环境,由于JSP页面输送到客户端的是规范HTML页面。