jsp(java server page)

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标签之后的代码不起任何作用。

原文地址:https://www.cnblogs.com/yangfanasp/p/7050769.html