0
点赞
收藏
分享

微信扫一扫

JSP入门

f12b11374cba 2022-02-14 阅读 46

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.contextPathhttp://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)requestname={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.listmap.SimpleDateFormatsdf=newSimpleDateFormat"yyyyMMddHH:mm:ss"sdf.format(date1.{域名称.键名称.属性名}
*本质上会去调用getter方法
2.list集合:${域名称.键名称[索引]}

3.map集合: 域 名 称 . 键 名 . k e y 名 称 4. 空 运 算 符 : e m p t y ∗ 功 能 : 用 于 判 断 字 符 串 、 集 合 、 数 组 长 度 是 否 为 n u l l 并 且 长 度 是 是 否 为 0 ∗ {域名称.键名.key名称} 4.空运算符:empty *功能:用于判断字符串、集合、数组长度是否为null并且长度是是否为0 * ..key4.emptynull0{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="{number
4}"> 星期四</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="${number
7}"> 星期日</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

举报

相关推荐

0 条评论