佛山新网站建设信息,网站开发立项报告,英文网站如何做seo,品牌运营上一篇 个人整理非商业用途#xff0c;欢迎探讨与指正#xff01;#xff01; 文章目录 7.请求转发和重定向7.1重定向7.2请求转发7.3注意 8.项目的地址9.MVC设计模式9.1MVC设计模式和三层架构的区别9.1.1MVC的三层9.1.2三层架构的三层 9.2JavaWEB的两个时期9.2.1JSP Model19…« 上一篇 个人整理非商业用途欢迎探讨与指正 文章目录 7.请求转发和重定向7.1重定向7.2请求转发7.3注意 8.项目的地址9.MVC设计模式9.1MVC设计模式和三层架构的区别9.1.1MVC的三层9.1.2三层架构的三层 9.2JavaWEB的两个时期9.2.1JSP Model19.2.2JSP Model2 9.3程序设计的六大原则 10.EL表达式和JSTL脚本库10.1EL表达式10.1.1域对象10.1.2EL隐式对象10.1.3EL运算符 10.2JSTL10.2.1JSTL C库10.2.2JSTL fmt库 7.请求转发和重定向
可以完成servlet向页面的跳转
7.1重定向
普通的页面跳转,发起者是response response.sendRedirect(路径); 路径:可以是html,jsp,servlet等 重定向的应用:增删改
重定向是两次请求,url停留在最后一次请求
response.sendRedirect(MyServlet);7.2请求转发
转发是服务器端行为 将第一个请求转发给第二次请求,将两个请求转换为一次 地址栏是第一次请求的位置
请求转发的应用:查询
// 请求转发 RequestDispatcher转发对象
request.getRequestDispatcher(MyServlet).forward(request, response);7.3注意
servlet的页面跳转不用同时使用多次,一个Servlet中的页面跳转只有一次 关于传值: 请求转发时使用request域 重定向时使用session域
8.项目的地址
web项目有两个地址 1.物理地址,源码存放的位置 2.服务器地址,项目打包后的运行地址 组成是由:项目名WebContent下的代码组成的 服务器下是在WEB-INF下的classes存放java的字节码
9.MVC设计模式
一种软件工程模式,把系统分为三层:Model(模型层) View(视图层) Controller(控制层) MVC设计模式不是Java独有的 MVC设计模式被广泛的应用到Java框架中,例如:SpringMVC框架(基于Servlet),Structs2框架(基本Filter)等框架都是MVC设计模式的思想体现
9.1MVC设计模式和三层架构的区别
9.1.1MVC的三层
M:主要是负责数据交互和业务逻辑的,项目中的体现是DAO层和Service层; POJO实体类,在M层负责数据交互的载体(查询的结果,添加和修改的参数) V:主要负责显示数据(给用户),和数据提交(给数据库),项目中的体现:WEB层(html,jsp) C:捕获请求和控制请求的转发,调用Model层,与View进行交互,项目中的体现:Servlet,Controller
9.1.2三层架构的三层
架构思想 UI:页面层 BLL:业务逻辑层 DAL:数据访问层 三层架构是基于业务逻辑的,MVC设计模式是一种复合的设计模式,是写代码时要遵守的
9.2JavaWEB的两个时期
9.2.1JSP Model1
JSP刚发布的时间,服务器只有JSP页面,所有的内容都在JSP中完成(包括JDBC操作),将所有的内容都混在一起,对后期的维护和扩展非常不利 例如:JSP页面中有一个jsp:javaBean的标签,创建pojo类
9.2.2JSP Model2
清晰了MVC设计模式,我们可以快速的编写事务/业务,例如:转账,买书,购物车等功能
9.3程序设计的六大原则
单一职责原则 一个类或者一个接口或一个方法只完成一项功能 开闭原则 扩展开放,修改关闭 里氏替换原则 多态,子类可以扩展父类的功能,但不能改变原有父类的功能 依赖倒置原则 面向接口编写 接口隔离原则 将接口尽可能的细化,每个接口的功能尽量不要太多 迪米特原则 最少知道原则,降低类和类之间的耦合度
10.EL表达式和JSTL脚本库
10.1EL表达式
% %的替代品,简化JSP开发 语法:${} 10.1.1域对象
JSP域对象EL域对象pageContextpageScoperequestrequestScopesessionsessionScopeapplicationapplicationScope
说明:EL中使用域对象时,可以省略域名,若在域中重名了,则从最小的域中获取数据
body
%// 模拟Servlet操作request.setAttribute(name, zs);// 转发到EL.jsp页面session.setAttribute(name, ww);
%%String name (String)request.getAttribute(name);
%
%name %br
${requestScope.name }
!-- 表示域时,域对象可以省略 --
br
${name }
br
${sessionScope.name }
br!-- 域中数据重名时,省略写法从小域中找 --
${name }
/body10.1.2EL隐式对象
隐式对象说明param${param.key}等价与request.getParameter(“key”);pageContext可以获取到其他的JSP对象信息cookie获取cookie中的值,${cookie.username}
说明:隐式对象不能省略
body
%String username request.getParameter(username);String password request.getParameter(password);
%
%username %
%password %
!-- 请求参数中 --
${param.username }
${param.password }
!-- 这是在域中获取对象 --
${username }
${password }!-- 获取request对象 EL中的requestScope是域并不完全的等于request对象 --
${pageContext.request }
!-- 获取项目名 --
${pageContext.request.contextPath }/body10.1.3EL运算符 /(div) %(mod) (eq) !(ne) (gt) (lt) (ge) (le) (and) ||(or) !(not) empty(判断为空)
body
${1 1 }
${1 div 1 } ${1 / 1 }${5 mod 2 }${1 1 }
${1 eq 1 }${true and false }
${true false }
!-- 判断域中的name是否为null --
${empty name }
/body10.2JSTL
配合EL一起使用,简化JSP页面的 在JSP1.0时代,EL是JSTL的一部分,随着MVC的出现,EL独立了 需要引入第三方jar包(JSTL标签库)
10.2.1JSTL C库
c库 c:if 分支结构 c:choose 多重分支结构 c:foreach 循环结构 % taglib prefix“c” uri“http://java.sun.com/jsp/jstl/core” %
c:if
% request.setAttribute(score, 70); %
c:if test${score 60 }label通过/label
/c:if
c:if test${score 60 }label不通过/label
/c:ifc:choose
% request.setAttribute(score, 71); %
c:choosec:when test${score 90 }A/c:whenc:when test${score 80 }B/c:whenc:when test${score 70 }C/c:whenc:when test${score 60 }D/c:whenc:otherwiseE/c:otherwise
/c:choosec:foreach
body
% // 模拟C层操作ArrayListDog dogs new ArrayListDog();dogs.add(new Dog(1,小白,男));dogs.add(new Dog(2,小黑,男));dogs.add(new Dog(3,小花,男));dogs.add(new Dog(4,小华,女));request.setAttribute(dogs, dogs);
%
!-- v中 --
%ArrayListDog list (ArrayListDog) request.getAttribute(dogs); %
%for(Dog d : list) { %div%d.getDogid() %/divdiv%d.getDogname() %/divdiv%d.getDoggender() %/div
%} %hr
!-- items是在域中直接过去对应的数组或者集合 var将集合或者数组中的数据赋值给var的变量帮助遍历begin指定开始end指定结尾step步长
--
c:forEach items${dogs } vard begin1 end3 step2${d.dogid }---${d.dogname }---${d.doggender }br
/c:forEach
/body10.2.2JSTL fmt库
主要使用的是日期格式转换 !-- 引入fmt库 – % taglib prefix“fmt” uri“http://java.sun.com/jsp/jstl/fmt” %
body
%Date d new Date(System.currentTimeMillis());request.setAttribute(d, d);
%fmt:formatDate value${d }/
fmt:formatDate value${d } patternyyyy-MM-dd/
fmt:formatDate value${d } patternyyyy-MM-dd hh:mm:ss/
fmt:formatDate value${d } patternhh:mm:ss/
/body