JSP和JavaBean

JSP

  JSP全名为Java Server Pages,即java服务器页面,其根本是一个简化的Servlet设计。它是在传统的网页HTML文件中插入Java代码,从而形成JSP文件。

  JSP注释分为显式(客户端可以看见)和隐式注释(不可见)。

    显式:  <!-- -->

    隐式:  //   、  /**/   、  <%--  --%>

JSP编译指令

page

  定义一个jsp页面的相关属性。<%@page 属性=“内容”%>常用importpageEncodingerrorPage/isErrorPage

  以下是会产生异常的页面的配置:

<%@pagelanguage="java" import="java.util.*" errorPage="error.jsp" isErrorPage="false" %>

  exception的实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErrorPage为true时,该对象才可以使用。

  errorPage的实质就是JSP的异常处理机制,发生异常时才会跳转到errorPage指定的页面,没必要给errorPage再设置一个errorPage。所以当errorPage属性存在时,isErrorPage属性值为false。

含有isErrorPage属性表示当前页面是处理异常的页面,不是会产生异常的页面。

include

  静态包含:<%@ include file=”” %>

  静态包含中实际上是将所包含的文件内容导入目标页面,然后再一起进行编译,最后再将一份整体的内容展现给用户,属于先包含,后编译。

  动态包含:<jsp:include page=””>

  动态包含语句可以自动区分被包含的页面是静态还是动态。如果是静态页面,则与静态包含一样,将内容包含进来处理,如果是动态页面,可以先进行动态地处理,然后再将处理后的结果包含进来。

taglib

  用于定义和访问自定义标签

 

JSP内置对象

pageContext

JSP页面容器

request

得到用户的请求信息

response

服务器向客户端的回应信息

session

保存每一个用户的信息

application

所有用户的共享信息

config

服务器配置,可以获得初始化参数

out

页面输出

page

从页面中表示出来的一个Servlet实例

exception

JSP页面所发生的异常,在错误页面中起作用

 

 

4种属性范围

      page:只在一个页面中保存属性,跳转之后无效。

      request:在一次请求中保存属性,服务器跳转后仍然有效。

      session:在一次回话范围中保存,无论何种跳转都可以使用,但是新开浏览器失效。

      application:在整个服务器上保存,所有用户都可以使用。

  操作属性的方法如下:

public void setAttribute(String name ,Object value)    
public Object getAttribute(String name)
public void removeAttribute(String name)

request对象 

  接收客户端发送而来的请求信息。

  request是javax.servlet.http.HttpServletRequest接口的实例化对象,HttpServlet是ServletRequest的子接口。

  常用方法:

public String getParameter(String name)
public String[] getParameterValues(String name)
public Httpsession getSession()
//获得上下文资源路径
public String getContextPath()
//解决乱码
request.setCharacterEncoding(“utf-8”) 

response对象

  对客户端的请求进行回应,将Web服务器处理后的结果发回给客户端。

  response是javax.servlet.http.HttpServletResponse接口的实例化对象,HttpServlet是ServletResponse的子接口。

  常用方法

//重定向
public void sendRedirect(String location) throws IOException

Session对象

  session最主要的用处是完成用户的登录,注销等常见功能,每一个Session对象都表示不同的访问用户,session对象是javax.servlet.http.HttpSession接口的实例化对象,所以session只能应用在HTTP协议中。

  常用方法:

public String getId()
//让session失效
public void invalidate()

application对象

  application对象是javax.servlet.ServletContext接口的实例化对象。

  常用方法:

//得到虚拟目录对应的绝对路径
String getRealPath(String Path)

config对象

  Web目录中必须存在一个WEB-INF文件夹,该文件夹无法被外部所看见,安全性最高。因为WEB-INF中的文件太安全,外面永远无法访问,可以通过一个映射进行操作。

  例如将index.jsp放在WEB-INF目录中,外部将无法访问到,则需要在web.xml文件中进行配置

<servlet>
  <servlet-name>hello</servlet-name>
  <jsp-file>/WEB-INF/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>

  上面配置表示,将/WEB-INF/index.jsp的文件映射成为一个/hello的访问路径,程序会自动根据<servlet-mapping>节点中配置的<servlet-name>找到对应的<servlet>节点,并找到<jsp-file>所指定的真是文件路径以执行程序。

  config对象是javax.servlet.ServletConfig接口的实例化对象,主要功能是取得一些初始化的配置信息。

  常用方法:

public String getInitParameter(String name)

在<servlet>中的配置

<init-param>
    <param-name></param-name>
    <param-value></param-value>
</init-param>

pageContext对象

  pageConext对象是javax.servlet.jsp.PageContext类的实例,主要表示一个页面的上下文。

  之前的request、response、config、application、<jsp:include>和<jsp:forward>等操作实际上都可以在pageContext对象中完成。

 

JSP动作指令

 

jsp:forward

执行页面转向,将请求的处理转发到下一个页面

jsp:param

用于传递参数,必须与其他支持参数标签一起使用

jsp:include

动态引入一个JSP页面

jsp:plugin

下载JavaBean或Applet到客户端执行

jsp:useBean

使用JavaBean

jsp:setProperty

修改JavaBean实例的属性值

jsp:getProperty

获取JavaBean实例的属性值

 include

1、静态包含

   指令<%@include file = “abc.jsp” %>

  (1)两个jsp页面的<%@page contentType=“text/html;charset=”utf-8” %>应该保持一致。不能向被包含的jsp页面传递参数。

  (2)包含的jsp页面与被包含的jsp页面共用一个request内置对象。

  (3)将两个jsp文件合二为一,生成一个以包含页面命名的Servlet和class文件。

  (4)静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的。

  (5)用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面,直接将内容先包含后处理。

2、动态包含

  <jsp:include page=“abc.jsp”/>

    (1)动态包含将两个jsp文件各自生成自己的Servlet和class文件。

    (2)动态包含只有在执行到它的时候才加载,所以才叫动态包含。

    (3)动态include的结构是两者独立,直到输出时才合并。

 

转发和重定向

  转发(forward)

  静态

request.getRequestDispatcher(“main.jsp”).forward(request,response);

  动态

<jsp:forward page=“main.jsp”>

转发方法的调用者与被调用者之间共享相同的request 对象和response 对象,它们属于同一个访问请求和响应过程。转发到的页面能获取数据。

RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;

调用RequestDispatcher.forward方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

 

  重定向(redirect)

HttpServletResponse.sendRedirect(“main.jsp”);

  重定向方法调用者与被调用者使用各自的request 对象和response 对象,它们属于两个独立的访问请求和响应过程。重定向后的页面不能获取原请求存放的数据。

  HttpServletResponse.sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

  调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL。

 

区别

  jsp:forward动作执行的是强制性跳转,写在其后面的语句不会执行。而sendRedirect()方法跳转至页面后,还会执行后面的代码;

  jsp:forward动作是将page的值指定的页面直接送给IE。sendRedirect()方法是告诉IE要跳转页面,IE再自动调用其参数指定值的页面,其间经过三趟通讯;

 

 

转发

重定向

代码

RequestDispatcher.forward

<jsp:forward page=“main.jsp”>

HttpServletResponse.sendRedirect

url

url地址不会改变

初始的URL地址变成重定向的目标URL。

数据

转发到的页面能获取数据。

重定向后的页面不能获取原请求存放的数据。

请求

不会发送新的请求

发送了新的请求

后边语句

不会执行

会执行后面的代码

 

 

JSPServlet区别

联系:

  JSP是Servlet发展后期的产物,Servlet利用输出流动态生成整个HTML,开发效率低下。JSP是在HTML中插入java代码形成。

  主要用JSP来动态生成HTML文件,然后返回客户端显示。Servlet需要将整个页面作为结果返回时,通过调用jsp文件来实现。

 

区别:

(1)JSP是动态网页开发技术,是运行在服务器端的脚本语言,而Servlet是web服务器端程序技术。访问一个JSP页面时,服务器会将这个JSP编译后就变成了“类Servlet”(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP代码);

(2)JSP擅长表现于页面显示,Servlet更擅长于逻辑控制;

(3)Servlet中没有内置对象,JSP中的内置对象都是通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到;

(4)JSP修改后可以立即看到结果,不需要编译;Servlet需要编译;

(5)在标准的MVC架构中,Servlet作为Controller接受用户请求并转发给相应的Action处理,JSP作为View主要用来产生动态页面。

 

JavaBean

    JavaBean是使用Java语言开发的一个可重用的组件,在JSP开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。

    JavaBean满足的条件是:

      ①所有的类必须放在一个包中,web中没有包的类是不存在的。

      ②所有的类必须声明为public class,这样才能外部类访问。

      ③类中所有的属性都必须封装,使用private声明。提供相应的setter,getter方法

      ④至少存在一个无参构造方法。

web开发的标准目录结构

目录或文件名

作用

WEB ROOT

Web的根目录,一般虚拟目录直接指向此文件夹

WEB-INF

Web目录中最安全的文件夹,保存各种类、第三方jar包、配置文件

web.xml

Web的部署描述符

classes

保存所有的JavaBean,如果不存在,可以手工创建

lib

保存所有的第三方jar文件

tags

保存所有的标签文件

jsp

存放*.jsp文件,一般根据功能创建子文件夹

css

样式表文件的保存路径

images

存放所有的图片

 

<jsp:useBean>指令

    与import语句一样,导入所需要的JavaBean

    <jsp:useBean id=”实例化对象名” scope=”保存范围” class=”包.类名称”>

 

<jsp:setProperty>

    设置属性

    <jsp:setProperty name=”实例化对象名” property=”属性名称” value=”内容”>

 

原文地址:https://www.cnblogs.com/ghq120/p/8150954.html