« 上一篇
个人整理非商业用途,欢迎探讨与指正!!
可以完成servlet向页面的跳转
普通的页面跳转,发起者是response
response.sendRedirect(路径);
路径:可以是html,jsp,servlet等
重定向的应用:增删改
重定向是两次请求,url停留在最后一次请求
response.sendRedirect("MyServlet");
转发是服务器端行为
将第一个请求转发给第二次请求,将两个请求转换为一次
地址栏是第一次请求的位置
请求转发的应用:查询
// 请求转发 RequestDispatcher转发对象
request.getRequestDispatcher("MyServlet").forward(request, response);
servlet的页面跳转不用同时使用多次,一个Servlet中的页面跳转只有一次
关于传值:
请求转发时使用request域
重定向时使用session域
web项目有两个地址
1.物理地址,源码存放的位置
2.服务器地址,项目打包后的运行地址
组成是由:项目名+WebContent下的代码组成的
服务器下是在WEB-INF下的classes存放java的字节码
一种软件工程模式,把系统分为三层:Model(模型层) View(视图层) Controller(控制层)
MVC设计模式不是Java独有的
MVC设计模式被广泛的应用到Java框架中,例如:SpringMVC框架(基于Servlet),Structs2框架(基本Filter)等框架都是MVC设计模式的思想体现
M:主要是负责数据交互和业务逻辑的,项目中的体现是DAO层和Service层;
POJO实体类,在M层负责数据交互的载体(查询的结果,添加和修改的参数)
V:主要负责显示数据(给用户),和数据提交(给数据库),项目中的体现:WEB层(html,jsp)
C:捕获请求和控制请求的转发,调用Model层,与View进行交互,项目中的体现:Servlet,Controller
架构思想
UI:页面层
BLL:业务逻辑层
DAL:数据访问层
三层架构是基于业务逻辑的,MVC设计模式是一种复合的设计模式,是写代码时要遵守的
JSP刚发布的时间,服务器只有JSP页面,所有的内容都在JSP中完成(包括JDBC操作),将所有的内容都混在一起,对后期的维护和扩展非常不利
例如:JSP页面中有一个jsp:javaBean的标签,创建pojo类
清晰了MVC设计模式,我们可以快速的编写事务/业务,例如:转账,买书,购物车等功能
单一职责原则 一个类或者一个接口或一个方法只完成一项功能
开闭原则 扩展开放,修改关闭
里氏替换原则 多态,子类可以扩展父类的功能,但不能改变原有父类的功能
依赖倒置原则 面向接口编写
接口隔离原则 将接口尽可能的细化,每个接口的功能尽量不要太多
迪米特原则 最少知道原则,降低类和类之间的耦合度
<% %>的替代品,简化JSP开发
语法:${}
JSP域对象 | EL域对象 |
---|---|
pageContext | pageScope |
request | requestScope |
session | sessionScope |
application | applicationScope |
说明:EL中使用域对象时,可以省略域名,若在域中重名了,则从最小的域中获取数据
<%
// 模拟Servlet操作
request.setAttribute("name", "zs");
// 转发到EL.jsp页面
session.setAttribute("name", "ww");
%>
<%
String name = (String)request.getAttribute("name");
%>
<%=name %>
${requestScope.name }
${name }
${sessionScope.name }
${name }
隐式对象 | 说明 |
---|---|
param | ${param.key}等价与request.getParameter(“key”); |
pageContext | 可以获取到其他的JSP对象信息 |
cookie | 获取cookie中的值,${cookie.username} |
说明:隐式对象不能省略
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
%>
<%=username %>
<%=password %>
${param.username }
${param.password }
${username }
${password }
${pageContext.request }
${pageContext.request.contextPath }
${1 + 1 }
${1 div 1 } ${1 / 1 }
${5 mod 2 }
${1 == 1 }
${1 eq 1 }
${true and false }
${true && false }
${empty name }
配合EL一起使用,简化JSP页面的
在JSP1.0时代,EL是JSTL的一部分,随着MVC的出现,EL独立了
需要引入第三方jar包(JSTL标签库)
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:choose
<% request.setAttribute("score", 71); %>
A
B
C
D
E
c:foreach
<%
// 模拟C层操作
ArrayList dogs = new ArrayList();
dogs.add(new Dog(1,"小白","男"));
dogs.add(new Dog(2,"小黑","男"));
dogs.add(new Dog(3,"小花","男"));
dogs.add(new Dog(4,"小华","女"));
request.setAttribute("dogs", dogs);
%>
<%ArrayList list = (ArrayList) request.getAttribute("dogs"); %>
<%for(Dog d : list) { %>
<%=d.getDogid() %>
<%=d.getDogname() %>
<%=d.getDoggender() %>
<%} %>
${d.dogid }---${d.dogname }---${d.doggender }
主要使用的是日期格式转换
< !-- 引入fmt库 – >
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
<%
Date d = new Date(System.currentTimeMillis());
request.setAttribute("d", d);
%>