Servlet
优点:逻辑处理方便
缺点:页面表现麻烦
Jsp:
优点:页面表现方便
缺点:逻辑处理麻烦
我们一般使用jsp + servlet + javabean
jsp其实是一种servlet,表面上看是访问jsp,其实是访问jspServlet类。第一次访问jsp的时候,拿tomcat举例子,
在tomcat work文件夹下,会编译生成jsp的class文件和jsp的java文件。但是并不是直接访问编译好的文件,
先是要访问org.Apache.jasper.servlet.JspServlet这个类,再由这个类根据访问的jsp名称去找相应的java文件。java文件
如果存在则直接访问,若不存在,则编译出来。
总结
1.在jsp中写java代码,语法:<% java代码 %>,但是写法复杂,不建议使用。
2.jsp是一种动态网页技术,即动态生成网页数据。常见的几种动态网页技术:jsp,asp(active server page),php(hypeertext preprocessor)超文本预处理语言
3.jsp就是servlet,所以jsp也是一种java类,通过jsp引擎将jsp转译成了servlet。
4.jsp~~java + html。
5. 流程
-1.浏览器输入http://localhost:8080/test/helloworld.jsp
-2.tomcat收到*.jsp的请求,到org.apache.jasper.servlet.JspServlet处理(tomcat的web.xml中有配置)
-3.JspServlet调用相应的java类,及jsp引擎根据helloworld.jsp生成的java类(在tomcat的work文件夹下)
-4.执行helloworld.class。将html数据输出给tomcat,tomcat再将这些数据输出给客户端。
jsp语法:
jsp语法分为3种不同的类型
-编译器指令
include,page,tablib
page:
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*,java.lang.*"%>
<%@page errorPage ="error.jsp"%>
include:
<%@include file = "相对位置"%>
静态导入:<%@include file="logo.jsp"%>
是在servlet引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到了一起,全部放到jspServlet中),所有只生成了一个
servlet,所以两个页面不能有同名变量。
运行效率稍微提高一点,耦合性较高,不够灵活。
动态导入:<jsp:include page="logo.jsp"></jsp:include>
是在servlet引擎转译后,请求的此页面,所以生成了两个servlet,所以可以有同名变量。
生成两个Servlet,相当于两个类之间的调用。耦合性低,使用方便、
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
-脚本语法
注释<!--...-->(html注释,servelet中生成,会发给浏览器),<%--...-->(jsp注释,Servlet中不生成,不发给浏览器)
声明<%!--...%> 定义成员变量或方法
表达式<%=...%>
java脚本段<%...%> 等价于out.print()
- 动作语法
<jsp:forward>,<jsp:include>,<jsp:plugin>,<jsp:getProperty>,<jsp:setProperty>,<jsp:useBean>
jsp内置对象
request:代表的是来自客户端的请求,例如我们在表单Form中填写的信息等,是最常用对象。关于它的方法使用较多的是
getParameter,getParameterNames,getParameterValue,通过调用这几个方法来获取请求对象中所包含的参数的值。
response:代表的是对客户端的响应,也就是可以通过response对象来组织发送到客户端的数据。但是由于组织方式比较
底层,所以不建议使用。需要向客户端发送文字时直接使用out对象即可。
session:代表服务器与客户端所建立的会话,当需要在不同的jsp页面中保留客户信息的情况下使用。比如在线购物,跟踪客户轨迹
等。<%@page session="true"%>这是默认的,如果改为false,则不会初始化session。
application:负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等、
out:代表了向客户端发送数据的对象,与response对象不同,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的。
可以通过out对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了print和println外,还包括clear,clearBuffer,flush,
getBuffersize和getRemaining,这是因为out对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
pageContext:封装了当前jsp页面的运行信息,它提供了返回jsp页面的其他隐式对象的方法。getRequest(),getResponse(),
getPage(),getServletContext(),getApplication(),getSession(),getException(),getServletConfig()。foward()
(等价于request.getRequestDispather().forward(request,response)),include()方法。pageContext几乎包含了所有作用域和对象的信息。
config:提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
page:代表了正在运行的由jsp文件产生的类对象,一般不建议使用。
exception:代表了jsp文件运行时所产生的例外对象,此对象不能再一般jsp文件中直接使用。而只能在使用了<%@page isErrorPage="true"%>
的jsp中使用。
动作语法:
include
-1.<jsp:include page="Myjsp.jsp"></jsp:include>
-2.<%String a = "Myjsp.jsp";%>
<jsp:include page="<%= a%>"></jsp:include>
-3..<jsp:include page="Myjsp.jsp">
<jsp:param name="a" value="AAA"/>
</jsp:include>
forward
-1.<jsp:forward page="Myjsp.jsp">
<jsp:param name="a" value ="aaa">
</jsp:forward>
-2.<%String a= "myjsp";%>
<jsp:forward page="<%=a%>"/>
forward标签之后的代码不起任何作用。