MVC系列教材 (一)

您所在的位置:网站首页 短板教程 MVC系列教材 (一)

MVC系列教材 (一)

2024-02-28 19:36| 来源: 网络整理| 查看: 265

MVC系列教材 (二)- 结合Servlet和JSP 实现查询功能 登录后可下载 工具版本兼容问题 MVC是一种分层的设计模式,本章节从Servlet和JSP的局限性谈起,慢慢引入MVC的概念。 纠

步骤 1 : 仅仅使用Servlet的短处    步骤 2 : 仅仅使用JSP的短处    步骤 3 : 结合Servlet和JSP    步骤 4 : MVC设计模式   

步骤 1 : 仅仅使用Servlet的短处 edit 顶 折 纠 问 请先登录 在Servlet的章节中,使用了编辑Hero的Servlet根据浏览器提交的id,通过HeroDAO找到对应的Hero,然后在Servlet中组织html显示出来。

可以看到这个Servlet不仅要准备数据,还要准备html。 尤其是准备html,可读性非常差,维护起来也很麻烦

package 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 bean.Hero; import dao.HeroDAO; public class HeroEditServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); Hero hero = new HeroDAO().get(id); StringBuffer format = new StringBuffer(); response.setContentType("text/html; "); format.append(""); format.append(""); format.append("名字 : "); format.append("血量 : "); format.append("伤害: "); format.append(""); format.append(""); format.append(""); String html = String.format(format.toString(), hero.getName(), hero.getHp(), hero.getDamage(), hero.getId()); response.getWriter().write(html); } } 代码行数较多,请点击查看 package 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 bean.Hero; import dao.HeroDAO; public class HeroEditServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); Hero hero = new HeroDAO().get(id); StringBuffer format = new StringBuffer(); response.setContentType("text/html; charset=UTF-8"); format.append(""); format.append(""); format.append("名字 : "); format.append("血量 : "); format.append("伤害: "); format.append(""); format.append(""); format.append(""); String html = String.format(format.toString(), hero.getName(), hero.getHp(), hero.getDamage(), hero.getId()); response.getWriter().write(html); } } 步骤 2 : 仅仅使用JSP的短处 edit 顶 折 纠 问 请先登录 因为在Servlet中编写html有这样的短板,所以索性直接在JSP中开发编辑Hero这个功能

这时会发现,虽然编写html方便了,但是写java代码不如在Servlet中那么方便

名字 : 血量 : 伤害: 代码行数较多,请点击查看 名字 : 血量 : 伤害: 步骤 3 : 结合Servlet和JSP edit 顶 折 纠 问 请先登录 既然Servlet和JSP都有各自的优势和短板,那么为什么不结合起来扬长避短呢?HeroEditServlet:只用来从数据库中查询Hero对象,然后跳转到JSP页面request.setAttribute("hero", hero);在request中设置herorequest.getRequestDispatcher("editHero.jsp").forward(request, response);服务端跳转到editHero.jsp,因为是服务端跳转,都属于同一次请求,所以可以在editHero.jsp通过request取出来editHero.jsp: 不做查询数据库的事情,直接获取从HeroEditServlet传过来的Hero对象,通过EL表达式把request中的hero显示出来 HeroEditServlet.java editHero.jsp package 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 bean.Hero; import dao.HeroDAO; public class HeroEditServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); Hero hero = new HeroDAO().get(id); request.setAttribute("hero", hero); request.getRequestDispatcher("editHero.jsp").forward(request, response); } } 代码行数较多,请点击查看 package 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 bean.Hero; import dao.HeroDAO; public class HeroEditServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); Hero hero = new HeroDAO().get(id); request.setAttribute("hero", hero); request.getRequestDispatcher("editHero.jsp").forward(request, response); } } 名字 : 血量 : 伤害: 代码行数较多,请点击查看 名字 : 血量 : 伤害: 步骤 4 : MVC设计模式 edit 顶 折 纠 问 请先登录 上述例子中结合Serlvet和JSP进行数据的显示,就是一种MVC的思想。

M 代表 模型(Model)V 代表 视图(View) C 代表 控制器(controller)

模型是什么呢? 模型就是数据,就是dao,bean

视图是什么呢? 就是网页, JSP,用来展示模型中的数据

控制器是什么? 控制器用来把不同的数据,显示在不同的视图上。 在这个例子的,Servlet就是充当控制器的角色,把Hero对象,显示在JSP上。

控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上。

MVC设计模式 文件内容比较器

把你的代码复制到下面区域。 如果在线比较不好用,请使用客户端比较软件: diffmerge 下载和使用教程

复制代码

代码高亮插件双击即可选中,不过部分同学反应,通过代码高亮插件复制的代码无法在IDEA里正常显示,这里提供TEXTAREA的方式,方便复制,谢谢

分享连接

分享如下连接可增加积分,获取50%佣金 推

如果不方便发连接(如贴吧),可以使用如下由连接转换为的二维码. 鼠标在图片上右键,然后另存为即可 警告: 请勿使用挂机软件刷积分,刷积分不会导致任何注册量,很容易被识别。 一旦发现刷积分,即封号处理,请勿做吃力不讨好之事。 做练习的正确姿势 1. 自行完成练习 根据练习目标尽量自己实现代码效果,期间会碰到疑问,难题,和自己不懂的地方,这些都是必要的过程 2. 带着疑问查看答案 完成过程中,碰到无法解决的问题,带着疑问,查看答案,分析答案的解决思路 3. 查看答案讲解视频 依然有不明白的地方,点开视频讲解,带着疑问,听视频讲解有问题的部分 4. 再做一遍 理解后,再从头做一遍,把有疑问的地方都捋清楚 5. 总结 最后再总结一遍,总结思路,总结解决办法,以后遇到类似的问题,怎么处理 MVC系列教材 (一)- 教程-总结笔记 把这时的想法,思路,研究都记录下来,等全部学完了,再回过头来巩固和理解,学习效果就会很好,知识点掌握得也牢固. 点击查看我的笔记 总结 代码 保存中预计需要秒 保存完成 保存失败,请联系站长 收藏本知识点

有的同学收藏是为了进行标记,过段时间再来看不明白的地方,在此处可以记录哪里不明白. 单纯收藏的, 直接点击提交即可。

点击查看我的收藏 错误纠正专用

站长比较马虎,难免出现错别字,如果发现哪里文字有误,请提交错误,站长会尽快修改,谢谢

MVC系列教材 (二)- 结合Servlet和JSP 实现查询功能 HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。

问答区域     删除提问已经提交成功,正在审核, 谢谢. 回复提问已经提交成功,正在审核, 谢谢. 2023-12-15 关于站长想要表达中缺少的部分。想要明白站长说的意思必须要看的地方。 Shu_Enryu

关于 J2EE-MVC-Hello MVC 的提问

问题 截图 代码 异常 如题 这节课需要看站长在之前的Servlet课里的CRUD里面的内容。 那里面有HeroListServlet, HeroEditServlet, HeroUpdateServlet。把这三个Servlet做完,并且配置好 web.xml文件。 然后站长写的HeroDAO里的get()方法里有个小错误,导致永远都取不出来hero的属性。把站长写的 Hero hero = null; 换成 Hero hero = new Hero(); 后把从DAO中取到的值一个一个赋值给这个Hero对象就好。代码贴上了 然后再把这节课里的,HeroEditServlet改成这节课的。再写一个editHero.jsp。就完事了。 //站长写的 public Hero get(int id) { Hero hero = null; try (Connection c = getConnection(); Statement s = c.createStatement();) { String sql = "select * from hero where id = " + id; ResultSet rs = s.executeQuery(sql); if (rs.next()) { hero = new Hero(); String name = rs.getString(2); float hp = rs.getFloat("hp"); int damage = rs.getInt(4); hero.name = name; hero.hp = hp; hero.damage = damage; hero.id = id; } } catch (SQLException e) { e.printStackTrace(); } return hero; } //可以用的(即改良后的) public Hero get(int id) { Hero h = new Hero(); String sql = "select id, name, hp, damage from hero where id=?"; try(Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql)) { ps.setInt(1, id); ResultSet rs = ps.executeQuery(); if(rs.next()) { int aid = rs.getInt(1); String name = rs.getString(2); float hp = rs.getFloat(3); int damage = rs.getInt(4); h.setName(name); h.setHp(hp); h.setDamage(damage); h.setId(aid); } } catch (SQLException e) { e.printStackTrace(); } return h; }

请先登陆 回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢

删除提问已经提交成功,正在审核, 谢谢. 回复提问已经提交成功,正在审核, 谢谢. 2020-10-04 hello MVC这里editHero.jsp是不是单纯为了使用el表达式取值? CJJJ

关于 J2EE-MVC-Hello MVC 的提问 使用HTML的话有没有办法获取hero的值呢?

3 个答案 VOID1 跳转到问题位置 答案时间:2021-04-07 获得hero还是用jsp的request吧,servlet转发的request是同一个 492554146 跳转到问题位置 答案时间:2020-10-25 @弦断花落丿 表示怀疑,请问html哪里来的request??? 弦断花落丿 跳转到问题位置 答案时间:2020-10-23 兄弟html不具备动态网页的能力,除非用JavaScript,你把数据转成JSON就行,之后用JavaScript遍历,好沙雕 var data = ;

请先登陆 回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢 删除提问已经提交成功,正在审核, 谢谢. 回复提问已经提交成功,正在审核, 谢谢. 2020-07-12 无法显示数据 lin1

关于 J2EE-MVC-Hello MVC 的提问

问题 截图 代码 异常 访问listHero显示如图,数据库连接成功,也有数据 加载中

3 个答案 ecolour 跳转到问题位置 答案时间:2020-10-11 兄弟们,不能直接访问xxx.JSP,必须用用映射去打开页面。web.xml里面配置的映射名称地址是什么就用什么访问,就和php的框架路由类似,JSP文件只是用作处理数据显示而已。 newbeeee 跳转到问题位置 答案时间:2020-09-28 你没有setAttribute sparksun007 跳转到问题位置 答案时间:2020-09-21 把代码贴出来啊,不然怎么找错。。。

请先登陆 回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢

删除提问已经提交成功,正在审核, 谢谢. 回复提问已经提交成功,正在审核, 谢谢. 2020-02-02 流程不懂 那个我

关于 J2EE-MVC-Hello MVC 的提问

问题 截图 代码 异常 HeroEditServlet 里的id是哪传进来的?

6 个答案 newbeeee 跳转到问题位置 答案时间:2020-09-28 HeroListSerlvlet 的那个edit的超链接啊 就是连接到了HeroEditServlet 超链接后面的?id=%d 和下面的hero.getId() 就是传的id的值啊 每天都要学Java啊 跳转到问题位置 答案时间:2020-09-09 listHero.jsp 中有一行 修改 hero 是 heros 遍历来的,heros 在 HeroListServlet 中,通过 HeroDAO 从数据库取出,并且将这个 heros 设置在 request 域中。在 listHero.jsp 中就可以通过 request 域取出 heros 。${hero.id} 这是 EL 写法。 点击修改按钮,就会发送请求 editHero?id=xx 此时 HeroEditServlet 就会带有一个值是 xx 的参数 id nicococococ 跳转到问题位置 答案时间:2020-02-15 是在web 服务器内(既tomcat 又叫web容器) -web server context 里 利用管道传送,这需要看tomcat 源码。 浮生一日 跳转到问题位置 答案时间:2020-02-11 说错了,不是查询是修改功能 浮生一日 跳转到问题位置 答案时间:2020-02-11 老师这个例子是查询功能,id是从前端jsp页面request域中获取的,只是老师没把那个页面贴上来. 第二个问题,你问这问题应该是没有理解jsp的作用域.没有谁调用了servlet,这个servlet的作用就是获取前端request域中的id,然后调用Dao的方法从数据库根据id查询hero,并把查询到的结果,封装到hero对象中,然后存放到request域中,通过forward请求转发到editHero.jsp页面,然后jsp页面就能从request域中得到hero对象并显示出来. 那个我 跳转到问题位置 答案时间:2020-02-02 还有哪一步调用了HeroEditServlet?

请先登陆 回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢

删除提问已经提交成功,正在审核, 谢谢. 回复提问已经提交成功,正在审核, 谢谢. 2019-07-01 楼主,最后一个例子是否有个提交ID的页面没放上来?edithero.jsp是用来显示结果的会盖掉提交ID页面呢? SamS

关于 J2EE-MVC-Hello MVC 的提问 楼主,最后一个例子是否有个提交ID的页面没放上来?edithero.jsp是用来显示结果的会盖掉提交ID页面呢?

2 个答案 xiaobu 跳转到问题位置 答案时间:2020-02-02 editHero.jsp存在的有id参数,只不过对应的属性为“hidden”: 代码超过 5行,点击查看 名字 : 血量 : 伤害: whiteda 跳转到问题位置 答案时间:2019-12-04 不用提交id的界面了,更新按钮,通过post请求的方式,找到路径地址updateHero,request.getRequestDispatcher("editHero.jsp").forward(request, response); response对象响应结果,页面通过EL表达式获取值

请先登陆 回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢

提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 4 条以前的提问,请 点击查看

提问之前请登陆 提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3