JSP入门学习
1.概念:
*java server pages :JAVA服务器页面
即可以写JAVA代码又可以写HTML标签,主要用于简化书写
2.原理:
*JSP本质上是一个serlvet
3.JSP的脚本:
JSP定义Java代码的方式
1.定义在<% 一共有3钟脚本
//这里面的称为JSP脚本
%>
定义的java代码,在service方法中。service方法中可以定义什么,该脚本就可以定义什么
p
a
g
e
C
o
n
t
e
x
t
.
r
e
q
u
e
s
t
.
c
o
n
t
e
x
t
P
a
t
h
为
绝
对
路
径
相
当
于
取
项
目
名
称
加
h
t
t
p
:
/
/
l
o
c
a
l
h
o
s
t
:
8080
例
如
{pageContext.request.contextPath}为绝对路径相当于取项目名称加http://localhost:8080 例如
pageContext.request.contextPath为绝对路径相当于取项目名称加http://localhost:8080例如{pageContext.request.contextPath}/emp
相当于http://localhost:8080/项目名称/emp
2.<%!
Java代码
%>
定义的Java代码。在jsp转换后的java类的成员位置,可以用来定义成员变量或者成员方法
一般这种用的比较少,容易出现线程安全问题
3.<%=
java代码
%>
定义的java代码,会输出到页面上,输出语句中可以定义什么该脚本就会定义什么
4.JSP的内置对象
在jsp页面中不需要获取和创建,可以直接使用得对象
jsp一共有9个内置对象:
request
response
out:字符输出流对象。可以将数据输出到页面
response.getwrite()和out.write的区别:
在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
1.JSP:
1.指令
*作用:用于配置JSP页面,导入资源文件
*格式:
<%@指令名称 属性名1=属性名值1 …%>
*分类:
1.page:配置JSP页面的
*<%@page contentype=text/html,charset=utf-8%>
1.设置JSP页面的编码(只能是高级的IED才能生效)
2.设置响应以的mime类型以及字符集
errorpage:当前页面发生异常后,会自动跳转到错误页面
iserropage:标识当前页面是否是错误页面
True:是,可以使用内置对象exception
false:否。默认值,不可以使用内置对象exception。
2.include:页面包含的。导入页面的资源文件
<%@include=xx.jsp%>
3.taglib:导入资源
<%@taglib prefix" 自定义的前缀",url=“导入的资源”%>
prefix=自定义的
如前缀为a,b
就a.
b.
2.注释
1.html注释:
只能注释html代码片段
2.jsp注释
<%-- --%>
可以注释所有
3.内置对象
一共有9个:
变量名 真实类型 作用
*pagecontext PageContext 当前页面共享数据,还可以获取其他八个对象
*request HttpServletRequest 一次请求访问的多个资源
*session httpsession 一次会话的多个请求间
*application servletContext 所有用户间共享数据
*response httpservletresponse 响应对象
*page object 当前页面(servlet)的对象
*out Jspwriter 输出对象,数据到当前页面
*config serlvetconfig servlet的配置对象
*exception throwable 异常对象
2.MVC开发模式(重要)
1.jsp演变历史
1.早期只有serlvet,只能使用response输出标签数据,非常麻烦
2.后来有jSP,简化了servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,又写html标,造成难于维护,难于分工协作
3.再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
2.MVC:
1.M:model ,模型javaBean
*完成具体的业务操作,如查询数据库,封装对象
2.V:view 视图JSP
*展示数据
3.C:controller ,控制器 servlet
1.将获取客户端的输入
2.调用模型
3.将数据交给视图展示
优缺点:
1.优点:耦合性低,方便维护,可以利于分工协作
2.重用性高
2.缺点:
1.使得项目架构变得复杂,对开发人员要求高
EL表达式:
1.概念:expresion langguage 表达式语言
2.作用:替换和简化Jsp页面中java代码的编写
3.语法:${表达式}
4.注意:
*jsp默认支持el表达如果要忽略el表达式
1.设置jsp中page指令中:isELIgnored=‘ture’忽略当前jsp页面中所有的el表达式+
2.${表达式}:忽略当前这个el表达式
5.使用
1.运算:
*运算符:
1.算数运算符:+ - * ,/:可以写成(div),%:(mod)
2.比较运算符: > < <= >= == !=
3.逻辑运算符:&&(and),||(or) , ! (not)
4.空运算符:empty
*功能:用于判断字符串、集合、数组长度是否为null并且长度是是否为0
2.获取值
1.el表达式只能从域对象中获取值
2.语法:
域
名
称
.
键
名
:
从
指
定
域
中
获
取
指
定
键
的
值
∗
域
名
称
:
1.
p
a
g
e
S
c
o
p
e
−
−
>
p
a
g
e
C
o
n
t
e
x
t
2.
r
e
q
u
e
s
t
S
c
o
p
e
−
−
>
r
e
q
u
e
s
t
3.
s
e
s
s
i
o
n
S
c
o
p
e
−
−
>
s
e
s
s
i
o
n
4.
a
p
p
l
i
c
a
t
i
o
n
S
c
o
p
e
−
−
>
a
p
p
l
i
c
a
t
i
o
n
(
s
e
r
l
v
e
t
C
o
n
t
e
x
t
)
∗
举
例
:
在
r
e
q
u
e
s
t
域
中
存
储
了
n
a
m
e
=
张
三
∗
获
取
:
{域名称.键名}:从指定域中获取指定键的值 *域名称: 1.pageScope-->pageContext 2.requestScope-->request 3.sessionScope-->session 4.applicationScope-->application(serlvetContext) *举例:在request域中存储了name=张三 *获取:
域名称.键名:从指定域中获取指定键的值∗域名称:1.pageScope−−>pageContext2.requestScope−−>request3.sessionScope−−>session4.applicationScope−−>application(serlvetContext)∗举例:在request域中存储了name=张三∗获取:{requestScope.name}
2.
键
名
:
表
示
依
次
从
最
小
的
与
众
查
找
是
否
有
改
键
对
应
的
值
3.
获
取
对
象
、
l
i
s
t
集
合
、
m
a
p
集
合
格
式
化
日
期
.
对
象
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
s
d
f
=
n
e
w
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
(
"
y
y
y
y
−
M
M
−
d
d
H
H
:
m
m
:
s
s
"
)
s
d
f
.
f
o
r
m
a
t
(
d
a
t
e
)
1.
对
象
:
{键名}:表示依次从最小的与众查找是否有改键对应的值 3.获取对象、list集合、map集合 格式化日期.对象 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") sdf.format(date) 1.对象:
键名:表示依次从最小的与众查找是否有改键对应的值3.获取对象、list集合、map集合格式化日期.对象SimpleDateFormatsdf=newSimpleDateFormat("yyyy−MM−ddHH:mm:ss")sdf.format(date)1.对象:{域名称.键名称.属性名}
*本质上会去调用getter方法
2.list集合:${域名称.键名称[索引]}
3.map集合:
域
名
称
.
键
名
.
k
e
y
名
称
4.
空
运
算
符
:
e
m
p
t
y
∗
功
能
:
用
于
判
断
字
符
串
、
集
合
、
数
组
长
度
是
否
为
n
u
l
l
并
且
长
度
是
是
否
为
0
∗
{域名称.键名.key名称} 4.空运算符:empty *功能:用于判断字符串、集合、数组长度是否为null并且长度是是否为0 *
域名称.键名.key名称4.空运算符:empty∗功能:用于判断字符串、集合、数组长度是否为null并且长度是是否为0∗{empty list}:判断字符串、集合、数组对象是否为null并且长度=0
*{not empty str }:表示判断字符串、集合、数组对象是否不为null并且长度大于0
5.隐式对象:
el表达式中有11个隐式对象:
*pageContext:获取jsp其他八个内置对象
${pagecontext.request.contextpath}获取动态目录
JSTL
1.概念:javaserver pages tag library JSP标准库标签
*是由Apache组织提供的开源的免费的jsp标签 <标签>
2.作用:用于简化和替换jsp页面上的java代码
3.使用步骤:
1.导入jstl相关jar包
2.引入标签:taglib指令 :<%@ taglib>
3.使用标签
4.常用的JSTL标签
1.if 相当于java代码的if语句
test为必须属性:接收boolean表达式
*如果表达式为true则吧,显示if标签体内容,如果为false,则不显示标签体内容。
*一般情况下,test属性会结合el表达式一起使用
注意:一般情况下if没有else,想要else,则可以再定义一个 c:if标签
2.choose :相当于java代码的switch语句
案例:完成数字编号对应星期几案例
1.域中存储一数字
2.使用chooser标签取出数字 相当于Switch声明
3.使用when标签做数字判断 相当于case
4.otherwise标签做其他情况的声明 相当于default
<%@taglib prefix=“c” uri=“http://java.sun.com.jsp/jstl/core”%>
<%
request.setAttribute(“number”,51);
%>起一个变量传入51则显示数字输入有误
<c:choose>
<c:when test="
n
u
m
b
e
r
=
=
1
"
>
星
期
一
<
/
c
:
w
h
e
n
>
<
c
:
w
h
e
n
t
e
s
t
=
"
{number==1}"> 星期一</c:when> <c:when test="
number==1">星期一</c:when><c:whentest="{number2}"> 星期二</c:when>
<c:when test="
n
u
m
b
e
r
=
=
3
"
>
星
期
三
<
/
c
:
w
h
e
n
>
<
c
:
w
h
e
n
t
e
s
t
=
"
{number==3}"> 星期三</c:when> <c:when test="
number==3">星期三</c:when><c:whentest="{number4}"> 星期四</c:when>
<c:when test="
n
u
m
b
e
r
=
=
5
"
>
星
期
五
<
/
c
:
w
h
e
n
>
<
c
:
w
h
e
n
t
e
s
t
=
"
{number==5}"> 星期五</c:when> <c:when test="
number==5">星期五</c:when><c:whentest="{number6"> 星期六</c:when>
<c:when test="${number7}"> 星期日</c:when>
<c:otherwise>数字输入有误</c:otherwise>
</c:choose>
3.foreach :相当于java代码的for语句
foreach:相当于java代码的fore语句
1.完成重复炒作
for(int i=0;i<10 ,i++){
}
*属性:
begin:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
index:容器中元素的索引从0开始
count:循环次数,从1开始
<c:foreach begin=“1” end=“10” var=“i” sted="1"varstatus=“s”>
${i}
</c:foreach>
2.遍历容器
List list;
for(User user :list ){
//for的User相当于泛型 user是他的变量 list是的对象
}
属性:items:容器对象
var:容器中元素的临时变量
三层架构:软件设计架构
1.界面层(表示层/web层):用户看看得到的界面。用户可以通过界面上的组件和服务器进行交互。(springMVC 框架)
*接收用户参数,封装数据,调用业务逻辑层完成处理,转发jsp页面完成显示
cn.itcast.项目名.web
2.业务逻辑层(service层):处理业务逻辑的。(spring框架)
*组合DAO层中的简单方法。形成复杂的功能
cn.itcast.项目名.service
3.数据访问层(dao层):操作数据存储文件。(MyBatis框架)
*定义了对于数据库最基本的CRUD操
cn.itcast.项目名.dao
案例:用户信息列表展示
1.需求:用户信息的增删改查操作
2.设计:
1.技术选型:servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat
2.数据库设计:
create database day17;–创建数据库
use day17;–使用数据库
create table user( ----创建表
id int primary key auto_increment,
name varchar(20) not null ,
gender varchar(5) ,
age int,
address varchar(32)
字符串用varchar 数字用int
QQ varchar(20),
email varchar(50)
)
3.开发:
1.环境搭建
1.创建数据库环境
2.创建项目,导入需要的jar包
2.编码
4.测试
5.部署运维(部署到云服务器中)
Filter:过滤器
生活中的过滤器:净水器,空气净化器
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:
一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤…
2.快速入门:
1.步骤:
1.定义一个类,实现接口Filter
2.复写方法
3.配置拦截路径
1.web.xml配置
2.注解配置
@WebFiletr(“/”)
如果想要放行的话
filter.doFilter(servletRequest,servletResponse)
chain.doFilter(req,resp);
过滤器细节:
1.web.xml配置
2.过滤器执行过程
1.执行过滤器
2.执行放行后的资源
3.回来执行过滤器放行代码下边的代码
3.过滤器生命周期方法
1.init:在服务器启动后,会创建Fileter对象,然后调用init方法。只执行一次。用于加载资源
2.doFilter:每一次请求被拦截资源时,会执行。执行多次
3.destory:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destory方法
4.过滤器配置详解
拦截路径配置:
1.具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
2.目录拦截:/user/ 访问/user下的所有资源时,过滤器都会被执行
3.后缀名拦截:.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
4.拦截所有资源:/* 访问所有资源时,过滤器都会被执行
*拦截方式配置:资源被访问的方式
Javaweb的三大组件:监听器、过滤器、servlet
注解配置:
*设置dispatcherTypes属性—DispatcherTypes=DispatcherTypes…REQUEST
1.REQUEST::默认值。浏览器直接请求资源
2.FORWARD:转发访问资源
3.INCLUDE:包含访问资源
4.ERROR:错误跳转资源
5.ASYNC:异步访问资源
web.xml配置:
设置
5.过滤器链(配置多个过滤器)
*执行顺序:如果有两个过滤器:过滤器1和过滤器2
1.过滤器1
2.过滤器2
3.资源执行
4.过滤器2
5.过滤器1
*过滤器先后顺序问题:
*注解配置:按照类名的字符串比较规则比较,值小的先执行
如:AFilter和Filter AFilter线执行 --字母一 一比较
*web.xml配置:谁定义在上面,谁先执行
Listener:监听器
概念:web的三大组件之一
*事件监听机制
*事件:一件事情
*事件源:事件发生的地方
*监听器:一个对象
*注册监听:将事件、事件源、监听器绑定在一起。当事件源发生在某个事件后,执行监听器代码
servletContextListener:监听servletContextListener对象的创建和销毁
void contextDestroyed:servletContext对象被销毁之前会调用该方法
void contextInitialized:servletContext对象创建后调用该方法
固定步骤:
1.定义一个类,实现servletContextListerner接口
2.复写方法
3.配置
1.web.xml
cn.itcast.web.listener.ContextLoadListener>
2.注解
@weblistener