一。javeEE的项目结构层次:MVC
1.Model:模型层(DAO+业务层)
2.View:视图层 jsp
3.Control:控制层 servlet

二。分层的原则:
1.层与层之间松耦合,层内保持高内聚性
2.不跨层访问
3.层与层之间的访问是通过接口来调用
4.上层调用下层,不能反过来

注意:关于页面中写路径的问题:
将页面中加入:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<head> <base href="<%=basePath%>"/></head>这句话的作用是将当前网页中的所有连接属性加上了完整路径的前缀。
好处:就是页面的所有路径都从根目录开始写起,包括css,js,img,action,超链接
为了方便页面的编辑,可以将eclipse中的jsp模板修改:点击window--preference--web--jsp files--editor--templates
在右边的列表中找到New Jsp file(html)--点击editor--修改模板--apply

实例:用MVC的结构实现一个学生系统的增删改查

  后台代码结构(\src\com\目录下、\src\com\control目录下)+前端代码结构(\WebContent\student目录下)

  其他代码就不贴出,仅贴出control层+jsp层

  QueryStudentServlet.java

package com.control;

import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.pojo.Student;
import com.service.IStudentService;
import com.service.StudentService;
@WebServlet("/queryStu")
public class QueryStudentServlet extends HttpServlet{
IStudentService stuSer = new StudentService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.调用业务查询数据
List<Student> list = stuSer.getAllStu();
//2.将数据保存到request中传递到页面
req.setAttribute("list", list);
//3.转发页面
req.getRequestDispatcher("student/listStudent.jsp").forward(req, resp);
}
}

  AddStudentServlet.java

package com.control;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.service.IStudentService;
import com.service.StudentService;
@WebServlet("/stu")
public class AddStudentServlet extends HttpServlet{
IStudentService stuSer = new StudentService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//1.获取页面的参数
String stuname = req.getParameter("stuname");
String stusex = req.getParameter("stusex");
String stuage = req.getParameter("stuage");
String studate = req.getParameter("studate");
String stuprofess = req.getParameter("stuprofess"); //2.调用业务层保存数据
int result = stuSer.addStu(stuname, stusex, stuage, studate, stuprofess); //3.跳转页面
if(result==1){//成功
req.setAttribute("mess", "添加成功!");
}else{
req.setAttribute("mess", "添加失败!");
}
req.getRequestDispatcher("student/addStudent.jsp").forward(req, resp);
}
}

  UpdateStudentServlet.java 

package com.control;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.pojo.Student;
import com.service.IStudentService;
import com.service.StudentService;
@WebServlet("/updateStu")
public class UpdateStudentServlet extends HttpServlet{
IStudentService stuSer = new StudentService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String type = req.getParameter("type");
if("del".equals(type)){//删除学员信息
String id = req.getParameter("id");
stuSer.delStu(id);
//删除数据后重定向到查询的servlet中去完成查询
resp.sendRedirect("queryStu");
return;//一个请求中只能有一次跳转,所有每个if结束都要return
}
if("toupdate".equals(type)){//查询单个学员跳转到修改页面
String id = req.getParameter("id");
Student stu = stuSer.getStuById(id);
req.setAttribute("stu", stu);
//查询出要修改的学员信息传到页面去展示以便修改
req.getRequestDispatcher("student/updateStudent.jsp").forward(req, resp);
return;
}
if("update".equals(type)){//修改学员信息
//1.获取页面的参数
String stuid = req.getParameter("stuid");
String stuname = req.getParameter("stuname");
String stusex = req.getParameter("stusex");
String stuage = req.getParameter("stuage");
String studate = req.getParameter("studate");
String stuprofess = req.getParameter("stuprofess"); //2.调用业务层修改数据
stuSer.updateStu(stuid, stuname, stusex, stuage, studate, stuprofess); //3.跳转查询页面 刷新页面数据
resp.sendRedirect("queryStu");
return;
}
}
}

  index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="height: 90px; width:1200px;float: left;">
<iframe src="student/top.jsp" style="width: 100%;border: 0"></iframe>
</div>
<div style="float: left;height: 700px;width:200px;">
<iframe src="student/left.jsp" style="border: 0" height="700px"></iframe>
</div>
<div style="float: left;height: 700px;width:1100px;">
<iframe name="main_" src="student/main.jsp" style="border: 0" height="700px" width="1100px"></iframe>
</div>
</body>
</html>

  top.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src="img/logo.gif" width="100%" height="90px">
</body>
</html>

  left.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<a href="student/addStudent.jsp" target="main_">新增学员信息</a>
<p><a href="queryStu" target="main_">查询学员信息</a></p>
</div>
</body>
</html>

  main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h1>欢迎使用学员管理系统</h1>
</div>
</body>
</html>

  list.jsp

<%@page import="com.pojo.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
</style>
</head>
<script type="text/javascript">
function del(id){
if(confirm("是否确定要删除该数据?")){
window.location.href="updateStu?type=del&id="+id;
}
}
</script> <%
List<Student> list = (List)request.getAttribute("list");
%>
<body>
<div align="center">
<table style="width: 500px;" border="1">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>生日</th>
<th>专业</th>
<th>操作</th>
</tr>
<%
if(list!=null)
for(Student stu:list){
%>
<tr>
<td><%=stu.getStuId() %></td>
<td><%=stu.getStuName() %></td>
<td><%=stu.getStuAge() %></td>
<td><%=stu.showStuSex() %></td>
<td><%=stu.showStuDate() %></td>
<td><%=stu.showStuProfess() %></td>
<td><a href="javascript:del('<%=stu.getStuId() %>')">删除</a>
<a href="updateStu?type=toupdate&id=<%=stu.getStuId() %>">修改</a></td>
</tr>
<%
}
%>
</table>
</div>
</body>
</html>

  addStudent.jsp

<%@page import="java.sql.PseudoColumnUsage"%>
<%@page import="com.util.Profession"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%
//用枚举来维护专业下拉列表
Profession[] ps = Profession.values();//拿到枚举中的所有类型
String mess = (String)request.getAttribute("mess");
if(mess==null){
mess= "";
}
%>
<body>
<div align="center">
<h1>新增学员信息</h1>
<form action="stu" method="post">
<table style="width: 500px;">
<tr>
<td align="right">学员姓名:</td>
<td><input name="stuname"></td>
</tr>
<tr>
<td align="right">学员性别:</td>
<td>
男<input checked="checked" type="radio" name="stusex" value="1">
女<input type="radio" name="stusex" value="2">
</td>
</tr>
<tr>
<td align="right">学员年龄:</td>
<td><input name="stuage"></td>
</tr>
<tr>
<td align="right">生日:</td>
<td><input type="date" name="studate"></td>
</tr>
<tr>
<td align="right">专业:</td>
<td>
<select name="stuprofess">
<%for(int i=0;i<ps.length;i++){
Profession p = ps[i];
%>
<option value="<%=p.getValue()%>"><%=p.getName() %></option>
<%} %>
</select>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"><span style="color: red"><%=mess %></span>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

  updateStudeng.java

<%@page import="com.pojo.Student"%>
<%@page import="com.util.Profession"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%
//用枚举来维护专业下拉列表
Profession[] ps = Profession.values();//拿到枚举中的所有类型
String mess = (String)request.getAttribute("mess");
if(mess==null){
mess= "";
} Student stu = (Student)request.getAttribute("stu");
%>
<body>
<div align="center">
<h1>修改学员信息</h1>
<form action="updateStu?type=update" method="post">
<input type="hidden" name="stuid" value="<%=stu.getStuId()%>">
<table style="width: 500px;">
<tr>
<td align="right">学员姓名:</td>
<td><input name="stuname" value="<%=stu.getStuName()%>"></td>
</tr>
<tr>
<td align="right">学员性别:</td>
<td>
<%
if("1".equals(stu.getStuSex())){ %>
男<input checked="checked" type="radio" name="stusex" value="1">
女<input type="radio" name="stusex" value="2">
<%
}else{
%>
男<input type="radio" name="stusex" value="1">
女<input checked="checked" type="radio" name="stusex" value="2">
<%
}
%>
</td>
</tr>
<tr>
<td align="right">学员年龄:</td>
<td><input name="stuage" value="<%=stu.getStuAge()%>"></td>
</tr>
<tr>
<td align="right">生日:</td>
<td><input type="date" name="studate" value="<%=stu.showStuDate()%>"></td>
</tr>
<tr>
<td align="right">专业:</td>
<td>
<select name="stuprofess">
<%for(int i=0;i<ps.length;i++){
Profession p = ps[i];
if(stu.getStuProfess().equals(p.getValue()+"")){ %>
<option value="<%=p.getValue()%>" selected="selected"><%=p.getName() %></option>
<%}else{%>
<option value="<%=p.getValue()%>"><%=p.getName() %></option>
<%} } %>
</select>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"><span style="color: red"><%=mess %></span>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
<%@page import="com.pojo.Student"%>
<%@page import="com.util.Profession"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%
//用枚举来维护专业下拉列表
Profession[] ps = Profession.values();//拿到枚举中的所有类型
String mess = (String)request.getAttribute("mess");
if(mess==null){
mess= "";
} Student stu = (Student)request.getAttribute("stu");
%>
<body>
<div align="center">
<h1>修改学员信息</h1>
<form action="updateStu?type=update" method="post">
<input type="hidden" name="stuid" value="<%=stu.getStuId()%>">
<table style="width: 500px;">
<tr>
<td align="right">学员姓名:</td>
<td><input name="stuname" value="<%=stu.getStuName()%>"></td>
</tr>
<tr>
<td align="right">学员性别:</td>
<td>
<%
if("1".equals(stu.getStuSex())){ %>
男<input checked="checked" type="radio" name="stusex" value="1">
女<input type="radio" name="stusex" value="2">
<%
}else{
%>
男<input type="radio" name="stusex" value="1">
女<input checked="checked" type="radio" name="stusex" value="2">
<%
}
%>
</td>
</tr>
<tr>
<td align="right">学员年龄:</td>
<td><input name="stuage" value="<%=stu.getStuAge()%>"></td>
</tr>
<tr>
<td align="right">生日:</td>
<td><input type="date" name="studate" value="<%=stu.showStuDate()%>"></td>
</tr>
<tr>
<td align="right">专业:</td>
<td>
<select name="stuprofess">
<%for(int i=0;i<ps.length;i++){
Profession p = ps[i];
if(stu.getStuProfess().equals(p.getValue()+"")){ %>
<option value="<%=p.getValue()%>" selected="selected"><%=p.getName() %></option>
<%}else{%>
<option value="<%=p.getValue()%>"><%=p.getName() %></option>
<%} } %>
</select>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"><span style="color: red"><%=mess %></span>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

  Profession.java

package com.util;

public enum Profession {
YUWEN(1),SHUXUE(2),YINGYU(3),SHENGWU(4),TIYU(5);
Profession(int v){
this.value = v;
}
Profession(){ }
String name;
int value;
public String getName() {
if(value==1){
return "语文";
}else if(value==2){
return "数学";
}else if(value==3){
return "英语";
}else if(value==4){
return "生物";
}else if(value==5){
return "体育";
}
return "";
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
} public Profession getProfessionByValue(int value){
for (Profession p : Profession.values()) {
if(p.getValue()==value){
return p;
}
}
return null;
} }

6-MVC结构简介的更多相关文章

  1. MVC结构简介

    本文编译自J2EE的相关文档.MVC(Model-View-Controller)应用程序结构被用来分析分布式应用程序的特征.这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易. ...

  2. Java的MVC模式简介

    Java的MVC模式简介 MVC(Model View Control)模型-视图-控制器 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件 ...

  3. MVC结构

    MVC结构是其它三个经典的设计模式的演变:观察者模式(Observer)(Pub/Sub), 策略模式(Strategy)和组合模式(Composite).   来自为知笔记(Wiz)

  4. ExtJS MVC结构

    概述 大型的应用在开发和运维上都存在着困难.应用功能的调整和开发人员的调动都会影响对项目的掌控.ExtJS4带来了一种新的应用结构.这种结构不止用于组织代码,也能有效的减少必要的代码量. 这次ExtJ ...

  5. ASP.NET MVC Boilerplate简介

    ASP.NET MVC Boilerplate简介 ASP.NET MVC Boilerplate是专业的ASP.NET MVC模版用来创建安全.快速.强壮和适应性强的Web应用或站点.它在微软默认M ...

  6. 关于MVC结构

    简单的记录,只是想记录一下现在对MVC的理解. MVC,即模型(MODEL),视图(VIEW),控制器(CONTROLLER) 模型是数据模型 视图是图形界面 控制器是在两个之间的控制部分,用来将数据 ...

  7. 老李分享:jvm结构简介 1

    老李分享:jvm结构简介     poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  8. 更加清楚理解mvc结构

      更加清楚理解mvc结构 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有问题一起学习欢迎留言.评论.

  9. discuz X论坛技术架构 MVC结构浅析

    摘自:http://yeyuan.iteye.com/blog/930727 PS:本人刚接触discuz论坛,php水平有限,当中的理解,如有不正确之处,欢迎指出 ----------------- ...

  10. Laravel 文件夹结构简介

    表 1.1:Laravel 文件夹结构简介 文件夹名称 简介 app 应用程序的业务逻辑代码存放文件夹 app/Console 存放自定义 Artisian 命令文件 app/Http/Control ...

随机推荐

  1. POJ 2942Knights of the Round Table(tarjan求点双+二分图染色)

    Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 13954   Accepted: 4673 Description Bein ...

  2. css不受高度限制实现文本超出隐藏并以省略号结束

    文本超出省略号显示代码: overflow: hidden; text-overflow:ellipsis; white-space: nowrap;width: 100px; /*宽度做好限制*/ ...

  3. C#基础(204)--对象初始化器,基本数据类型与引用数据类型特点总结,ref,out关键字的使用

    对象初始化器: 对象在创建过程中也可以使用对象初始化器完成“属性的初始化” Student stu =new Student(){ StudentId=, StudentName="张三&q ...

  4. Kotlin入门(27)文件读写操作

    Java的文件处理用到了io库java.io,该库虽然功能强大,但是与文件内容的交互还得通过输入输出流中转,致使文件读写操作颇为繁琐.因此,开发者通常得自己重新封装一个文件存取的工具类,以便在日常开发 ...

  5. 「Android」adb调试源码(针对dumpsys SurfceFlinger、trace.txt获取)

    首先对ADB作简单的阐述,接下来对adb shell dumpsys SurfaceFlinger服务的dump信息的查看.以及ANR问题如何获取trace文件并简单分析. -×*********** ...

  6. WangleEditor3提交数据(servlet-jsp)

    用servlet提交 WangEditor3编辑的内容,找了很多资料没发现,大多用的框架,今天终于解决了,记录一下. WangEditor3不支持放在textarea中,servlet是无法直接获取到 ...

  7. Linux下图形数据库Neo4j单机安装

    Neo4j数据库简介 Neo4j 是一个NoSQL的图形数据库(Graph Database).Neo4j使用图(graph)相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系.很多应 ...

  8. 光盘yum源搭建

    先修改基本的yum原源,使其不生效 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak 在修改媒介yum源使其生效 检验是否生效 ...

  9. Linux环境下执行java -jar xxx.jar命令如何让springboot项目在后台运行

    段落引用> 由于springboot内置了tomcat容器,我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序,但是当前ssh窗口被锁定或者按下ctr ...

  10. c/c++ 模板与STL小例子系列<三> traits

    c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...