JSP

来源:互联网 发布:linux流量监控工具 编辑:程序博客网 时间:2024/06/05 22:31

JSP

JSP:Java server pages(Java服务器页面)

JSP是在HTML代码中嵌入Java代码。在JSP页面中HTML比较容易写,而写Java代码就比较难

当JSP第一次发起请求时,JSP引擎会将其转译成servlet(.java文件),接着由servlet引擎会将servlet编译成(.class文件)并执行。

Jsp 单例多线程

当jsp页面被第一次请求时,这个jsp的一个实例会被创建并加载到内存中,接着系统会启动一个线程来执行jsp中的java代码,对于后续到来的每个请求,都会启动一个线程来访问这个jsp实例。

实例变量(<%! %>声明中定义的)被访问这个jsp的所有线程共享

局部变量(<% %>脚本中定义的)每个线程拥有一份自己的拷贝

五种元素

name purpose <% %> jsp脚本 <%= %> jsp表达式 <%@ %> jsp指令 <%– –%> jsp注释 <%! %> jsp声明

<%– –%> jsp注释不会再servlet出现

// java、servlet注释会到servlet,但不会出现在HTML

\ html注释会被编译和执行,发送到浏览器,但浏览器不会显示它们

九个内置对象

类型 对象 作用域 request ServletRequest 请求对象 response ServletResponse 响应对象 pageContext PageContext 页面上下文对象 session HttpSession 会话对象 application ServletContext 应用程序对象 out JspWriter 输出对象 config ServletConfig 配置对象 page Object 页面对象 exception Throwable 例外

“exception” 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage=”true “%>”的JSP文件中使用

作用域范围:

  • page: 在当前jsp页面里。从变量放入到jsp页面结束,都可以使用
  • request: 当前请求周期。就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward(请求转发)的方式跳转了多个jsp页面,在这些页面里都能使用
  • session: 当前会话。就是指从客户打开浏览器开始,到客户关闭浏览器这中间的过程。只要用户不关闭浏览器,会话中的变量就可以在当前会话的所有请求中使用
  • application: 整个应用。应用的启动到结束。并没有说是服务器的启动到关闭,因为一个服务器可能部署了多个应用,当然关闭服务器,会把上面的所有应用都关闭。application作用域的变量存活时间最长,如果不手动删除,就可以一直使用。

不同的是:application里的变量可以被所有用户共用,page,request,session都是完全隔离的。

如果甲用户修改了application中的变量,乙用户再去访问得到的是修改后的值。而page,request,session中的值无论作何修改,都不会影响其他人的数据。

request对象中的方法:

  • getParameter(String param) 根据参数名来获取参数的值
  • getParameterValues(String param) 获得参数的多个值(复选框)
  • getParameterNames() 返回一个枚举Enumeration类的对象。其中只包含请求request中包含的参数
  • setCharacterEncoding(“UTF-8”) 设置中文字符,radio中“男”,直接取值不会乱码,但要用post方法

请求转发

RequestDispatcher rd = request.getRequestDispatcher(“xxx.jsp”);

rd.forward(request,response);

重定向

response.sendRedirect(xxx.jsp);

在web应用程序中获取文件的真实路径。“/”表示当前应用程序的根目录

String path = this.getServletContext().getRealPath(“/”);

JSP生命周期

  • 解析:servlet容器解析jsp文件代码
  • 翻译:servlet容器把jsp文件翻译成servlet源文件
  • 编译:servlet容器编译源文件,生成servlet类
  • 初始化:加载与jsp对应的servlet类,创建实例,并调用他的初始化方法
  • 运行:调用与jsp对应的servlet实例的服务方法
  • 销毁:调用与jsp对应的servlet实例的销毁方法,然后销毁servlet实例

JSP单例多线程,从第二次访问开始,系统只会启动另一个线程来调用实例的服务方法

JSP与HTML的区别

  • HTML是静态页面,能直接使用浏览器打开。JSP是动态页面,需发布在web服务器如Tomcat上才能打开
  • HTML中不能写java脚本,只能写js脚本。JSP中使用JSP脚本<% %>写java代码
原创粉丝点击