jsp是动态网页之一,jsp全称:java server page Java服务页面
jsp = Java + html
<%@ %>--------------------jsp标签指令
html----------------------html语法
<% %>---------------------java脚本
<%= %>--------------------java表达式
<%! %>--------------------java方法声明区
------------------网页注释
<%-- --%>-----------------jsp注释
注:1、java脚本中不能定义方法
2、java表达式是把内容输出到浏览器中,java表达式不能写分号
3、网页注释在浏览器中能看到,jsp注释不会在浏览器中显示,比较安全
1、翻译过程 把jsp页面翻译成一个servlet Java类
2、编译过程 把java类编译成class
3、执行过程 JVM执行class文件,Tomcat输出到浏览器
jsp就是一个简单的servlet
servlet + jsp
1、servlet职责:设置字符编码、收集表单参数、调用业务逻辑、页面跳转。
2、jsp职责:呈现数据给浏览器
servlet跳转到jsp有两种方式:转发(forward)、重定向(redirect)
转发是web服务器请求的传递,用户发送request到servlet,servlet把处理好的结果转移到jsp
在jsp页面呈现内容,整个过程使用了一个request,浏览器地址是最初始的地址
转发代码:request.getRequestDispatcher("personList.jsp").forward(request, response);
重定向是web服务器根据请求的需要,重新发送新的请求,用户发送请求到servlet,servlet处理好
结果响应掉第一次请求,告知浏览器重新发送一个新的request到jsp页面,整个过程使用了俩个
request,浏览器地址是最后一次请求的地址,是jsp地址
重定向代码:response.sendRedirect("personList.jsp");
注: 转发与重定向不能同时使用
1、查询用forward
2、增删改用redirect
一个请求需要用到数据库,就用servlet地址
一个请求不需要用到数据库,就用jsp地址
1、转发是请求的传递,整个过程使用了一个request
重定向是结束第一次请求,告知浏览器发送新的请求,整个过程使用了俩个request
2、转发:浏览器地址是最初始的地址
重定向:浏览器地址是最后一次的地址
3、转发可以使用request、session、application对象传递参数,可以传递任何对象
重定向只能使用URL传递参数,只能传递字符串
4、转发会重复提交表单
重定向不会重复提交表单
5、转发只能在项目内部跳转
重定向可以跳转到项目外部
相同点:
jsp就是一个简易的servlet,都是用来处理用户请求
不同点:
jsp是一个动态网页,用来呈现数据到浏览器
servlet是一个java类,用来处理用户请求与业务逻辑
jsp侧重呈现
servlet侧重于业务逻辑实现
jsp九大内置对象
web服务器一般指的是网站服务,主要提供互联网信息浏览,目前的web服务器都是http协议。
URL = http://ip:port/location
http:// http协议
ip 服务器ip地址
port web服务器的软件端口
location 项目的资源目录
ip地址在网络中定位一台计算机
port:在计算机中定位一款软件,web的默认端口是80
1、jsp java Tomcat
2、asp c# IIS
3、php php Apache
bin 执行文件(开启/关闭)
conf 配置文件
lib tomcat相关jar包
logs 日志文件
temp 临时文件
webapps web项目存放目录
work web项目的工作空间(缓存)
1、修改Tomcat端口,默认是8080端口
在Tomcat的conf/server.xml文件中修改端口,代码如下:
protocol="HTTP/1.1" redirectPort="8443"/>
2、设置Tomcat字符编码
在Tomcat的conf/server.xml文件中设置字符编码,代码如下:
port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
3、清除Tomcat缓存
清空Tomcat目录下temp与work俩个文件夹下所有文件
4、启动与停止Tomcat
启动:双击bin/startup.bat
停止:双击bin/shutdown.bat
src:存放java源文件
build:存放java编译后的文件,.class文件
webContent:存放前端代码,比如:html、css、js、jsp
WEB-INF/lib:存放项目第三方jar包,比如:ojdbc6.jar
1、servlet java类
2、jsp 动态网页
servlet成为web容器,用来处理客户端请求,运行在服务器端
1、创建一个类继承HttpServlet
2、重写doGet与doPost方法
3、在web.xml中配置servlet信息
java应用程序入口是main方法
web应用程序入口是web.xml
1、设置request、response字符编码
2、收集表单参数 (request.getParameter(""))
3、调用业务逻辑(dao层方法)
4、响应请求
生命周期:什么时候创建,什么时候销毁。
servlet 生命周期:servlet什么时候创建,servlet什么时候销毁。
servlet的根接口:Servlet
1、执行构造方法实例化
2、执行init方法初始化
3、执行service方法处理请求
4、当Tomcat关闭时,执行destroy方法进行销毁
构造方法与init方法自始至终只执行一次,servlet对象是单实例,当Tomcat关闭时,
destroy方法也是只执行一次,销毁一个对象
servlet对象是由Tomcat创建的,创建方式有两种,分别如下:
1、第一次访问时被实例化 默认方式 95%
在servlet标签中配置:
中间是一个大于或等于零的正整数,数值越小,优先级越高,如果数值相同按书写顺序
Servlet根接口处理请求的方法是servlet方法,在子类HttpServlet中重写了该方法,
并且把request与respons对象转成了带http协议的request与respons对象,并且调用了自身带有
http协议的service方法,在这个service方法中根据提交方式method
调用 -------》doGet(http协议,只能处理get请求)
service方法(Servlet根接口)----->service(Http协议)
-------》doPost(http协议,只能处理post请求)
内置对象不需要构造,直接使用,对象名是固定的,这样的对象jsp一共有九个
对象名 类型(类/接口) 描述
page java.lang.Object(类) 当前页面
pageContext javax.servlet.jsp.PageContext(类) 页面上下文内容
request javax.servlet.http.HttpServletRequest(接口) 用户请求
response javax.servlet.http.HttpServletResponse(接口) 响应请求
session javax.servlet.http.HttpSession(接口) 网页会话
application javax.servlet.ServletContext(接口) 当前应用(servlet上下文内容)
config javax.servlet.ServletConfig(接口) 配置信息
out javax.servlet.jsp.JspWiter(类) 输出对象
exception java.lang.Throwable(类) 网页异常对象
重点掌握:pageContext、request、response、session、application
pageContext 当前页面有效
request 一次请求有效
session 整个网页会话有效
application 整个应用有效
以上四个域对象都有三个方法,分别如下:
setAttribute(key,value); 把对象设置到范围中
getAttribtte(key) 从范围中获取对象
removeAttribute(key) 从范围中删除对象
pageContext对象代表网页的上下文内容,是九大内置对象最基础的对象,可以通过pageContext对象来
获取其他内置对象
pageContext对象获取
pageContext = _jspxFactory.getPageContext()
使用jsp工厂获取,如果要使用pageContext对象,请使用jsp。
pageContext对象常用方法:
setAttribute(key,value); 把对象设置到范围中
getAttribtte(key) 从pageContext范围中获取对象
removeAttribute(key) 从pageContext范围中删除对象
getRequest() 获取request对象
getResponse() 获取response对象
getSession() 获取session对象
getServletContext() 获取application对象
getServletConfig() 获取config对象
getOut() out对象
getException() 获取exception对象
getPage() 获取page对象
request对象代表一个用户请求
request对象获取方法:
HttpServletRequest request_ = (HttpServletRequest)pageContext.getRequest();
request对象常用方法:
setCharacterEncoding("UTF-8"); 设置request字符编码
getCharacterEncoding("UTF-8"); 获取request字符编码
setAttribute(key,value); 把对象设置到范围中
getAttribtte(key) 从范围中获取对象
removeAttribute(key) 从范围中删除对象
getRequestDispatcher("URL").forward(request, response) 转发
getParameter("参数名") 获取表单参数
getParameterValues("参数名") 获取表单同名参数,比如:复选框
getServerName() 服务器端ip
getServerPort() 服务器端口
getContextPath() 项目名、根路径
getRequestURI() 相对路径
getRequestURL() 绝对路径
getQueryString() 参数字符串
response对象代表响应请求
response对象获取方式:
HttpServletResponse response_ = (HttpServletResponse)pageContext.getResponse();
response对象常用方法:
setCharacterEncoding("UTF-8"); 设置response字符编码
getCharacterEncoding("UTF-8"); 获取response字符编码
setContentType("text/html;charset=UTF-8"); 设置网页类型与网页字符编码
sendRedirect("URL") 重定向
getWrite() 获取输出对象
注:转发、重定向、输出对象(out)不能同时使用,三者只能使用一个
在一个jsp页面嵌入另一个页面,嵌入方式有两种,分别如下:
1、静态嵌入
把jsp代码内容嵌入到另一个jsp中,一起编译产生一个servlet,上下文内容能关联,
称为:静态嵌入
代码:
<%@ include file="jsp URL" %>
2、动态嵌入
嵌入的jsp与本身的jsp各自编译,产生两个servlet,上下文内容不能关联,
称为:动态嵌入
代码:
1、什么是session
session是一次网页会话,浏览器与web服务器之间的一次会话,包含多次请求,
这就是网页会话
*****2、session的生命周期
创建:
浏览器第一次访问web服务器页面,产生一个session,一个用户对应一个session,
同一个浏览器,同一个网站,只会产生一个session
销毁:
a、关闭浏览器,session对象并没有销毁,只是被闲置了,无人使用,超出session时长,
就会被销毁
b、超出session时长,也会被销毁,Tomcat默认session是30分钟
c、手动销毁session,代码session.invalidate()
3、session的作用
session是用来存储用户信息的,一个用户对应一个session,用户与用户之间不能共享session,
同一个浏览器,同一个网站,不能同时登录两个用户
4、设置session时长
a、设置Tomcat session时长,在Tomcat/conf/web.xml文件中修改session时长,代码如下
注:1、单位是分钟 2、会影响Tomcat下所有项目的session时长
b、设置项目的session时长,在项目web.xml中修改session时长,代码如下:
c、设置功能的session时长,在功能代码中设置session时长,代码如下:
session.setMaxInactiveInterval(30);
注:1、单位是秒 2、会影响单个功能的session时长
5、获取session对象方式
pageContext.getSession() 通过pageContext获取session对象
request.getSession() 通过request获取session对象
6、session常用方法
setAttribute(key,value)
1、什么是application对象
application对象相当于web应用程序的全局变量,在servlet或jsp中都能获取,一个web项目
只会产生一个application对象,application对象是单例的
2、application对象生命周期
创建:
web服务器启动时创建application对象,一个web项目只会产生一个application对象
销毁:
web服务器停止的时候销毁application对象,一个web项目销毁一个application对象
3、获取application对象
pageContext.getServletContext() 通过pageContext对象获取
request.getServletContext() 通过request对象获取
session.getServletContext() 通过session对象获取
4、常用方法
setAttribute(key,value)
*****5、session与application的区别
a、范围不同
session是一次网页会话有效
application是整个应用程序有效
session是用户级别,一个用户对应一个session,用户与用户之间不能共享session
application是应用级别,多个用户可以共享一个application
b、生命周期不同
session:第一次访问web页面时,产生一个session,session销毁有三种方式:
关闭浏览器、超出时长、手动代码关闭
application:Tomcat启动时,产生一个application,Tomcat关闭时销毁一个
application对象
c、对象个数不同
session:一个会话产生一个session,多个网页会话,产生多个session
application:一个web程序只能产生一个application对象
1、什么是config对象
config对象是servlet配置信息对象,可以获取servlet在web.xml中的配置信息
2、常用方法
getServletName() 获取web.xml中
getInitParameter(String name) 获取web.xml中
1、什么是cookie
cookie是服务器端保存在客户端的一些文本文件,cookie信息存储在客户端,有一定的生命周期
生命周期一过,cookie就会失效
2、cookie的特点
a、cookie的文件都是文本文件,就是.txt
b、cookie只能存储字符串
c、cookie文件大小不会超过4KB
d、cookie文件有一定生命周期
e、cookie由浏览器管理
3、cookie的使用
a、创建cookie
Cookie cookie = new Cookie("egg","teaegg");
b、设置生命周期,一般是7天,单位秒,不设置生命周期,关闭浏览器,cookie就失效
cookie.setMaxAge(7 * 24 * 60 * 60);
c、写入浏览器
response.addCookie(cookie);
d、获取cookie
String value = "";
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
String name = cookie.getName();
if("egg".equals(name)){
value = cookie.getValue();
}
}
}
*****4、cookie的优缺点
优点:
a、cookie存储在客户端硬盘上,不会给服务器端造成压力
b、cookie是用来提高用户体验的
缺点:
cookie存储在客户端的硬盘中,容易被删除、信息容易被泄露
*****5、cookie与session区别
a、session信息存储在服务器端的内存中
cookie信息存储在客户端硬盘中
b、session可以存储任何对象
cookie只能存储字符串
c、session关闭浏览器、超时、手动代码销毁,进行销毁
cookie是时间过期、浏览器清除进行销毁
d、session一般保存重要数据
cookie一般保存不重要数据,比如:记录用户名、浏览器地址
e、session是jsp九大内置对象
cookie不是jsp九大内置对象
Apache文件上传与下载
1、文件上传form表单注意事项
a、form表单提交方式必须是post,method="post"
b、form表单类型一定是上传模式,enctype="multipart/form-data"
c、input框type属性必须是file,
2、保存文件注意事项
a、文件保存在硬盘中,文件路径保存在数据库中
b、上传文件保存时,一定要重命名,否则会覆盖,一般使用用户名+时间作为文件名
c、数据库中储存文件路径、原文件名,因为下载时,要把原文件名还给原文件
1、提交记录的id到servlet,servlet获取参数id,是根据id到数据库中查询记录,把文件名与储存路径查询出来
2、调用downFile方法,第一个参数:文件存储路径,第二个参数:文件名,第三个参数:response
UUID算法是一个32位16进制的字符串,保证唯一性,是线程安全的
使用:
String code = UUID.randomUUID().toString();
get提交:
1、get提交会有长度限制
2、get提交会在浏览器中显示参数,不安全
3、浏览器会缓存get提交
4、get提交使用了一次TCP,效率高
post提交:
1、post提交不会有长度限制,文件上传必须使用post
2、post提交不会在浏览器中显示参数,安全
3、浏览器不会缓存post提交
4、post提交使用了两次TCP,效率低
注:a链接、form默认、js跳转、iframe、浏览器访问都是get提交
form method="post"是post提交
el表达式与jstl
el表达式与jstl
1、什么是el表达式
el表达式全称:expression language 表达式语言 sun公司
作用:来取代jsp中的java代码,在jsp中不再使用<% %>
2、运行环境
el表达式是Tomcat4之后版本自带的,不需要导第三方的jar包,这个环境很早就有了
3、el表达式的语法
el表达式语法由$与{}组成,比如${表达式}
el表达式获取对象属性,语法如下:
a、${key.属性名 }
b、${key['属性名'] }
注:其中的‘属性名’并不是类中的属性名,与类中的属性名无关,调用的是属性get方法,
首字母变大写,前面加get,然后去类中找get方法
属性名的前3个字母不要大写
4、el表达式的内置对象
a、域对象
对象 el表达式 描述
pageContext ${pageScope.key} 在pageContext范围中根据key值查询
request ${requestScope.key} 在request范围中根据key值查询
session ${sessionScope.key} 在session范围中根据key值查询
application ${applicationScope.key} 在application范围中根据key值查询
b、获取URL参数
${param.参数名 } request.getParameter("参数名")
${paramValues.参数名 } request.getParameterValues("参数名")
c、获取cookie值
${cookie.key.name} 获取cookie的name属性
${cookie.key.value} 获取cookie的value属性
d、pageContext对象(jsp最基础的内置对象)
${pageContext.request.requestURI } 获取当前相对路径
${pageContext.request.contextPath } 获取项目名/根路径
e、empty对象(判断空)
${empty key} 判断key是否为空,如果为空返回true
不存在范围、空字符串、空集合、null都返回true
${!empty key} 取反
${not empty key} 取反
el的内置对象有哪些
pageContextScope、 request Scope、sessionScope、applicationScope
param、paramValues、empty、cookie、pageContext
5、el表达式转义符
== eq
!= ne
< lt
<= le
> gt
>= ge
&& and
|| or
! not
1、什么是jstl标签库
jstl全称:jsp standard tag library jsp标准标签库 sun公司推出
2、jstl标签库包含哪些
a、核心库
b、格式库
c、函数库
d、SQL库(从来不用)
3、运行环境
jstl需要导入第三方jar包,Tomcat没有自带jstl的jar包,jar包:jstl-1.2.jar
1、核心库的使用
引用标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
标签语法:
作用:处理页面的业务逻辑,比如:if、for
2、常用标签
items 用于存放集合的key值
var 定义变量,集合中每个元素赋予此对象
varStatus 变量状态,可以用来做序号
i.index每行的下标,从零开始
i.count统计当前是第几行,从1开始
begin 循环开始位置
end 循环结束位置
step 下标的步长
1、格式化库的使用
引用标签库:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
标签语法:
作用:格式化时间与数字
2、常用标签
fmt:formatDate 格式化时间
fmt:formatNumber 格式化数字
1、函数的使用
引用标签库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
标签语法:${fn:函数名(参数) }
作用:调用函数获取相应结果,这些函数都是字符串函数
2、常用函数
fn:contains(string, substring)
如果参数string中包含参数substring,返回true
fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true
fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true
fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回
fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置
fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。
fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果
fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素
fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true
fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置
fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串
fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串
fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回
fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回
fn:trim(string)
去除参数string 首尾的空格,并将其返回
***** 六、jsp标签指令
1、<%@ page %> 用来设置网页信息,比如:字符编码、网页类型、导包
2、<%@ include %> jsp静态嵌入
3、<%@ taglib %> 在页面引入第三方标签库,比如:jstl
servlet + jsp
1、servlet职责:设置字符编码、收集表单参数、调用业务逻辑、页面跳转。
2、jsp职责:呈现数据给浏览器
servlet跳转到jsp有两种方式:转发(forward)、重定向(redirect)
1、什么是转发
转发是web服务器请求的传递,用户发送request到servlet,servlet把处理好的结果转移到jsp
在jsp页面呈现内容,整个过程使用了一个request,浏览器地址是最初始的地址
转发代码:request.getRequestDispatcher("personList.jsp").forward(request, response);
2、什么是重定向
重定向是web服务器根据请求的需要,重新发送新的请求,用户发送请求到servlet,servlet处理好
结果响应掉第一次请求,告知浏览器重新发送一个新的request到jsp页面,整个过程使用了俩个
request,浏览器地址是最后一次请求的地址,是jsp地址
重定向代码:response.sendRedirect("personList.jsp");
注: 转发与重定向不能同时使用
1、查询用forward
2、增删改用redirect
一个请求需要用到数据库,就用servlet地址
一个请求不需要用到数据库,就用jsp地址
1、转发是请求的传递,整个过程使用了一个request
重定向是结束第一次请求,告知浏览器发送新的请求,整个过程使用了俩个request
2、转发:浏览器地址是最初始的地址
重定向:浏览器地址是最后一次的地址
3、转发可以使用request、session、application对象传递参数,可以传递任何对象
重定向只能使用URL传递参数,只能传递字符串
4、转发会重复提交表单
重定向不会重复提交表单
5、转发只能在项目内部跳转
重定向可以跳转到项目外部
*****六、jsp与servlet区别
相同点:
jsp就是一个简易的servlet,都是用来处理用户请求
不同点:
jsp是一个动态网页,用来呈现数据到浏览器
servlet是一个java类,用来处理用户请求与业务逻辑
jsp侧重呈现
servlet侧重于业务逻辑实现
Filter(过滤器)
servlet:处理用户的请求与响应
Filter:过滤请求、拦截请求
Listener:监听web对象,比如:request、session、application
1、创建一个类实现javax.servlet.Filter接口,重写接口中的抽象方法,一共三个方法分别如下:
init() 初始化方法
doFilter() 拦截用户请求
destroy() 销毁方法
2、在项目web.xml中配置Filter信息
注:过滤路径使用通配符/* 能过滤到所有路径,包括:html、jsp、servlet、css、img、js
1、执行构造方法实例化
2、执行init方法初始化
3、执行doFilter方法拦截请求
4、当Tomcat关闭时,执行destroy方法进行销毁
Tomcat启动时就会启动构造方法和init方法,自始至终只会执行一次,Filter对象是单实例的,
当Tomcat关闭时,destroy方法也只会执行一次,销毁一个对象
访问优先级:Filter > Servlet
实例化优先级:Filter > Servlet
Filter拦截只会拦截request请求,产生新的request对象就会被拦截一次,那么转发只会拦截一次,
重定向会拦截两次
1、设置全局的request、response的字符编码
2、登录拦截
3、权限拦截
Listener(监听器)
Listener是web三大组件之一,用来监听request、session、application对象的创建、销毁、存储等动作,
监听器的根接口java.util.EventListener
1、对象的创建与销毁,对象包含:request、session、application
ServletRequestListener 监听request对象创建与销毁
HttpSessionListener 监听session对象创建与销毁
ServletContextListener 监听application对象创建与销毁
2、对象存储值,对象包含:request、session、application
ServletRequestAttributeListener 监听request对象存储值
HttpSessionAttributeListener 监听session对象存储值
ServletContextAttributeListener 监听application对象存储值
1、创建一个类实现监听接口,重写接口中的抽象方法
2、在web.xml中配置listener信息,代码如下:
访问优先级:Filter > Servlet
实例化优先级:Listener > Filter > Servlet