一。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. react children

    children react 中,属性名是一一对应的,除了children. 对于一个组件来说,其this.props.children拿到的是什么呢???举个

  2. Linux禁止ping以及开启ping的方法

    ---恢复内容开始--- Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法P ...

  3. Javascript 对象 - 字符串对象

    字符串对象 字符串对象是JavaScript中比较常见的一种基本数据类型,他封装了一个字符串,并且提供了相应的方法.例如连接字符串.取字符串.分割字符串等.JavaScript中字符串是不可变的,原始 ...

  4. tornado 模板引擎

    在tornado的模板引擎中,有两种方式,UImethod与UImodule 自定义方法 在模板中调用方法: tornado:与Django一样使用{{}},但是对于for循环之类,Django以{% ...

  5. 微信小程序中如何获取for循环的item相关值到JS页面的问题

    今天小程序开发过程中,遇到了这个棘手的问题.由于我没有前端基础,只是知道一点儿基本的HTML标签,所以卡了好久,特此分享,望后来的你,可以有所收获. measure  step 1  *.WXML: ...

  6. leetcode-66.加一

    leetcode-66.加一 题意 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个 ...

  7. 转载:python生成以及打开json、csv和txt文件

    原文地址:https://blog.csdn.net/weixin_42555131/article/details/82012642 生成txt文件: mesg = "hello worl ...

  8. java基础(五) String性质深入解析

    引言   本文将讲解String的几个性质. 一.String的不可变性   对于初学者来说,很容易误认为String对象是可以改变的,特别是+链接时,对象似乎真的改变了.然而,String对象一经创 ...

  9. (后台)jxl.read.biff.BiffException: Unable to recognize OLE stream

    在excel中打开,另存成xls就可以.

  10. 微软的wp版remotedesktop第三方库居然用了openssl和苹果的东西

    微软的wp版remotedesktop居然用了openssl和苹果的东西,这真是想不通.不说openssl的漏洞问题,windows nt已经带了很全面的加解密api.