【原创】三分钟教你学会MVC框架——基于java web开发(2)
没想到我的上一篇博客有这么多人看,还有几位看完之后给我留言加油,不胜感激,备受鼓励,啥都别说了,继续系列文章之第二篇。(如果没看过我第一篇博客的朋友,可以到我的主页上先浏览完再看这篇文章,以免上下文对不上)
前面已经创建完项目了,那么下面一个步骤就是逐一新建在MVC框架中负责V(视图)、C(控制器)、M(模型)的对应文件。
第一步:创建项目(已完成)
第二步:新建负责V(视图)的JSP文件
在文件夹Web-Root下新建名为MyJsp.jsp的JSP文件,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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></head>
<!--对于初学者,上面的代码都可以暂时不必理会 -->
<body>
<form action="login.do" method="post"> <!--所提交的表单,action为"login.do",发出请求是post-->
<p>账号:<input type="text" name="id" /></p> <!--所输入的"账号"在提交后的标示是"id",下同 --> <p>密码:<input type="text" name="password" /> <p><input type="submit" value="登录"> </p> <!--表单提交按钮,显示名称为"登录"-->
</form>
</body>
</html>
在创建完之后,记得在web.xml中,将<welcome-file-list>节点中的内容改成上面这个文件的文件名MyJsp.jsp。(建议初学者做完这个步骤之后先运行一遍项目,看看效果如何,再看看有没有出错的地方)
如果运行的效果如下图,那应该就没什么问题了。
所谓的V(视图),通俗地来讲,就是用户所看到的内容。具体到这个java web项目,就是用户所看到的页面。
第三步:新建负责C(控制器)的Servlet
首先,要在src目录下新建一个包,包名为cc.MyMVC.servlet。然后,再在该包下新建一个servlet文件,名为MyServlet,代码如下:
package cc.MyMVC.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cc.MyMVC.POJO.MyPOJO; public class MyServlet extends HttpServlet {
public MyServlet() {
super();
} public void destroy() {
super.destroy();
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
} //以下为关键代码,初学者只需看此处,其他地方都可以暂且不管
public void doPost(HttpServletRequest request, HttpServletResponse response)//处理post请求的方法
throws ServletException, IOException {
boolean b=false;
MyPOJO myPOJO=new MyPOJO();//新建MyPOJO类的对象myPOJO //根据标示名获取JSP文件中表单所包含的参数
String id=request.getParameter("id");
String password=request.getParameter("password"); b=myPOJO.login(id,password);//使用模型对账号和密码进行验证,返回一个boolean类型的对象 if(b){ //如果验证结果为真,跳转至登录成功页面
response.sendRedirect("LoginSuccessful.jsp");
}
else { //如果验证结果为假,跳转至登录失败页面
response.sendRedirect("LoginFailed.jsp");
} } public void init() throws ServletException {
}
}
很不幸,第三步提到的模型(M)还没有创建,大家可以略过。大家可以看到,这个servlet中doGet方法里的代码都被删光光了,无法处理get请求。而这个对我们这个项目可以说是毫无影响,看到我们第二步创建的jsp文件,会发现表单提交的方式是post请求,所以,我们只需要实现doPost方法就好了,并且这个方法将处理提交的post请求。
控制器(C)的作用,就是对流程的控制,接收视图传来的参数,交由模型进行处理,再根据处理的结果决定下一步的操作。具体到本项目,servlet接收jsp传来的参数id和password,交由POJO处理,根据返回的boolean结果跳转到登录成功(失败)的页面。
第四步:修改web.xml文件,注册servlet并且建立action与servlet之间的映射。
前面说到,MyServlet.servlet会处理提交的请求,那么,为什么servlet会接收到这个请求呢?因为,我事先修改了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>
<servlet-name>MyServlet</servlet-name><!--定义servlet的名称 -->
<servlet-class>cc.MyMVC.servlet.MyServlet</servlet-class><!--对应servlet所属的文件名 -->
</servlet> <servlet-mapping> <!-- 建立servlet与action之间的映射 -->
<servlet-name>MyServlet</servlet-name> <!-- 映射中servlet的名称,已定义 -->
<url-pattern>/login.do</url-pattern> <!-- 所对应的action -->
</servlet-mapping>
<!--以上内容为新添加的代码,请重点关注--> <welcome-file-list> <!--welcome-file-list开头-->
<welcome-file>MyJsp.jsp</welcome-file> <!--设置欢迎页面,也就是项目启动后浏览器展示的第一个页面-->
</welcome-file-list> <!--welcome-file-list结尾--> </web-app>
看到关于action的那一行XML代码,是否想到了什么呢?没错,就是jsp表单中所定义的action。试着修改,看看会有什么效果?
第五步:新建M(模型)的POJO文件
POJO(Plain Ordinary Java Objects)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表。——《百度百科》
首先,在src文件下新建包,包名为cc.MyMVC.POJO。然后在该包下新建class文件,名为MyPOJO。
为了让读者,尤其是初学者更快地理解MVC,而不是将精力耗费在理解POJO以及数据库操作上面,我将POJO进行了尽可能的简化。代码如下:
package cc.MyMVC.POJO; public class MyPOJO {
public boolean login(String id,String password){
if(id.equals("admin")&&password.equals("123456")){//判断用户名以及密码是否与设定相符
return true;
}
else return false;
}
}
第六步:新建V(视图)中的另外两个JSP文件
在Web-Root文件夹下新建两个jsp文件,分别命名为LoginSuccessful.jsp以及LoginFailed.jsp。代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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>
</head>
<body>
Login Successful. <br>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
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>
</head> <body>
Login Failed. <br>
</body>
</html>
第七步:跑项目,看效果
(1)输入账号:admin,密码:123456 将会跳转到页面如下:
(2)输入错误的账号或错误的密码,将会跳转到页面如下:
直到这里,示例项目已经构建和演示完毕了。为了简化说明,狠心把许多重要但是对此次说明可能有妨碍的知识点给砍掉了。例如,web.xml为什么可以决定欢迎页,为什么可以进行servlet的配置;HTTP中的post请求以及get请求又是什么样的?诸如此类,不一而足。再提一下林信良老师的《Servlet&JSP学习笔记》,里面有更加详细的讲解,强烈推荐!
MVC框架,主要是对应用的分层,在web项目中尤其流行,算是最基础的分层模式。初学者可能还不了解MVC框架的作用,甚至会觉得这样做故作高深,最后像我当初那样,把所有的代码都挤到一个或几个jsp文件当中。其实,随着项目规模的逐渐庞大以及团队成员的增加,分层的思想不仅有助于分工合作,还增加了项目的伸缩性,降低了测试和debug的工作量和难度。
最后,一句话,实践最重要!
欢迎大家给我留言。刚开始写技术博客,很多东西都不懂,虚心接受各路大牛的批评建议。如果有不明白的地方,请给我留言,如果是我所能够回答的一定会尽快回复。我关注的领域主要是在java web开发、J2EE等方面,对linux、php、算法等方面都比较感兴趣,如果有想看的专题入门文章别的地方找不到,没问题,告诉我,如果合适的话,我来写!
【原创】三分钟教你学会MVC框架——基于java web开发(2)的更多相关文章
- 【原创】三分钟教你学会MVC框架——基于java web开发(1)
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法. ...
- 10分钟 教你学会Linux/Unix下的vi文本编辑器
10分钟 教你学会Linux/Unix下的vi文本编辑器 vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器.看了不少关于vi的资料,终于得到这个总结.不敢独享,和你们共享. 首先,记住v ...
- Java Web开发中MVC设计模式简介
一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...
- MVC已经是现代Web开发中的一个很重要的部分,下面介绍一下Spring MVC的一些使用心得。
MVC已经是现代Web开发中的一个很重要的部分,下面介绍一下Spring MVC的一些使用心得. 之前的项目比较简单,多是用JSP .Servlet + JDBC 直接搞定,在项目中尝试用 Strut ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- 【Java Web开发学习】Spring MVC异常统一处理
[Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...
- Spring MVC 学习笔记1 - First Helloworld by Eclipse【& - java web 开发Tips集锦】
Spring MVC 学习笔记1 - First Helloworld by Eclipse reference:http://www.gontu.org 1. 下载 Spring freamwork ...
- 【Java Web开发学习】Spring MVC 使用HTTP信息转换器
[Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...
- 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener
[Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...
随机推荐
- 【转】Crontab定时任务配置
原文出处:http://www.cnblogs.com/kerrycode/p/3238346.html CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读 ...
- Linux服务器上安装织梦CMS
安装篇 第一步:配置防火墙(默认情况下,端口80和3306是拒绝访问的,在防火墙上进行配置): vi /etc/sysconfig/iptables(在"COMMIT"的上一行加上 ...
- SQL 列转行的实现
--列转行,逗号拼接指定列的值Oracle中写法:select wmsys.wm_concat(Field1) from TableASQL Server中写法:SELECT STUFF(( SELE ...
- Hibernate中的HQL查询与缓存机制
HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...
- 自定义滚动条——控制div的大小和透明度
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...
- VMware克隆虚拟机,克隆机网卡启动不了解决方案
Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interfac ...
- npm下载速度太慢
因为墙的原因导致下载速度过慢,解决方式就是使用国内镜像 使用淘宝的镜像 npm config set registry="http://registry.npm.taobao.org/&qu ...
- 【算法与数据结构】冒泡、插入、归并、堆排序、快速排序的Java实现代码
详细过程就不表了,看代码吧 import java.util.Arrays; public class Sort { static int swapTimes=0; public static voi ...
- ibatis 使用 in 查询的几种XML写法
原文地址:http://blog.csdn.net/dracotianlong/article/details/35303593 这里摘抄学习 1.传入参数是数组 <select id=&quo ...
- 在Windows 8.1及IE 11中如何使用HttpWatch
提示:HttpWatch现已更新至v9.1.8,HttpWatch v9.1及以上的版本现都已支持Windows 7,8,8.1和IE 11. 如果你的HttpWatch专业版授权秘钥允许进入vers ...