自定义标签&JSTL标签库&EL函数
标签技术
在JSP页面中应该尽量减少java代码,那么我们使用标签来替换这些代码。标签的目的:利用标签来替代jsp页面中出现的java代码;
1、JSP标签
有sun公司提供的,不需要导入任何的标签库,可以直接使用<jsp:include>标签:实现页面包含的<jsp:forward>标签:实现请求转发;<jsp:param>标签:配合上面两个标签使用,主要功能是在请求包含和转发的时候,要带一些请求参数过去;
2、EL表达式
Expression Language-->表达式语言。作用是用来
|--获取数据-->获取字符串常量,数字,和布尔类型的常量;
|--获取域中变量的数据,其实底层是调用了pageContext和findAttribute的方法来搜寻数据,不一样的是如果找不到不会返回null,而是返回空;|--在获取数据的时候,如果中括号中使用双引号,则是用的是常量值作为键,如果不使用双引号,那么就是到域中找到对应的值,然后作为键 使用。
|--EL表达式只能获取数据,不能遍历数据;不能做逻辑的操作;
|--EL表达式只能用来获取集合数组中的数据,不能用来遍历。|--只能用来获取数据,不能用来修改数据;
|--用来执行运算;|--算术元素:el在执行算术运算的时候,会试图将非数字的转换成数字进行元算;如果不能转换成数字,,那么就直接抛出异常;|--比较运算|--逻辑运算|--三元表达式 3>3 ? 1: 0|--empty:运算符-->这个是用来判断对象是否为null字符串,或者集合数组是否为空,或者是域中没有任何属性;|--数组和集合为空的时候返回来的是true|--获取常用的开发对象(11个内置对象)|--内置对象:不需要定义,就是可以直接在EL中直接使用的对象;|--pageContext:可以作为入口对象,直接可以获取其他的八大隐式对象;-->.session 可以间接的获取9大隐式对象;
本质上就是一个map,四大作用域|--pageScope|--requestScope|--sessionScope -->所有session域中的属性 拿出来组成一个map就是sessionScope|--applicationScope 这4个代表作用域,各自作用域中所有域属性锁组成的map
param 所有请求参数组成的Map<String,String>paramValues 所有请求参数组成的Map<String, String[]>
|--header:所有请求头组成的Map<String,String>|--headerValues:获取所有请求头信息Map<String,String>
cookie:所有cookie信息组成的Map<String,Cookie>他的值是一个cookie对象initParam:所有web应用初始化信息组成的map<String,String>
|--调用java方法;|--可以调用的方法必须要是静态的方法;|--写一个类,其中包含需要调用的静态方法;|--写一个tld文件,描述此静态方法 -->标签描述符文件;|--在jsp页面中使用talib指令引入tld文件,从而可以调用tld中描述的静态方法;
JSTL标签库
|--核心标签库(core)
|--JSP用于展示数据用的;
MVC
|--设计思想:任何软件最终都是可以认为是由以下的几个模块组成的:用来控制程序运行的控制器(controller)-->Servlet用来封装数据处理数据的模型部分(Mondel)-->JavaBean用来与用户交互展示界面的视图部分(View)-->JSP
|--MVC的设计思想要求软件在设计的过程中这三个部分应该尽量的独立在各自的模块的,各个模块值做自己该做的事情
|--市面上的开发思想:需要的是5个模块|--分别是:servlet、service、dao、jsp和javabean|--servlet仍然还是用来负责接收请求,servlet然后会调用service里面对应的方法来处理我们的业务逻辑,service来具体处理我们的逻辑,要处理数据,但是service不能直接访问我们的数据,必须要通过我们的数据访问层Dao来访问我们的数据,通过增删改查来操作数据,然后Dao来真正的操作我们的数据库DB,整个的过程是service处理好了数据,处理了的数据,然后service到给servlet里面,然后servlet把数据带到我们的jsp的页面上,有jsp的页面把我们的数据显示给我们的浏览器,这个就是我们的整个的调用的过程|--javabean,浏览器在访问我们的servlet,在访问servlet的过程中可能会带很多的参数过来,比如用户在注册的过程中,返回用户的基本的信息,要带到我们的servlet中,这个时候servlet会调用我们的service方法来,用户提交的这些信息都要到service里面,如果在传入参数的时候,可能参数的信息会太多了,这个时候就把这些信息封装到要给javabean的里面,|--所以javabean是用来层与层之间传输数据用的;|--service;叫做业务逻辑层|--Dao:数据访问层
|--这种开发模式称为”javaweb经典三层架构|--servlet和jsp的都是和用户直接相关的-->一个是接收请求,一个是发送请求 这个层web'层
|--服务层|--数据访问层 Dao层
|--所谓的学软件就是三种东西:|--基础知识|--代码|--思想:最难的
开发一个用户的登录和注销
|--创建一个工程就做User工程下面有包:com.itheima.web和servlet相关的东西都要存放在这个包里面service包:和业务逻辑相关的东西都是放在这个里面的;Dao:和Dao相关的东西都是可以存放在这个里面的饿;domain:一般的javabean都是叫做domain四个基本的包但是还是有可能要用到工具类:util类exceptiontest:测试用的类factory:工厂类,工厂类实现解耦
|--还可能会用到第三方的数据包:要导入dom4j的jar包junit 这个是一个测试的包 内置JSTL相关的包也是需要导入的;内置Beanutils包
users.xml需要一个模拟数据库的;还要一个作为整个工程的配置文件;config.proprities
上来要有一个分析的过程
浏览器需要访问我的网站,需要有一个用户登录和注销的界面
|--网页要有一个主页。-->index.jsp 检查用户是否登录 如果没有登录提示:欢迎光临游客 注册 登录,如果已经登录过提示:欢迎回来 注销
|--regist.jsp --.>提供用户注册的表单,输入用户名,里面还有一个是一个校验的问题,这个校验有前台的校验和后台java的校验(前台的校验可以作为一个友好的提示,后台的校验用来防止恶意的数据,所以的这些校验都是需要做的);后台的校验;
|--当提交到信息之后,提交信息后,这个就在 Servlet中,那么这个时候就是Servlet接收到了请求,这个servlet的名字叫做regestservlet 在这个里面第一个要做的是眼校验验证码,如果验证码不正确的话,那么就要回到注册页面进行注册,如果正确了就要继续;
|--在servlet里面注册用户,servlet里面就要调用service方法;在regestservlet里面要封装数据进入javabean,封装完了还要校验数据,校验完成以后,调用service里面的方法,注册用户,注册成功后,登录用户,(重定向回到主页,因为地址栏发生了改变),注册完了以后,还要回到Servlet,还要把信息发给JSP 展现给用户;
|--还有一个就是注销的logoutServlet,用户有没有登录,就要看注册用户有没有登录 杀死session,重定向回到主页
|--service里面有两个方法 注册用户的方法 检验用户密码是否正确
|--Dao里面的方法,添加用户的方法; 和根据用户名查询用户的方法;
Web层-->Service-->Dao层
真正开发的时候是从Dao开发的-->service-->web层