Web开发模式
MVC
- Model:javabean:封装业务数据,模型
- View:jsp:显示数据,视图
- Controller:servlet:调度jsp和javabean资源,控制器
三层结构:
- dao层: 和数据访问相关的操作
- service层: 和业务逻辑相关的操作
- web层: 和用户直接交互相关的操作(传接参数,跳转页面)
MVC+三层架构
个人理解:
- service层(业务逻辑层),比如说当我们添加用户时需要判断用户的id是否为空,此时service层负责判断后再调用dao层的方法,dao层只负责对数据的增删查改。
- servlet负责调用业务逻辑(页面的调度),而不处理业务逻辑。真正处理业务逻辑的是service层。
从servlet->jsp (页面跳转过程)
//设置编码格式
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//拿到对象 ,通过调用dao中的方法
Contact contact=new ContactPerson();
List<Person> list = contact.search();
//
//shift+alt+A 区块选择,按一次进入选择模式,再按一次回来
/**
* ctrl+F 正则替换 ^(.*)$ \1";
* ^一行表示
* $结束表示
* \1匹配里面的一行内容 替换为这个";
*/
//将对象保存在域中
request.setAttribute("contacts",list);
//跳转到显示页面
request.getRequestDispatcher("/listContact.jsp").forward(request, response);
**从jsp->servlet
一般我们用 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 ∗ ∗ 来 获 取 当 前 路 径 ∗ ∗ / Q u e r y C o n t a c t S e r v l e t ? i d = {pageContext.request.contextPath }**来获取当前路径 **/QueryContactServlet?id= pageContext.request.contextPath∗∗来获取当前路径∗∗/QueryContactServlet?id={con.id}**是页面跳转的同时将id作为参数传递过去
<!-- 直接用EL表达式从域对象中获取数据-->
<c:forEach items="${contacts}" var="con" varStatus="varsta">
<tr>
<th>${varsta.count}</th>
<th>${con.name}</th>
<th>${con.gender} </th>
<th>${con.email }</th>
<th>${con.qq}</th>
<td colspan="2" align="center">
<a href="${pageContext.request.contextPath }/QueryContactServlet?id=${con.id}">修改</a>
<a href="${pageContext.request.contextPath }/DeleteContactServlet?id=${con.id}">删除</a>
//说明,此处的pageContext.request相当于pageContext.getRequest()方法,其在于先得到request对象,再调用request的方法。
</td>
</tr>
</c:forEach>
注意:此处设计到EL表达式
语法: 表 达 式 或 变 量 < b r > < f o n t c o l o r = r e d > 表 达 式 / 变 量 是 从 域 对 象 中 得 到 的 , 也 就 是 说 , 我 们 必 须 先 往 域 对 象 中 存 储 < / f o n t > < b r > 输 出 对 象 的 某 个 成 员 : {表达式或变量}<br><font color=red>表达式/变量是从域对象中得到的,也就是说,我们必须先往域对象中存储</font><br> 输出对象的某个成员: 表达式或变量<br><fontcolor=red>表达式/变量是从域对象中得到的,也就是说,我们必须先往域对象中存储</font><br>输出对象的某个成员:{student.name},其中student的对象必须有方法getName()
form表单形式:
<form action="${pageContext.request.contextPath }/AddContactServlet" method="post">
项目结构:
注意:不管是获取数据还是发送数据,都是以对象为基本单位,即JavaBean。