MVC框架——基于java web简单开发(作业)
我的JSP作业要求:
练习要求如下:
1.按照*.bmp做好客户端login.jsp文件
2.在客户端login.jsp文件中用javascript实现登陆验证,要求非空字符,非空对象等验证。
3.在服务器端口checkLogin.jsp文件中进行分类执行
1)学生用户:用户名为:本人姓名,密码为:本人学号,登陆成功后用response跳转到student.jsp页,输出个人信息。提醒:1.session应用;2.注意中文乱码处理。
2)管理员用户:用户名为:admin,密码为:admin,登陆成功后用jsp:forward跳转到student.jsp页,输出目前有多少人登陆服务器页面。提醒:application应用。
3)来宾账户:用户名为:guest,密码为:guest,登陆成功后输出“我来逛一圈,马上走!”。用超级链接跳转到客户端页。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法。
哎呀,这些对我这个新手只能百度吧。
闲话少说了,下面开始手把手记录一下如何搭建MVC框架,作为例子,展示的是一个最(超级)简单的登录流程。
- 第一步:创建项目
创建项目的工具我推荐MyEclipse,毕竟MyEclipse可以加载强大的插件,缺点就是吃资源->创建项目完毕之后,我们可以立刻启动项目。

启动项目完毕之后,MyEclipse自带的浏览器会向我们展示这么一个简单到不能再简单的页面

看到项目的文件结构,不难在WebRoot文件夹下找到名为index.jsp这一文件。浏览器所展示的页面,就是此文件经过处理过后的结果。
点开之后,修改<body></body>之间的内容,例如改成This is My MVC project.。重新启动项目后,告诉我你看到了什么。
好了,解决完页面来源问题之后,接下来就是解答为什么会展示这么一个页面的问题了。我们点WebRoot文件夹节点,再点击WEB-INF文件夹节点,找到web.xml文件并且双击打开,然后看看里面的内容
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
看到第7行的代码中的index.jsp,是不是觉得似曾相识呢?没错,它就是我们刚才一直在讨论的那个页面。这里设置的就是项目启动后浏览器展示的第一个页面,以后我们可以试着再WebRoot目录下添加一个HTML文件或JSP文件,然后将这里的index.jsp改成所添加的文件名,重新启动项目,你就会发现哪里就改成你的默认首页页面。web.xml文件,用处还不止一点,因为我自己也不怎么懂!哈哈哈
前面已经创建完项目了,那么下面一个步骤就是逐一新建在MVC框架中负责V(视图)、C(控制器)、M(模型)的对应文件。
- 第二步:新建负责V(视图)的JSP文件
在文件夹Web-Root下新建名为login.jsp的JSP文件,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="404.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>统一身份认证平台</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link href="login.css" type="text/css" rel="stylesheet">
<script type="text/javascript">
function checkLoginForm() {
var username = document.getElementById("username");
var password = document.getElementById("password");
if(username.value == "" || password.value == "") {
alert("用户名或密码不能为空");
return false;
}
}
function toUpperCase(obj)
{
obj.value = obj.value.toLowerCase();
}
function resetLogin(){
var username = document.getElementById("username");
var password = document.getElementById("password");
if(username.value!=null || username.value!="") {
username.value="";
}
if(password.value!=null || password.value!="") {
password.value="";
}
}
</script>
</head>
<body>
<div id="pagebody">
<div id="loginbox">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="imgs/login-top.gif" width="262" height="34"></td>
</tr>
<tr>
<td>
<form id="fm1" name="fm1" action="MyServlet/checkLogin" method="post" onsubmit="return checkLoginForm()">
<div class="box" id="login">
<table border="0" cellspacing="0" cellpadding="0" width="92%" align="center">
<tbody>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td align="right">用户名:</td>
<td>
<input id="username" name="username" class="username" type="text" placeholder="请输入你的账号" size="25" onkeyup="toUpperCase(this)" />
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td align="right">密 码:</td>
<td>
<input id="password" name="password" class="password" type="password" placeholder="请输入你的密码" size="25" onkeyup="toUpperCase(this)" />
</td>
</tr>
<tr>
<td colspan="2">
<table border="0" cellspacing="6" cellpadding="5" width="100%">
<tbody>
<tr>
<td align="right"><input alt="[按钮]" src="imgs/login-buttom.gif" type="image" name="imageField" /></td>
<td>
<a href="login.jsp"><img border="0" src="imgs/login-button2.gif" width="93" height="30" onclick="resetLogin()"></a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25" valign="bottom" colspan="2" align="left" style="padding-left:30px;"><a target="_blank" href="LoginFailed.jsp">
<font color="#ff0000"><strong>疑难问题解答</strong></font>
</a> <a target="_blank" href="LoginFailed.jsp">忘记密码?</a>
<br>
<a target="_blank" href="LoginFailed.jsp">关于身份认证</a>
</td>
</tr>
<tr>
<td colspan="2"><!-- <div align="center"><img border="0" src="imgs/line.gif" width="227" height="2"></div>*/-->
<div class="box-1"></div>
</td>
</tr>
<tr>
<td colspan="2" class="xx"><img border="0" src="imgs/quan.gif" width="18" height="15">河源职业技术学院信息中心</td>
</tr>
</tbody>
</table>
</div>
</form>
</td>
</tr>
<tr>
<td><img src="imgs/login-foot.gif" width="262" height="10"></td>
</tr>
</tbody>
</table>
</div>
<div id="info">
<ul>
<li>这是校园的内部门户站点。您可以登录校园信息服务综合平台,通过同一个账户名/密码。
<font color="#ff0000">学生帐号为学号,初始密码为身份证号后六位或888888;教工帐号为新六位工号,初始密码为身份证号后六位。如果您的身份证号最后一位是字母,请尝试用大写的字母登录(具体情况以人事档案中大小写为准)。
</font>
访问校园网的各种网络应用系统和信息资源。
</li>
<li>统一身份认证是当用户进入信息门户系统时对用户的统一认证,教职工和学生只用一个帐号,登录一次门户,就可以进入所有有权限访问的应用系统,不必重复登录。
</li>
<li>如有问题请联系:3800078</li>
<li>网络报障电话:3800202</li>
</ul>
</div>
</div>
</body>
</html>
提交的表单,action为”MyServlet/checkLogin”,发出请求是post,具体请看代码
下面是login.css代码:
@charset "utf-8";
body {
font:12px Tahoma;
margin:0px;
background:#eaeaea;
}
a:link,a:visited {
font-size:12px;
text-decoration:none;
color:#000;
}
.xx{
font-size:12px;
padding-left: 10px;
}
a:hover{
color: #3399cc;
text-decoration: underline;
}
.en{
font-family:Verdana;
font-size:10px;
}
a.yellowlink:link,a.yellowlink:visited,.yellow {
color: #ff6600;
}
a.yellowlink:hover{
color: #3399cc;
text-decoration: underline;
}
.username,.password{
width:176px;
font-size:14px;
height:20px;
line-height: 20px;
}
.input{
border: 1px solid #cccccc;
height: 18px;
padding: 3px 2px 0px 2px;
font: 12px Verdana;
}
#pagebody {
width:1024px;
height: 550px;
margin:0px auto;
background: url(imgs/bg.jpg) top no-repeat;
background-color: #fff;
}
#loginbox {
position: relative;
overflow:hidden;
float:left;
clear:left;
top:265px;
left: 60px;
width:262px;
background: url(../imgs/login-bg.gif) repeat-y;
border:10px solid #f0ffff;
}
.box-1{
border:1px solid #f0ffff;
padding-top: 10px;
}
#info {
position: relative;
right:80px;
top: 245px;
width:560px;
float:right;
overflow:hidden;
padding-top:28px;
clear:right;
}
#info ul {
margin: 5px 5px 10px 20px;
list-style:url(../imgs/icon.gif) disc;
}
#info ul li{
font:14px/22px sans-serif;
padding: 2px;
list-style-image:url(../imgs/star.png);
}
#Footer {
margin:0px auto;
display: block;
width: 1024px;
height:80px;
background: #ffffff url(../imgs/footer.jpg) repeat-x;
background-color: #fff;
color: #666;
}
#footer tr td {
background:#FFFFFF;
}
这个文件的文件名login.jsp。(建议初学者做完这个步骤之后先运行一遍项目,看看效果如何,再看看有没有出错的地方)
如果运行的效果如下图,那应该就没什么问题了。

所谓的V(视图),通俗地来讲,就是用户所看到的内容。具体到这个Java web项目,就是用户所看到的页面。
- 第三步:新建负责C(控制器)的Servlet
首先,要在src目录下新建一个包,包名为MyServlet然后,再在该包下新建一个servlet文件,名为checkLogin,代码如下:
package MyServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import Uers.user;
public class checkLogin extends HttpServlet {
public checkLogin(){
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
boolean s=false;
boolean a=false;
boolean g=false;
request.setCharacterEncoding("utf-8");
user user = new user();
String username=request.getParameter("username");
String password=request.getParameter("password");
s=user.student(username, password);//使用模型对账号和密码进行验证,返回一个boolean类型的对象
a=user.admin(username, password);
g=user.guest(username, password);
if(s){ //如果验证结果为真,跳转至登录成功页面
response.sendRedirect("../student.jsp");
HttpSession session = request.getSession();
session.setAttribute("username",request.getParameter("username"));
session.setAttribute("password",request.getParameter("password"));
}else if(a){ //如果验证结果为真,跳转至登录成功页面
response.sendRedirect("../admin.jsp");
HttpSession session = request.getSession();
session.setAttribute("username",request.getParameter("username"));
}else if(g){ //如果验证结果为真,跳转至登录成功页面
response.sendRedirect("../guest.jsp");
}else{
// response.sendRedirect("../LoginFailed.jsp");
response.sendRedirect("../404.jsp");
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
控制器(C)的作用,就是对流程的控制,接收视图传来的参数,交由模型进行处理,再根据处理的结果决定下一步的操作。具体到本项目,servlet接收jsp传来的参数username和password,交由user处理,根据返回的boolean结果跳转到登录成功(失败)的页面。
- 第四步:修改web.xml文件,注册servlet并且建立action与servlet之间的映射。
前面说到,MyServlet.checkLogin会处理提交的请求,那么,为什么checkLogin会接收到这个请求呢?因为,我事先修改了web.xml文件,在里面添加了相应的代码。web.xml的完整代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>login</servlet-name>
<servlet-class>MyServlet.login</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>checkLogin</servlet-name>
<servlet-class>MyServlet.checkLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/MyServlet/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>checkLogin</servlet-name>
<url-pattern>/MyServlet/checkLogin</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
看到关于action的那一行XML代码,是否想到了什么呢?没错,就是jsp表单中所定义的action。试着修改,看看会有什么效果?
- 第五步:新建M(模型)的user文件
首先,在src文件下新建包,包名为Uers。然后在该包下新建class文件,名为user。
为了让读者,尤其是初学者更快地理解MVC,而不是将精力耗费在理解user以及数据库操作上面,我将user进行了尽可能的简化。代码如下:
package Uers;
public class user {
public boolean student(String username,String password){
if(username.equals("郭良俊")&&password.equals("2015122297")){//判断用户名以及密码是否与设定相符
return true;
}else {
return false;
}
}
public boolean admin(String username,String password){
if(username.equals("admin")&&password.equals("admin")){//判断用户名以及密码是否与设定相符
return true;
}else {
return false;
}
}
public boolean guest(String username,String password){
if(username.equals("guest")&&password.equals("guest")){//判断用户名以及密码是否与设定相符
return true;
}else {
return false;
}
}
}
- 第六步:新建V(视图)中的另外几个JSP文件
代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="404.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'admin.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<!-- JSP声明 -->
<%! int i;
%>
<!-- 将i值自加后放入application的变量内 -->
<%application.setAttribute("counter",String.valueOf(++i));%>
<%--String username = (String)session.getAttribute("username"); --%>
<%-- <%=session.getAttribute("username") %>欢迎回来!</p>--%>
<p>利用EL表达式:${sessionScope.username}欢迎回来!</p>
<p>目前有<%=application.getAttribute("counter") %>人登陆服务器</p>
<jsp:forward page="student.jsp" />
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="404.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'guest.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h2>我来逛一圈,马上走!</h2>
<a href="login.jsp">点击回到首页</a>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="404.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'LoginFailed.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h2>登录失败!请确认账号密码</h2>
<p>学生用户:用户名为:本人姓名,密码为:本人学号</p>
<p>管理员用户:用户名为:admin,密码为:admin</p>
<p>来宾账户:用户名为:guest,密码为:guest</p>
<a href="login.jsp">点击回到首页</a>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="404.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'student.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String username =(String)session.getAttribute("username");
String password =(String)session.getAttribute("password");
%>
<%-- 下面是stundent的任务--%>
<p>我叫:<%=username %></p>
<p>我的学号:<%=password %></p>
<%-- 下面是admin的任务--%>
<%=session.getAttribute("username") %>欢迎回来!</p>
<p>利用EL表达式:${sessionScope.username}欢迎回来!</p>
<p>目前有<%=application.getAttribute("counter") %>人登陆服务器</p>
<p>利用EL表达式:目前有${applicationScope.counter} 人登陆服务器</p>
<a href="login.jsp">首页</a>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>这不是404页面</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link href="css/style.css" type="text/css" rel="stylesheet">
<script type="text/javascript">
var num=30;
function redirect(){
num--;
document.getElementById("num").innerHTML=num;
if(num<0){
document.getElementById("num").innerHTML=0;
//location.href="https://199604.com";
document.location="login.jsp";
}
}
setInterval("redirect()", 1000);
</script>
</head>
<body>
<div class="whole">
<img src="imgs/back.jpg" />
<div class="mask"></div>
</div>
<div class="b">
<p>
登录失败!<br />
如有疑问请咨询管理员<br />
I<br />
v<br />
我一直问我自己我以后能做什么。<br />
事实上我根本不需要,我只需要静静等待着。<br />
因为,生活,一半是回忆、一半时继续。<br />
<span id="num"></span>秒后自动跳转到主页
</p>
<a class="new" href="https://199604.com">Go to 记忆角落</a>
<a class="old" href="login.jsp">首页</a>
</div>
</body>
</html>
- 第七步:跑项目,看效果
(1)输入账号:admin,密码:admin 将会跳转到页面如下:

(2)输入错误的账号或错误的密码,将会跳转到页面如下:

其他的功能你可以去尝试!
下面是整个MVC的代码还有素材
这是小菜鸟半小时的作品,就是一些效果那些老师没有要求所以我就简单的接收数据就OK了。这个MVC是无数据库版的,嗯尽情的喷我挑转页面没有CSS和HTML且都很垃圾!其实我真的挺垃圾的!好了我现在就洗洗睡了!晚安了我的基友们!
棒棒哒?( ‘ω’ )?
装作看得懂的样子来评论下
又长又臭-
雄哥对不起,我又写了一些辣鸡-
不过深的我心-
我已经在努力的不让自己颓废- 但是还是没有方向感去学!
那跟我一起搬砖吧?
福利如何,一个月多少钱、多少天假期、多少个月转正、买五险一金吗?
么有钱的,当做是锻炼身体。