All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.admin.docs.controller.jsp Maven / Gradle / Ivy

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="admin" uri="http://www.infop.cn/tag/admin"%>




	



	

控制器层

介绍

控制器用于接受请求,来自表单的请求,接收其有数;响应数据给请求方,根据请求参数,查询数据或加工数据,然后将数据返回。

控制器的命名:

  • @WebServlet的值以.jsp结尾,表示返回页面。
  • @WebServlet的值以.do结尾,表示功能,不返回页面,可能返回json

分页查询控制器

分类控制器调用DAO层的方法 public DataTablesResponse<T> findAll(DataTablesRequest dtr, String[] searchFields) ,并返回一个 json 给前端JavaScript使用。

										
package cn.infop.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.infop.dao.MenuDao;
import cn.infop.datatables.DataTablesRequest;
import cn.infop.datatables.DataTablesResponse;
import cn.infop.entity.Menu;
import cn.infop.tools.JsonUtils;

@WebServlet("/root/menu-data.do")
public class MenuData extends HttpServlet {

	private static final long serialVersionUID = 8625540450948908487L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		DataTablesResponse<Menu> pd = new MenuDao().findAll(new DataTablesRequest(request),
				new String[] { "name", "position", "pname", "uri", "icon" });
		JsonUtils.printJson(response, pd);
	}

}
									

返回页面控制器

本框架中,写一个CURD程序,需要用到3~3个返回页面的控制器。

  • 显示列表页面,以分页显示记录。@WebServlet的值是/console/xxx-list.jsp
  • 显示详情页面。@WebServlet的值是/console/xxx-detail.jsp
  • 显示添加页面。@WebServlet的值是/console/xxx-add.jsp
  • 显示修改页面。@WebServlet的值是/console/xxx-edit.jsp

下面列出一个控制器,以作示例。

										
package cn.infop.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/console/menu-list.jsp")
public class MenuList extends HttpServlet {

	private static final long serialVersionUID = -4838051497092364432L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.getRequestDispatcher("/admin/menu/list.jsp").forward(request, response);
	}

}
									

细心的您可能会发现,响应请求的方法不是doGet(),也不是doPost(),而是service()。为什么要使用这个方法呢?service()方法可以响应doGet()和doPost等多种请求,避免出现405错误。

修改和显示详情页面需要返回数据,按下面这样的方式写:

										
package cn.infop.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.infop.dao.MenuDao;
import cn.infop.entity.Menu;

@WebServlet("/console/menu-edit.jsp")
public class MenuEdit extends HttpServlet {

	private static final long serialVersionUID = 288034539384707309L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String name = request.getParameter("name");
		MenuDao dao = new MenuDao();
		Menu menu = dao.getBean("select * from menus where name = ?", new Object[] { name });
		request.setAttribute("menu", menu);
		request.getRequestDispatcher("/admin/menu/edit.jsp").forward(request, response);
	}

}
									

显示详情页面的控制器和显示修改页面的控制器是类似的写法,都需要返回数据。

保存、更新控制器

保存控制器和更新控制器,调用方法 save(String[] fields, Object[] params) 和方法 public int update(String[] fields, Object[] params, int ConditionalLocation) 分别贴出这两个控制器的代码,以便查用。

										
package cn.infop.controller;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.infop.dao.MenuDao;
import cn.infop.tools.ConstantUtils;

@WebServlet("/console/menu-save.jsp")
public class MenuSave extends HttpServlet {

	private static final long serialVersionUID = 4866717001030579736L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String name = request.getParameter("name");
		String position = request.getParameter("position");
		String pname = request.getParameter("pname");
		String uri = request.getParameter("uri");
		String icon = request.getParameter("icon");

		MenuDao dao = new MenuDao();

		try {
			//当初设计这个写法,是因为使用POJO在控制器和DAO层之间传递数据太麻烦,
			//在传递的过程中还要做数据转换,将String类型转换成其它数据类型
			dao.save(
					new String[] { "name", "position", "pname", "uri", "icon" },
					new Object[] { name, position, pname, uri, icon }
					);
			//保存成功返回消息提示
			request.setAttribute("msg", ConstantUtils.MSG_SAVED);
			//保存成功后跳转到显示列表的控制器
			request.getRequestDispatcher("/console/menu-list.jsp").forward(request, response);
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}

	}

}
									

修改控制器与保存控制器逻辑类似,这样写:

										
package cn.infop.controller;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.infop.dao.MenuDao;
import cn.infop.tools.ConstantUtils;

@WebServlet("/console/menu-update.jsp")
public class MenuUpdate extends HttpServlet {

	private static final long serialVersionUID = -8350914616406383767L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String name = request.getParameter("name");
		String position = request.getParameter("position");
		String pname = request.getParameter("pname");
		String uri = request.getParameter("uri");
		String icon = request.getParameter("icon");

		MenuDao dao = new MenuDao();

		try {
			// 当初设计这个写法,是因为使用POJO在控制器和DAO层之间传递数据太麻烦,
			// 在传递的过程中还要做数据转换,将String类型转换成其它数据类型
			dao.update(
					new String[] { "position", "pname", "uri", "icon", "name", },
					new Object[] { position, pname, uri, icon, name }, 
					4); 
			// 保存成功返回消息提示
			request.setAttribute("msg", ConstantUtils.MSG_UPDATED);
			// 保存成功后跳转到显示列表的控制器
			request.getRequestDispatcher("/console/menu-list.jsp").forward(request, response);

		} catch (SQLException e) {

			e.printStackTrace();
		}

	}

}
									

删除控制器

删除记录时,必须要指定条件,不指定条件整张的数据都删除,后果很严重。 SQL条件通常是主键。

										
package cn.infop.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.infop.dao.MenuDao;
import cn.infop.tools.ConstantUtils;

@WebServlet("/console/menu-delete.jsp")
public class MenuDelete extends HttpServlet {

	private static final long serialVersionUID = -837199851714432550L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String name = request.getParameter("name");
		MenuDao dao = new MenuDao();
		//dao.deleteById(id); //如果主键是整数类型,使用此方法
		//如果如果主键是字符类型,写SQL脚本,使用public int execute(String sql, Object[] params)方法
		dao.execute("delete from menus where name = ?", new Object[] { name });
		request.setAttribute("msg", ConstantUtils.MSG_DELETED);
		request.getRequestDispatcher("/admin/menu/edit.jsp").forward(request, response);
	}

}
									




© 2015 - 2025 Weber Informatics LLC | Privacy Policy