一:jsp的基本概念
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
jsp的组成部分
静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同.
动态部分:Java程序控制的内容,这些内容由Java程序来动态生成。
二:为什么要学习jsp?
JSP是为了简化Servlet的工作出现的替代品,Servlet输出HTML非常困难,JSP就是替代Servlet输出HTML的。
jsp的运行原理
当用户访问一个JSP页面时,回想一个Servlet容器(Tomcat)发出请求;
如果是第一次请求页面,或页面有所改动,则servlet容器首先要把JSP页面(假设为test.jsp)转化为Servlet代码(test.java),再将其转化为(test.class文件);因为这个过程(编译)会耗费一定时间,所以第一次访问或jsp文件有改动时,访问时间有些长;
JSP容器负责调用从JSP转换来的servlet,这些servlet负责提供服务相应用户请求(比如客户端发送表单,要求servlet:formprocessor.java来处理,则容器会建立一个线程,调用formprocessor.java来处理该请求);如果用户有多个请求,则容器会建立多个线程处理多个请求;
容器执行字节码文件(包括调用的servlet:formprocessor.java字节吗),并将其结果返回到客户端;(返回的最终方式是有servlet输出html格式的文件流)
三:jsp模板元素 (jsp页面的html代码)
基本概念
jsp页面中静态的html内容称之为模板元素。在静态的html内容中可以嵌套JSP的其他各种元素来产生动态内容和执行业务逻辑。
jsp模板元素定义了网页的基本框架,即定义了页面的结构和外观
四:jsp脚本片段 (jsp页面的java代码)
JSP脚本片段(scriptlet)是指嵌套在<% %>之中的一条或多条java程序代码。
在JSP脚本片段中,可以定义变量,执行基本的程序运算,调用其他的java类,访问数据库,访问文件系统等普通java程序所能实现的功能。
在JSP脚本中可以直接使用jsp隐式对象来完成web程序所能实现的功能。
JSP脚本片段中的java代码将原封不动的搬移进由jsp页面所翻译的Servlet的JSPService中。因此必须严格遵守java规范。
一个jsp页面可以有多个脚本片段,脚本片段可以互相访问。
五:jsp表达式
jsp表达式提供了将一个java变量或者表达式的计算结果输出到客户端的简化方式,她将要输出的的变量或表达式直接封装在<%=和%>之中。例如:Current time:<%=new java.util.Data()%>
jsp表达式中的变量或者表达式的计算结果将被转换成一个字符串,然后被插入进整个JSP页面输出结果的相应位置处。
jsp表达式中的变量或者表达式后面不能有分号(;),jsp表达式被翻译成Servlet程序中一条out.print(…)程序。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>循环输出数组中的数值</title>
</head>
<body>
<%
int[] value = { 60, 70, 80 };
for (int i = 0; i < value.length; i++) {
%>
<%=value[i] %><br/>
<%
}
%>
</body>
</html>
六:jsp声明
jsp声明将java代码封装在<%! %>之中,它里面的代码将被插入进Servlet的JSPService方法的外面,所以jsp声明可用于定义JSP页面转换成Servlet程序的静态代码块,成员变量和方法。
多个静态代码块,变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个jsp声明中。
<%@ page language="java" import="java.util.*,java.text.*"
contentType= "text/html; charset=UTF-8"%>
<html>
<head>
<title>方法声明</title>
</head>
<body>
<%!
String formatDate(Date d){
java.text.SimpleDateFormat formater =
new SimpleDateFormat("yyyy年MM月dd日");
return formater.format(d);
}
%>
第一次调用:今天是<%=formatDate(new Date())%>
<br>
第二次调用:今天是<%=formatDate(new Date())%>
</body>
</html>
七:jsp注释
1.HTML注释
格式:<!-- 注释内容-->
使用HTML注释的话虽然在表面上看不到东西,但是打开浏览器查看源代码的话还是可以看到的
2.jsp注释
格式:<%-- 注释内容 --%>
查看网页源代码的时候是看不到的
3.jsp程序段中的注释
格式://单行注释 /* *多行注释 */
八:jsp常见错误代号
404错误 —— 找不到访问的页面或资源URL输入错误,未部署项目。
500错误 —— JSP页面代码有错误
302状态码+200状态码 —— 重定向
200状态码 —— 转发
九:内置对象之request 登录对象
内置对象的基本概念
为了Web应用程序开发的方便,在JSP页面中内置了一些默认的对象,这些对象不需要声明就可以在脚本代码和表达式中随意使用。
九大内置对象
request 请求对象——HttpServletRequest
response 响应对象——HttpServletResponse
session 用户会话对象——HttpSession
application 应用全局对象——ServletContext
out 输出对象——PrintWriter
page 当前页面对象——this
pageContext 页面上下文对象——PageContext
config 应用配置对象——ServletConfig
exception 应用异常对象——Throwable
out 输出流对象的基本语法:
对应用服务器上的输出缓冲区进行管理
close():关闭输出流,从而可以强制终止当前页面的剩余部分向浏览器输出
clearBuffer():清除缓冲区里的数据,并且把数据写到客户端去
clear():清除缓冲区里的数据,但不把数据写到客户端去
getRemaining():获取缓冲区中没有被占用 的空间的大小
flush():输出缓冲区的数据。out.flush()函数也会清除缓冲区中的数据,但是此函数先将之前缓冲区的数据输出至客户端,然后再清除缓冲区的数据
getBufferSize():获得缓冲区的大小
out.println();:用来向客户端输出各种数据类型的内容
request 登录对象的基本语法:
int getContentLength():获取请求体的字节数,get请求没有请求体,没有请求体返回-1;
String getContentType():获取请求类型,如果请求是get,那么这个方法返回null;如果是post请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
String getMethod():返回请求方法
Locale getLocale():返回当前客户端浏览器的Locale
String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;
void setCharacterEncoding(String code):设置请求编码,此方法只能对post请求中的参数有效
String getContextPath():返回上下文路径
String getQueryString():返回请求URL中的参数
String getRequestURI():返回请求URI路径
StringBuffer getRequestURL():返回请求URL路径
String getServletPath():返回Servlet路径
String getRemoteAddr():返回当前客户端的IP地址
String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
String getScheme():返回请求协议
String getServerName():返回主机名
16.int getServerPort():返回服务器端口号
十:表单提交的两种方式
get
post
默认情况下是get方式
两种方式的区别: