jsp:java server pages
使用java语言开发的运行在服务器端得页面
html+javaScript---运行在客户端的页面
客户端----》html---->Servlet--->DAO--->DB
servlet的优缺点:
处理业务逻辑
展现页面 out.println("<javaScript><css><html>");
编写时没有语法检测
调试时依赖于web容器
===》Java代码中嵌套了Html+JavaScript
解决:
在Html+JavaScript代码中嵌入java代码===jsp
jsp本质上就是servlet
jsp的运行调用流程:
1 客户端首次访问时,由web容器把jsp翻译为Servlet,同时编译,然后调用其中方法
_jspService。在_jspService方法中内容主要都是out.write("静态信息");
2 第一次访问之后,只要页面内容没有发生改变,则web容器直接调用_jspService方法
3 第一次访问之后,页面中内容发生改变,则web容器则先编译后调用_jspService方法
注意:
开发过程中,只要是页面(html/jsp),改变内容之后,只需刷新页面即可
java代码如何嵌入到html中的语法:<%%>
声明 <%! %>
被翻译为servlet中的成员变量
声明中的代码必须以;结尾
同一个jsp页面中的声明变量,不能重名
注释 <%-- --%> 标准的jsp注释
只存在于jsp的源代码中,给jsp程序员调试使用
<!-- --> 标准的html注释
被翻译为out.write()中的静态信息,原封不动发给客户端浏览器解析
<% // /* */ /****/ %> 纯java注释
被翻译为_jspService方法内部的注释,客户端源码中没有该注释
表达式 <%= %>
将表达式的运算结果在页面中替换当前标签显示
表达式中的内容结尾必须不能写;
代码段 <% %>
被翻译为_jspService方法中的信息
结尾必须写分号
============================
上述jsp语法结构不能嵌套书写
============================
package com;
import java... --指令
public class Test{
//
int i = 100; --声明
public void show(){
int i = 20;
//对i进行计算 --注释
i+= 30; --表达式
System.out.println(i); --代码段
}
}
class A{
}
练习:
在jsp页面中使用jsp语法结构显示99乘法表
jsp--->servlet--->dao--->db
jsp语法---指令:<%@ %>
page指令:<%@page 属性名=属性值...%>
*1)contentType="text/html;charset=gbk"
===>
response.setContentType("text/html;charset=gbk");
2)pageEncoding="gbk"
==>setCharacterEncoding("gbk");
3) language = "java"
默认可以不写,为了兼容以后出现的其他语言所预留的接口
4) session = "true/false"
设置访问当前jsp页面,该页面是否创建session
默认值为true
5) buffer
设置当前页面输出信息时缓冲区的大小,默认为8k
如果设置为none,则表示不适用缓冲区,直接输出每条信息给客户端页面
6) autoFlush
设置缓冲区满了之后是否自动刷新信息到客户端页面上
默认值为true,即自动刷新
7) isThreadSafe = "true/false"
设置当前页面是否经过线程安全控制
默认为true,即线程安全
如果设置为false,则客户端多线程必须顺序访问该页面
*8) import
给当前页面引入lang包以外的其他类路径
*9) errorPage
指定当前jsp页面如果出现异常,则跳转的页面路径
===》
try{
}catch(Exception e){
....
//resp.sendRedirect("error.jsp");
req.setAttribute("exception",e);
req.getRequestDispatcher("error.jsp").forward(req,resp);
}
*10 isErrorPage
指定当前error.jsp页面,是一个特殊用于处理异常的专属页面
在本页面中可以获取异常跳转之前页面中的异常对象信息
==>
Exception e = req.getAttribute("exception");
include指令:<%@include file=""%>
引入其他jsp页面中的信息
静态引入:
所有的页面先合并源码,统一编译执行
动作:<jsp:标签名></jsp:标签名>
include动作:<jsp:include page=""></jsp:include>
动态引入:
先编译获取每个页面的执行结果,然后合并结果显示
param动作:依赖于include动作存在
<jsp:include page="foot.jsp">
<jsp:param name="copyName" value="@_@"></jsp:param>
</jsp:include>
获取参数:
<%=request.getparameter("copyName")%>
forward动作:
<jsp:forward page="">
jsp内置对象
request ---javax.servlet.http.HttpServletRequest
response ---javax.servlet.http.HttpServletResponse
exception ---java.lang.Throwable
out ---javax.servlet.jsp.JspWriter
session ---javax.servlet.http.HttpSession
application ---javax.servlet.ServletContext
web项目中的中文乱码:
1 jsp必须头部设置指令<%@page contentType="text/html;charset=gbk"%>
2 添加CharacterEncodingFilter
http://localhost:8088/myJsp/include/static/content.jsp
==>../../basic/date.jsp
http://localhost:8088/myJsp/basic/date.jsp
===========================
注意:
在jsp页面中注释代码
信息,必须使用<%-- --%>
===========================