该系统是基于MVC搭建的,最典型的MVC模式就是JSP + servlet + javabean的模式。
-
Model(模型)表示应用程序核心(比如数据库记录列表)。
-
View(视图)显示数据(数据库记录)。
-
Controller(控制器)处理输入(写入数据库记录)
主要用到的知识有:
1.文件上传类的操作(添加几个jar包)PS:主要这里要显示菜单照片、需要用到文件上传
/*******************新建一个文件上传工厂****************************************/
Map<String,String> map = new HashMap<String,String>();
//1.创建一个磁盘文件项工厂对象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//2.创建一个核心解析类
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//3.解析request请求,返回的是List请求,List集合中存放的是FileItem对象
List<FileItem> list1 = servletFileUpload.parseRequest(request);
//定义一个List集合
String url = null;
for (FileItem fileItem : list1) {
// 判断是表单项还是文件上传项
if(fileItem.isFormField()){
//普通表单项;
//接收表单参数的值:
String name = fileItem.getFieldName();//获得表单项的name属性的值
String value = fileItem.getString("UTF-8");//获得表单项的值
System.out.println(name+" "+value);
// 将数据存入map集合中
map.put(name, value);
}
else{
// 文件上传项
//文件上传功能
// 获得文件上传的名称
String fileName = fileItem.getName();
if(fileName !=null && !"".equals(fileName)){
// 通过工具类获得唯一文件名
String uuidFileName = UploadUtils.getUUIDFileName(fileName);
//获得文件上传数据
InputStream is = fileItem.getInputStream();
// 获得文件上传路径
String path = this.getServletContext().getRealPath("/upload");
//将输入流对接到输出流就可以了
url = path+"\"+uuidFileName;
OutputStream os = new FileOutputStream(url);
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
os.close();
}
}
2.jsp中设置基本的路径
<%
String basePath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()
+request.getServletContext().getContextPath()+"/";
%>
主程序: <form action="<%=basePath%>FoodDeleteServlet" method="post">
3.servlet和jsp之间的数据交互
servlet到jsp
a.重定向(PS:session的数据用完不会立刻丢失)
List<Food> list = (List<Food>) this.getServletContext().getAttribute("list");
for(Food food:list){
if(foodName.equals(food.getFoodName()))
{
//跳转到菜品查询
request.getSession().setAttribute("id", food.getFoodId());
request.getSession().setAttribute("foodName", food.getFoodName());
request.getSession().setAttribute("taste", food.getFoodTaste());
request.getSession().setAttribute("price", food.getFoodPrice());
request.getSession().setAttribute("description", food.getFoodDescrip());
request.getSession().setAttribute("url", food.getFoodPath());
food.getFoodDescrip();
flag=1;
break;
}
}
request.getSession().setAttribute("flag", flag);
response.sendRedirect(request.getContextPath()+"/showFoodList.jsp");
b.转发(PS:request中的数据用完立刻丢失)
for(Food u :foodList){
if(u.getFoodId().equals(map.get("id"))||u.getFoodName().equals(map.get("foodName"))){
request.setAttribute("msg", "用户已经存在!");
request.getRequestDispatcher("/showFoodList.jsp").forward(request, response);
return ;
}
c.jsp传数据到servlet
通过表单的形式(见:jsp和servlet之间传数据)
4.运行servlet文件一定要配置访问路径
方法:(1)@WebServlet("/LoginServlet")(2)在web.xml中进行设置
不足:request、session、重定向、重定位、cookies。