1. JSP简介
JSP(Java ServerPages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据,运行在服务器端(底层是servlet)。
jsp: 作为请求发起页面,例如显示表单、超链接;作为请求结束页面,例如显示数据。
Servlet:作为请求中处理数据的环节。
jsp的组成
jsp = html +java脚本 + jsp标签(指令)
jsp中可直接使用的对象一共有9个,被称之为9大内置对象
3种java脚本
表达式 <%=表达式%>
局部代码<% java代码 %>
全局声明 <%! 方法、变量 %>
jsp注释:
html注释<!-- -->客户端可见
java注释 <%-- -->客户端不可见(当服务器把jsp编译成java文件时已经忽略注释部分)运行原理
A. 客户端发送请求,jsp翻译成java文件(Servlet)
B. 编译生成class文件
C. 创建该类对象
D. 调用它的service()方法
E. 第二次请求同一个jsp时,直接调用service()方法,使用已经编译好的字节码文件
jsp文件的修改,会让jsp重新翻译和编译.
2. jsp三大指令
A.page指令:设置当前jsp页面属性,怎样运行jsp页面
写法: <%@page 属性名="值" 属性="值"....%>
属性
import:导入java包,可以写多个
pageEncoding:当前页面的编码,jsp文件翻译成java文件所使用的编码,服务器需要知道这个jsp文件应该是什么编码
contentType:contentType="text/html;charset=utf-8" 响应的页面应该用什么编码来显示
第一阶段:jsp翻译成java文件(pageEncoding)
第二阶段:java文件编译成class文件(UTF-8)
第三个阶段:tomcat加载class文件,输出结果(contentType)
建议:pageEncoding,contentType都是UTF-8
B.include包含指令
<jsp:include>:页面包含动态包含
<jsp:param>:携带参数
静态包含:<%includefile="要包含的文件"%> 先包含,后编译处理
动态包含:<jsp:includepage="要包含的文件"> 先编译处理,后包含
静态包含不能携带参数,动态包含携带参数
C.forward跳转指令
<jsp:forwardpage="页面地址"> 服务器内部转发(页面不跳转)不用写项目名,不会丢失request请求
<jsp:param value="karry"name="aidou"/> 可携带参数,value值显示在前端
</jsp:forward>
通过request.getParameter():得到参数值
D.taglib 导入标签库
两个属性:
prefix:指定标签库在本页面中的前缀!由我们自己来起名称!
uri: 指定标签库的位置!
<%@taglibprefix=”s” uri=”地址”%> 前缀的用法<s:text>
3. JSP九大内置对象及四大作用域概述
这些内置对象将由容器为用户进行实例化,用户直接使用即可,常用pageContext,request,response,session,application(config,out,page,exception)
JSP四大作用域:pageContext,request,sessionapplication域对象 不同范围内数据共享
通用的方法:removeAttribute, setAttribute,getAttribute
1.pageContext范围:只在一个页面中保存数据,javax.servlet.jsp.PageContext(抽象类),相当于页面中所有对象功能的集合,即使用它可以访问到本页面所有对象(一个顶九个!)。
2.Request范围:只在一个请求中保存数据(发短信),javax.servlet.http.HttpServletRequest(接口)
客户端--->服务器 请求对象
方法:域对象方法
获取客户端信息(头部信息,防止盗链)、获取请求参数(表达数据)
中文乱码:
get:newString(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"):
post: request.setCharacterEncoding("UTF-8");
3.Session范围:在一次会话范围中保存数据,仅供单个用户使用(一次通话),javax,servlet,http,HttpSession(接口)
4.Application范围:在整个服务器上保存数据,所有用户共享,javax.servlet.ServletContext(接口)
response
与request对应,服务器-->客户端,响应用户请求
自动刷新应用,
页面重定向,客户端跳转
操作cookie应用
config
Servlet在web.xml初始化的时候,jsp引擎通过config向它传递信息
<init-param>
<param-name>jdbcName</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
StringjdbcName=config.getInitParameter("jdbcName");
4. javaBean标签
使用java语言开发的一个可重用组件,在JSP开发中可以使用javaBean减少重复代码。JavaBean主要是用来通过反射操作的类!因为需要通过Class的newInstance()方法来创建类的实例,所以要求类必须提供public的无参构造器。
a. jsp:useBean创建javaBean
<!--id="实例化对象名称" scope="保存范围" class="类完整名称" -->
<jsp:useBeanid="student" scope="page"class="com.yunhe.Student" />
b. jsp:setProperty设置javabean属性值
<jsp:setProperty property="属性名称"name="实例化对象的名称" value="属性值" param="参数名称"/>
Value:设置后无论输入什么值,都提交显示value值
Param:当属性名称!=提交属性名称时,可使参数名称=提交属性名
property="*"自动匹配所有
c. jsp:getProperty获取javabean属性值
<jsp:getPropertyproperty="属性名称" name="实例化对象的名称" />
d. javabean的保存范围
保存范围有page,request,session,application,默认是page;
e. javabean删除
page范围:pageContext.removeAttribute("javaBeanName");
request范围:request.removeAttribute("javaBeanName");
session范围:session.removeAttribute("javaBeanName");
application范围:application.removeAttribute("javaBeanName");
5.EL表达式
Jsp内置的表达式语言,用来替代jsp中的java代码。规则:${表达式语言}
JSP页面也可以忽略EL:<@pageisELIgnored=”true”%>
EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!pageContext不是map,它就是PageContext类型,1一个顶九个。
作用:
获取域对象中的值(重要)
执行运算
调用方法(了解)
el表达式中内置对象
获取值的写法
.的方式:
[""]的方式:如果key中有特殊字符,必须使用[]的方式
关于数组,对象,集合,map值的获取
EL操作四大域的内置对象:它们是Map类型
pageScope 、requestScope 、sessionScope 、applicationScope
6. jstl标签库
jsp标准标签库,导入jar包。jstl依赖el表达式,使用el表达式获取值
使用步骤:1. 导入jar(jstl.jar standard.jar)
2. 在jsp使用taglib命令导入标签库
out标签:输出内容(常量值,域对象的值)
<c:out value="${pageScope.name }"default="无名"></c:out>
value:输出的内容
escapeXml:是否转义
default:默认值
set标签:向域对象中赋值
<c:set var="name" value="wjk"scope="page"></c:set>
var:值的key
value:值
scope:范围(从配置范围寻找值,找不到按page request session application顺序找)
remove标签(了解) <c:removevar="pass"/>
if标签(重点)
<c:set var="a"value="10" scope="page"></c:set>
<c:if test="${a eq 10}" var="result" scope="page">
<c:outvalue="a=10"></c:out>
</c:if>
<c:out value="${pageScope.result}"></c:out>
test:判断的条件
var:将判断的结果赋值给某一个变量
scope:作用域(将变量赋值给某个域对象)
choose标签(重点)
<c:choose>
<c:when test="${a gt10}">
<c:outvalue="a>10"></c:out>
</c:when>
<c:when test="${a lt10}">
<c:outvalue="a<10"></c:out>
</c:when>
<c:otherwise>
<c:outvalue="a=10"></c:out>
</c:otherwise>
</c:choose>
foreach标签(重要)
<c:forEachvar="a" begin="1" end="10" step="2"varStatus="as"><!-- 注意大小写 -->
${a }
${as.count }
${as.first }
${as.last }
</br>
</c:forEach>
var :声明变量
begin:从哪开始
end:结束
step:步长
varStatus:循环状态变量
* count:循环元素的个数
* index:循环元素的下标
* first:是否为第一个元素
* last:是否为最后一个元素
* current:当前元素
7. Tomcat
黑窗口闪退:-->javahome配置 因为tomcat本来就是一个java程序,运行需要jvm
端口占用时除了修改端口号:杀死占用端口的进程 taskkill /pid 端口号 -t -f
tomcat安装目录(开源,轻量级)
bin:存放tomcat启动和终止的文件
conf:tomcat配置文件
lib:tomcat运行所需要jar文件
logs:tomcat日志文件
temp:运行时存放的临时文件
webapps:部署的项目
work:JSP和session所需要的文件(存放jsp比那以后产生的class文件)
配置 web.xml,每次修改完必须重启服务器。