本系列博客内容为:做DRP系统中的常用功能。

该项目采用MVC架构

  1. C(Controller)控制器,主要职责;1、取得表单参数;2、调用业务逻辑;3、转向页面
  2. M(Model)模型,主要职责:1、业务逻辑;2、保存数据的状态
  3. V(View)视图,主要职责:显示

优点:职责清楚,较适合大型项目架构。分层主要是为了好管理,能更好的适应需求的变化,能够更好的人员分配。

缺点:不适合小型项目开发(主要是层次太多)

UML图如下所示:

界面如下:

web.xml:配置信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID">
<servlet>
<servlet-name>ShowModifyItemServlet</servlet-name>
<servlet-class>com.bjpowernode.drp.basedata.web.ShowModifyItemServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>ShowModifyItemServlet</servlet-name>
<url-pattern>/servlet/item/ShowModifyItemServlet</url-pattern>
</servlet-mapping>
</web-app>

V(View)视图:item_maint.jsp,负责显示所有的物料信息。并控制多选框只能选中一个

 <%@ page language="java" contentType="text/html; charset=GB18030"  pageEncoding="GB18030"%>

 <%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
 <html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>物料维护</title>
<script type="text/javascript"> function modifyItem() {
var selectFlags = document.getElementsByName("selectFlag");
var count = 0;
var j = 0;
for (var i=0; i<selectFlags.length; i++) {
if (selectFlags[i].checked) {
j = i;
count++;
}
}
if (count == 0) {
alert("请选择需要修改的物料!");
return;
}
if (count > 1) {
alert("一次只能修改一个物料!");
return;
}
           //j页面转至需要提交的页面,并提交多选框选中的选项的id
window.self.location = "<%=basePath%>servlet/item/ShowModifyItemServlet?itemNo=" + selectFlags[j].value;
} </script>
</head> <body class="body1">
<input type="checkbox" name="selectFlag" class="checkbox1" value="<%=item.getItemNo()%>">
<input name="btnModify" class="button1" type="button" id="btnModify" value="修改" onClick="modifyItem()">

C(Controller)控制器:ShowModifyItemServlet.java显示选中的物料详细信息。

package com.bjpowernode.drp.basedata.web;

import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 显示修改物料页面Servlet
* @author Administrator
*
*/
public class ShowModifyItemServlet extends HttpServlet { private ItemManager itemManager; private DataDictManager dataDictManager; @Override
public void init() throws ServletException {
//初始化时,自动new一个成员对象
itemManager = new ItemManagerImpl();
dataDictManager = DataDictManager.getInstance();
} @Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //取得物料代码
String itemNo = request.getParameter("itemNo");
//如果获取的是字符串数组,则使用以下形式
         //String itemNos=request.getParameterValues("selectFlag");
//根据物料代码查询
Item item = itemManager.findItemById(itemNo); //将物料信息设置到request里
request.setAttribute("item", item); //取得物料类别列表
List itemCategoryList = dataDictManager.findItemCategoryList(); //取得物料单位列表
List itemUnitList = dataDictManager.findItemUnitList(); request.setAttribute("itemCategoryList", itemCategoryList);
request.setAttribute("itemUnitList", itemUnitList); //转发
request.getRequestDispatcher("/basedata/item_modify.jsp").forward(request, response);
} }

V(View)视图:item_modify.jsp,修改物料详细信息。 

 <%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%>

 <%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/"; Item item = (Item)request.getAttribute("item");
List itemCategoryList = (List)request.getAttribute("itemCategoryList");
List itemUnitList = (List)request.getAttribute("itemUnitList");
%>
<html>
<head>
<base href="<%=basePath %>">
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<script type="text/javascript">
        <!--利用submit提交表单时,限定物料名称不能为空-->
function validateForm(form) {
if (trim(form.itemName.value) == "") {
alert("物料名称不能为空!");
form.itemName.focus();
return false;
}
return true;
}
</script>
</head> <body class="body1">
<form name="itemForm" target="_self" id="itemForm" action="servlet/item/ModifyItemServlet" method="post" onsubmit="return validateForm(this)">
<div align="center">
//在对应的位置,显示item的详细信息
物料名称:<input name="itemName" type="text" class="text1" id="itemName" value="<%=item.getItemName() %>"> <select name="category" class="select1" id="category">
<%  <!--下拉框中加载所有的物料类别,并选中对应的选项-->
for (int i=0; i<itemCategoryList.size(); i++) {
ItemCategory ic = (ItemCategory)itemCategoryList.get(i);
String selectedString = "";
if (item.getItemCategory().getId().equals(ic.getId())) {
selectedString = "selected";
}
%>
<option value="<%=ic.getId() %>" <%=selectedString %>><%=ic.getName() %></option>
<%
}
%>
</select> </form>
</body>
</html>

C(Controller)控制器:ModifyItemServlet.java修改物料详细信息

package com.bjpowernode.drp.basedata.web;

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; /**
* 修改物料Servlet
* @author Administrator
*
*/
public class ModifyItemServlet extends HttpServlet {
//定义成员变量
private ItemManager itemManager;
//servlet不是线程安全的,但是本例中不做修改,因此是可以使用初始化成员变量的。如果涉及到了修改成员变量,而不能使用。
@Override
public void init() throws ServletException {
//把itemManager放在初始化中
itemManager = new ItemManagerImpl();
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//取得表单数据
String itemNo = request.getParameter("itemNo");
String itemName = request.getParameter("itemName");
String spec = request.getParameter("spec");
String pattern = request.getParameter("pattern");
String category = request.getParameter("category");
String unit = request.getParameter("unit"); //构造Item对象
Item item = new Item();
item.setItemNo(itemNo);
item.setItemName(itemName);
item.setSpec(spec);
item.setPattern(pattern); //构造物料类别
ItemCategory itemCategory = new ItemCategory();
itemCategory.setId(category);
item.setItemCategory(itemCategory); //构造物料单位
ItemUnit itemUnit = new ItemUnit();
itemUnit.setId(unit);
item.setItemUnit(itemUnit); itemManager.modifyItem(item); //注意:此处使用页面重定向至servlet中,而不是jsp文件中,否则会出现500错误
//response.sendRedirect(request.getContextPath() + "/basedata/item_maint.jsp");
response.sendRedirect(request.getContextPath() + "/servlet/item/SearchItemServlet");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

【DRP】-完成物料修改页面Servlet和JSP开发的更多相关文章

  1. servlet+jsp update修改页面的实现,整整搞了两个小时才搞定

    package DAO; public class books { private int bid; private String bname; private int booksl; private ...

  2. MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板

    http://www.cnblogs.com/xdp-gacl/p/3769058.html   孤傲苍狼 只为成功找方法,不为失败找借口! MyEclipse使用总结——修改MyEclipse默认的 ...

  3. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  4. servlet和JSP页面乱码问题

    JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我 ...

  5. Servlet,jsp,JSP技术 ,JSP编程

     一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 ...

  6. Servlet与JSP的区别

    一.基本概念 1.1 Servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面.它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器 ...

  7. Servlet、JSP选择题(2)

    Java EE软件工程师认证考试 试题库-选择题 一.    选择题(包括单选和双选) 1.B 编写一个Filter,需要(  ) A. 继承Filter 类 B. 实现Filter 接口 C. 继承 ...

  8. Java从入门到精通——基础篇之Servlet与JSP的区别

    一.基本概念 1.1 Servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面.它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器 ...

  9. Java Web开发之Servlet、JSP基础

    有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...

随机推荐

  1. List&lt;Map&lt;String, String&gt;&gt; 开启 Map&lt;String, List&lt;String&gt;&gt;

    将List变成Map结构体,下面的文字是没有水平! 写作方法传送前土壤很长一段时间.我不知道有没有好的解决办法.我们也希望提供! Map<String, String> map1 = ne ...

  2. NET媒体文件操作组件TagLib

    开源的.NET媒体文件操作组件TagLib#解析   人生得意须尽欢 莫使金樽空对月.写博客都会在吃饭后,每次吃饭都要喝上二两小酒,写博客前都要闲扯,这些都是个人爱好,改不掉了,看不惯的人,还望多多包 ...

  3. css3中的制作动画小总结

    系列教程 CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation: Transform 在CSS3中transform主要包括以下几种:旋转rotate. ...

  4. Fast-tracking approach for building routing topologies in fast-moving networks

    In one embodiment, a local node in a communication network determines a set of its neighbor nodes, a ...

  5. 查看系统中安装了那些dotnet core 的SDK和运行时的命令

    原文:查看系统中安装了那些dotnet core 的SDK和运行时的命令 1.查看SDK dotnet --list-sdks 2.查看运行时 dotnet --list-runtimes 效果如下图 ...

  6. delphi的bpl、dcp 、dcu文件意义(BPL相当于C++中的DLL,DCP相当于C++中的Lib,编译时需要)

    BPL  英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件.编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文 ...

  7. POCO文档翻译:POCO C++库入门指南

    内容目录 介绍 Foundation库 XML库 Util库 Net库 将这些东西组合到一起 介绍 POCO C++库是一组开源C++类库的集合,它们简化及加速了用C++来开发以网络功能为核心的可移植 ...

  8. 亲串 (hdu 2203 KMP)

    亲串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. asp .net 大文件传输配置

    asp .net config配置 需要在配置文件里面设置文件上传限定的两个属性值:maxAllowedContentLength,maxRequestLength 允许上传文件的长度,和请求的长度, ...

  10. 简历上的哪些内容才是 HR 眼中的干货?

    资源业绩能力知识自评 https://www.zhihu.com/question/39722495/answer/199846861