基于javaweb+mysql的jsp+servlet 小区物业管理系统(java+mysql+jsp+bootstrap)

基于javaweb+mysql的jsp+servlet 小区物业管理系统(java+mysql+jsp+bootstrap)

私信源码获取及调试交流

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb的JSP+Servlet 小区物业管理系统(java+mysql+jsp+bootstrap)

登录

用户名: admin 密码: 12345

介绍

java-web项目,采用MySQL,Tomcat,JAVA8,Servlet + JSP, 原生JDBC封装 编写

软件架构

JDK 1.8

Servlet

JSP

JDBC 二次封装,连接池

MySQL 5.7

接口代码,工具类封装

登录、注册、用户管理、小区管理、住户管理


/**
 * Copyright (C) @2020 fgwang.660@gmail.com
 *
 * @version 1.0
 * @className SystemUserServlets
 * @description 用户控制层
 */

@WebServlet ({ "/users", "/login", "/register", "/logout","/forget-password" })
public class SystemUserServlets extends HttpServlet {
	private static final long serialVersionUID = 1424562226724234389L;
	// 用户Service注入
	private final ISystemUserService service = new SystemUserService();

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) {
		// 注入的系统属性
		SystemProperty property = SystemProperty.getInstance();

		// 登录注册相关请求
		String servletPath = request.getServletPath();
		switch (servletPath) {
			// 登录的页面接口代码
			case Constant.LOGIN:
				// 页面要登录的用户
				UserDTO loginUser = UtilTools.paramMap(request, UserDTO.class);
				try {
					SystemUser user = service.login(loginUser);
					// 登录成功
					HttpSession session = request.getSession();
					session.setAttribute(Constant.USER_MODEL_TOKEN, user);
					session.setMaxInactiveInterval(property.getSessionHoldTime());
					if (loginUser.getRemember()) {
						//用户选择了记住密码
						Cookie cookie = new Cookie(Constant.IDENTIFY, String.valueOf(user.getId()));

	/**
	 * 判断一个字符串,是不是全部由字母组成
	 *
	 * @param arg
	 * @return
	 */
	public static boolean isLetter(String arg) {
		return isEmpty(arg) || arg.matches("[a-zA-Z]+");
	}

	/**
	 * 将一个单词转换成大驼峰
	 *
	 * @param word
	 * @return
	 */
	public static String wordToUpperCamel(String word) {
		return isEmpty(word) ? word : word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
	}

	/**
	 * 将类名转成表名的方法,以大写字母分隔,所有字母小写 _ 拼接
	 *
	 * @param clazz bean的类类型 即 XXX.class
	 * @return 表名
	 * @description 需要 类和表 名严格遵守开发规范,即,表名,列名使用全小写字母,多个单词使用_连接, 类名是表名的大驼峰格式(去除下划线,每个单词首字母大写) 属性名是列名的小驼峰格式(去除下划线,第一个单词全小写,从第二个单词开始,每个单词首字母大写)
	 */
	public static String convertBeanToTable(Class<?> clazz) {
		if (isEmpty(clazz)) throw new NullPointerException("Parameter object is empty .");
		return lowerCamelToColumn(clazz.getSimpleName());
	}

	/**
	 * 将类中所有的属性转换成列名。转换方式,以小驼峰命名法为基准,转为每个单词用_拼接的全小写字母
	 *
	 * @param clazz bean的类类型 即 XXX.class
	 * @return 列名组成的List
	 * @description 需要 类和表 名严格遵守开发规范,即,表名,列名使用全小写字母,多个单词使用_连接, 类名是表名的大驼峰格式(去除下划线,每个单词首字母大写) 属性名是列名的小驼峰格式(去除下划线,第一个单词全小写,从第二个单词开始,每个单词首字母大写)
	 */
	public static List<String> convertBeanToColumns(Class<?> clazz) {
		if (isEmpty(clazz)) throw new NullPointerException("Parameter object is empty .");

		Field[] fields = reflectAllField(clazz);

		if (isEmpty(fields)) throw new NullPointerException("The object has no attributes defined .");
		return Arrays.stream(fields)
				.filter(UtilTools::excludeField)
					// 注册失败
					new BaseResponse(777, e.getMessage()).response(response);
				}
				return;
			default:
				// 用户其他请求
				switch (request.getParameter(Constant.REQUEST_TYPE)) {
					// 更新 信息
					case Constant.EDIT:
						// 获取更新的数据
						SystemUser user = UtilTools.paramMap(request, SystemUser.class);
						try {
							// 去数据库里更新
							service.update(user);
							// 更新成功
							new BaseResponse(666, Constant.RESPONSE_UPDATE_SUCCESS).response(response);
						} catch (BusinessException e) {
							// 更新失败
							new BaseResponse(777, e.getMessage()).response(response);
						}catch (Exception e){
							e.printStackTrace();
							BaseResponse.error(Constant.RESPONSE_SERVER_ERROR, response);
						}
						break;
				}
				break;
		}

	}

	/**
	 * GET 请求方法
	 *
	 * @param request
	 * @param response
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		String servletPath = request.getServletPath();

		switch (servletPath) {
			// 退出的页面接口代码
			case Constant.LOGOUT:
				// 获取注册的用户名和密码
				try {
					// 获取当前会话
					HttpSession session = request.getSession();
					// 从会话中移除用户
					session.removeAttribute(Constant.USER_MODEL_TOKEN);
					// 让会话失效
					session.invalidate();
	}

	public BaseResponse setANIMATE(Integer ANIMATE) {
		this.ANIMATE = ANIMATE;
		return this;
	}

	public String getMESSAGE() {
		return MESSAGE;
	}

	public BaseResponse setMESSAGE(String MESSAGE) {
		this.MESSAGE = MESSAGE;
		return this;
	}

	public String getHtml() {
		return html;
	}

	public BaseResponse setHtml(String html) {
		this.html = html;
		return this;
	}

	public String getScript() {
		return script;
	}

	public void setScript(String script) {
		this.script = script;
	}

	@JSONField(name = "STATUS")
	public Integer getSTATUS() {
		return STATUS;
	}

	public BaseResponse setSTATUS(Integer STATUS) {
		this.STATUS = STATUS;
		return this;
	}

	@JSONField(name = "DATA")
	public Object getDATA() {
		return DATA;
	}

	public BaseResponse setDATA(Object DATA) {
		this.DATA = DATA;
		return this;
	}
//		char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
//		try {
//			byte[] btInput = character.getBytes();
//			// 获得MD5摘要算法的 MessageDigest 对象
//			MessageDigest mdInst = MessageDigest.getInstance("MD5");
//			// 使用指定的字节更新摘要
//			mdInst.update(btInput);
//			// 获得密文
//			byte[] md = mdInst.digest();
//			// 把密文转换成十六进制的字符串形式
//			int j = md.length;
//			char[] str = new char[j * 2];
//			int k = 0;
//			for (byte byte0 : md) {
//				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
//				str[k++] = hexDigits[byte0 & 0xf];
//			}
//			return new String(str);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return "";
	}

	/**
	 * 校验是不是不需要的属性
	 *
	 * @param field
	 * @return
	 */
	private static Boolean excludeField(Field field) {
		if (Modifier.isFinal(field.getModifiers())) return false;
		if ("serialVersionUID".equals(field.getName())) return false;
		return true;
	}

	/**
	 * 获取类的所有属性包含父类的属性,排除顶级父类Object的属性
	 *
	 * @param clazz
	 * @return
	 */
	public static Field[] reflectAllField(Class<?> clazz) {
		Set<Field> fields = new HashSet<>();
		Collections.addAll(fields, clazz.getDeclaredFields());
		Class<?> superclass = clazz.getSuperclass();
		while (! "Object".equals(superclass.getSimpleName())) {
			Collections.addAll(fields, superclass.getDeclaredFields());
			superclass = superclass.getSuperclass();
		}
		return fields.toArray(new Field[0]);
	}


/**
 * Copyright (C) @2020 fgwang.660@gmail.com
 *
 * @version 1.0
 * @className UnitServlets
 * @description 小区单元Servlet
 */

@WebServlet ("/units")
public class UnitServlets extends HttpServlet {
	private static final long serialVersionUID = - 390565335372205827L;

	// 接口的引用指向对应的实现类对象 (CommunityUnit)
	private final ICommunityUnitService service = new CommunityUnitService();

	/**
	 * GET 请求执行的方法
	 *
	 * @param request
	 * @param response
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) {
		// 看看当前是什么状态
		String type = UtilTools.isEmpty(request.getParameter(Constant.REQUEST_TYPE)) ? Constant.LIST : request.getParameter(Constant.REQUEST_TYPE);
		switch (type) {
			// 查看详情页面
			case Constant.EDIT:
			case Constant.VIEW:
				String id = request.getParameter(Constant.ID);
				try {
					CommunityUnit communityUnit = service.get(Integer.parseInt(id));
					request.setAttribute(Constant.DATA_MODEL, communityUnit);
					// 跳转页面
					BaseResponse.success(Constant.DATA_MODEL, communityUnit, request);
					request.getRequestDispatcher("units/detail.jsp").forward(request, response);
				} catch (BusinessException e) {
				UserDTO loginUser = UtilTools.paramMap(request, UserDTO.class);
				try {
					SystemUser user = service.login(loginUser);
					// 登录成功
					HttpSession session = request.getSession();
					session.setAttribute(Constant.USER_MODEL_TOKEN, user);
					session.setMaxInactiveInterval(property.getSessionHoldTime());
					if (loginUser.getRemember()) {
						//用户选择了记住密码
						Cookie cookie = new Cookie(Constant.IDENTIFY, String.valueOf(user.getId()));
						cookie.setMaxAge(property.getCookieTimeOut());
						response.addCookie(cookie);
					}
					// 登录成功
					new BaseResponse(666, true).response(response);
				} catch (BusinessException e) {
					// 登录失败
					new BaseResponse(777, e.getMessage()).response(response);
				}
				return;
			// 注册的页面接口代码
			case Constant.REGISTER:
				// 获取注册的用户名和密码
				UserDTO registerUser = UtilTools.paramMap(request, UserDTO.class);
				try {
					// 注册保存入库
					service.register(registerUser);
					// 注册成功
					new BaseResponse(666, Constant.RESPONSE_REGISTER_SUCCESS).response(response);
				} catch (BusinessException e) {
					// 注册失败
					new BaseResponse(777, e.getMessage()).response(response);
				}
				return;
			default:
				// 用户其他请求
				switch (request.getParameter(Constant.REQUEST_TYPE)) {
					// 更新 信息
					case Constant.EDIT:
						// 获取更新的数据
						SystemUser user = UtilTools.paramMap(request, SystemUser.class);
						try {
							// 去数据库里更新
							service.update(user);
							// 更新成功
							new BaseResponse(666, Constant.RESPONSE_UPDATE_SUCCESS).response(response);
						} catch (BusinessException e) {
							// 更新失败
							new BaseResponse(777, e.getMessage()).response(response);
						}catch (Exception e){
							e.printStackTrace();

	/**
	 * GET 请求执行的方法
	 *
	 * @param request
	 * @param response
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) {
		// 看看当前是什么状态
		String type = UtilTools.isEmpty(request.getParameter(Constant.REQUEST_TYPE)) ? Constant.LIST : request.getParameter(Constant.REQUEST_TYPE);
		switch (type) {
			// 查看详情页面
			case Constant.EDIT:
			case Constant.VIEW:
				String id = request.getParameter(Constant.ID);
				try {
					CommunityUnit communityUnit = service.get(Integer.parseInt(id));
					request.setAttribute(Constant.DATA_MODEL, communityUnit);
					// 跳转页面
					BaseResponse.success(Constant.DATA_MODEL, communityUnit, request);
					request.getRequestDispatcher("units/detail.jsp").forward(request, response);
				} catch (BusinessException e) {
					BaseResponse.error(e.getMessage(), response);
				} catch (Exception e) {
					BaseResponse.error(Constant.RESPONSE_SERVER_ERROR, response);
				}
				break;

			// 删除功能
			case Constant.DELETE:
				id = request.getParameter(Constant.ID);
				try {
					service.delete(id);
					new BaseResponse(666, Constant.RESPONSE_DELETE_SUCCESS).response(response);
				} catch (BusinessException e) {
					new BaseResponse(777, e.getMessage()).response(response);
				} catch (Exception e) {
					BaseResponse.error(Constant.RESPONSE_SERVER_ERROR, response);
				}
				break;
			default: // 默认是查看列表页
				try {
					List<CommunityUnit> communityUnits = service.get();
					BaseResponse.success(Constant.DATA_MODEL, communityUnits, request);
					request.getRequestDispatcher("units/unit.jsp").forward(request, response);
				} catch (BusinessException e) {
					BaseResponse.error("用户列表查询失败", response);
				} catch (Exception e) {
					BaseResponse.error(Constant.RESPONSE_SERVER_ERROR, response);
				}
				} catch (BusinessException e) {
					new BaseResponse(777, e.getMessage()).response(response);
				} catch (Exception e) {
					BaseResponse.error(Constant.RESPONSE_SERVER_ERROR, response);
				}
				break;
			// 编辑更新
			case Constant.EDIT:
				communityUnit = UtilTools.paramMap(request, CommunityUnit.class);
				try {
					// 调用更新的接口
					service.update(communityUnit);
					new BaseResponse(666, Constant.RESPONSE_UPDATE_SUCCESS).response(response);
				} catch (BusinessException e) {
					e.printStackTrace();
					new BaseResponse(777, e.getMessage()).response(response);
				} catch (Exception e) {
					BaseResponse.error(Constant.RESPONSE_SERVER_ERROR, response);
				}
				break;
			// 分页查询
			case Constant.PAGE:
				break;
			default:
				break;
		}
	}
}

	 * @return
	 */
	public static Field[] reflectAllField(Class<?> clazz) {
		Set<Field> fields = new HashSet<>();
		Collections.addAll(fields, clazz.getDeclaredFields());
		Class<?> superclass = clazz.getSuperclass();
		while (! "Object".equals(superclass.getSimpleName())) {
			Collections.addAll(fields, superclass.getDeclaredFields());
			superclass = superclass.getSuperclass();
		}
		return fields.toArray(new Field[0]);
	}

	/**
	 * 获取大小写字母加数字的随机字符串
	 *
	 * @param length 字符串的长度
	 * @return 随机字符串
	 */
	public static String randomString(int length) {
		List<String> origin = new ArrayList<>();

		// 获取全部的英文大小写字母
		for (int i = 65; i < (int) 'Z'; i++) {
			origin.add(String.valueOf((char) i));
			origin.add(String.valueOf((char) (i + 32)));
		}
		// 生成0-9数字  跟字母组合在一起
		for (int i = 0; i < 10; i++) {
			origin.add(String.valueOf(i));
		}

		StringBuilder result = new StringBuilder(length);
		// 循环length次 每次随机拿到一个字母  拼接在结果后面
		for (int i = 0; i < length; i++) {
			String c = origin.get(new Random().nextInt(origin.size()));
			result.append(c);
		}
		return result.toString();
	}

		Collections.addAll(fields, clazz.getDeclaredFields());
		Class<?> superclass = clazz.getSuperclass();
		while (! "Object".equals(superclass.getSimpleName())) {
			Collections.addAll(fields, superclass.getDeclaredFields());
			superclass = superclass.getSuperclass();
		}
		return fields.toArray(new Field[0]);
	}

	/**
	 * 获取大小写字母加数字的随机字符串
	 *
	 * @param length 字符串的长度
	 * @return 随机字符串
	 */
	public static String randomString(int length) {
		List<String> origin = new ArrayList<>();

		// 获取全部的英文大小写字母
		for (int i = 65; i < (int) 'Z'; i++) {
			origin.add(String.valueOf((char) i));
			origin.add(String.valueOf((char) (i + 32)));
		}
		// 生成0-9数字  跟字母组合在一起
		for (int i = 0; i < 10; i++) {
			origin.add(String.valueOf(i));
		}

		StringBuilder result = new StringBuilder(length);
		// 循环length次 每次随机拿到一个字母  拼接在结果后面
		for (int i = 0; i < length; i++) {
			String c = origin.get(new Random().nextInt(origin.size()));
			result.append(c);
		}
		return result.toString();
	}

	/**
	 * 分页查询工具
	 */
	public static class PageQueryTool {
		// 当前页
		private Integer currentPage;

		// 页面数据大小
		private Integer pageSize;

		// 起始页
		private Integer startIndex;
			e.printStackTrace();
		}

		return object;
	}

	/**
	 * MD5 加密算法
	 *
	 * @param character 要加密的字符串
	 * @return 加密后的字符串
	 */
	public static String MD5Encoded(String character) {
		return character;
//		char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
//		try {
//			byte[] btInput = character.getBytes();
//			// 获得MD5摘要算法的 MessageDigest 对象
//			MessageDigest mdInst = MessageDigest.getInstance("MD5");
//			// 使用指定的字节更新摘要
//			mdInst.update(btInput);
//			// 获得密文
//			byte[] md = mdInst.digest();
//			// 把密文转换成十六进制的字符串形式
//			int j = md.length;
//			char[] str = new char[j * 2];
//			int k = 0;
//			for (byte byte0 : md) {
//				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
//				str[k++] = hexDigits[byte0 & 0xf];
//			}
//			return new String(str);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return "";
	}

	/**
	 * 校验是不是不需要的属性
	 *
	 * @param request request对象
	 * @param clazz   类类型
	 * @param <T>* @return 类对象
	 */
	public static <T> T paramMap(HttpServletRequest request, Class<T> clazz) {
		T object = null;
		try {
			// 创建类对象
			object = clazz.newInstance();

			// 获取类中所有的属性
			Field[] fields = reflectAllField(clazz);
			// 遍历每一个属性
			for (Field field : fields) {
				// 排除序列化id等属性
				if (! excludeField(field)) continue;
				// 设置属性的访问权限
				field.setAccessible(true);
				// 获取属性名
				String key = field.getName();
				// 获取属性值
				String value = request.getParameter(key);

				// 获取属性的类型,根据类型映射值
				Class<?> fieldType = field.getType();
				if (UtilTools.isNotEmpty(value)) {
					// 特殊类型映射处理
					if (Boolean.class.isAssignableFrom(fieldType)) {
						field.set(object, Integer.parseInt(value) == 1);
					} else if (Integer.class.isAssignableFrom(fieldType)) { // int类型处理
						field.set(object, Integer.parseInt(value));
					} else if (Long.class.isAssignableFrom(fieldType)) { // Long类型处理
						field.set(object, Long.parseLong(value));
					} else if (Date.class.isAssignableFrom(fieldType)) { // 日期类型处理
						try {
							value = value.replace("T", " ");
							Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
							field.set(object, date);
						} catch (ParseException e) {
							e.printStackTrace();
						}
					} else { // 默认是字符串
					session.invalidate();
					// 遍历cookie,让cookie失效
					Cookie[] cookies = request.getCookies();
					for (Cookie cookie : cookies) {
						cookie.setValue("");
						cookie.setPath(request.getContextPath());
						cookie.setMaxAge(0);
						response.addCookie(cookie);
					}
					// 退出成功后 给个提示 提示完  还得刷新页面(改下状态)
					BaseResponse.response(Constant.RESPONSE_LOGOUT_SUCCESS, response);
				} catch (BusinessException e) {
					BaseResponse.response(e.getMessage(), response);
				}
				return;
			// 忘记密码
			case Constant.FORGETPASSWORD:
				// 获取用户名
				String username = request.getParameter("username");
				try {
					// 返回密码并且给用户显示
					String password = service.resetPassword(username);
					new BaseResponse(666, password).response(response);
				}catch (BusinessException e){
					new BaseResponse(777, e.getMessage()).response(response);
				} catch (Exception e) {
					e.printStackTrace();
					BaseResponse.error(Constant.RESPONSE_SERVER_ERROR, response);
				}
				return;
			default: // 用户的其他请求通道
				switch (UtilTools.isEmpty(request.getParameter(Constant.REQUEST_TYPE)) ? Constant.LIST : request.getParameter(Constant.REQUEST_TYPE)) {
					case Constant.VIEW: // 查看用户信息
					case Constant.EDIT: // 编辑用户信息
						// 查询用户信息
						 String id = request.getParameter(Constant.ID);
						try {
							// 查询用户详情
							SystemUser user = service.get(Integer.parseInt(id));
							// 查询所有的住户信息
							ITenantsService tenantsService = new TenantsService();
							List<Tenants> tenants = tenantsService.get();
							// 住户信息返回页面
							List<Object> othersDatas = new ArrayList<>();
							othersDatas.add(tenants);
							// 用户详情返回页面
							BaseResponse.success(Constant.DATA_MODEL, user, request);
							BaseResponse.success(Constant.DATA_OTHER_MODEL, othersDatas, request);
							request.getRequestDispatcher("users/detail.jsp").forward(request, response);
						} catch (BusinessException e) {
							BaseResponse.error(e.getMessage(), response);
						}
						break;
		this.html = (UtilTools.isEmpty(this.html) ? new StringBuilder() : new StringBuilder(this.html)).append("<script>function ")
				.append(this.getFUNCTION())
				.append("{fyAlert.msg('")
				.append(this.getMESSAGE())
				.append("', { icon: ")
				.append(this.getICON())
				.append(", animateType: ")
				.append(this.getANIMATE())
				.append(" });} ")
				.append(this.getFUNCTION())
				.append(";</script>")
				.toString();
		return this;
	}

	/**
	 * 构建响应脚本
	 * @param script
	 * @return
	 */
	public BaseResponse buildScript(String script) {
		this.script = (UtilTools.isEmpty(this.script) ? new StringBuilder() : new StringBuilder(this.script))
				.append("<script>function ")
				.append("response() {")
				.append(script)
				.append(";} ")
				.append("response()")
				.append(";</script>")
				.toString();
		return this;
	}

	public String getFUNCTION() {
		return FUNCTION;
	}

	public BaseResponse setFUNCTION(String FUNCTION) {
		this.FUNCTION = FUNCTION;
		return this;
	}

	public Integer getICON() {
		return ICON;
	}

	public BaseResponse setICON(Integer ICON) {
		this.ICON = ICON;
		return this;
	}

	public Integer getANIMATE() {
		return ANIMATE;
	}

	/**
	 * 判空方法,对象,字符串,数组,List,Map是否为空
	 *
	 * @param t
	 * @param <T>
	 * @return
	 */
	public static <T> boolean isEmpty(T t) {

		// 如果t是对象
		if (t == null) return true;
		// 如果t是字符串
		if (t instanceof String && ("".equals(t) || ("".equals(((String) t).trim())))) return true;
		// 如果t是数组
		if (t instanceof Object[] && ((Object[]) t).length == 0) return true;
		// 如果t是list或者Set
		if (t instanceof Collection && ((Collection) t).size() == 0) return true;
		// 如果t是Map
		return t instanceof Map && ((Map) t).size() == 0;
	}

	/**
	 * 非空判断
	 *
	 * @param t
	 * @param <T>
	 * @return
	 */
	public static <T> boolean isNotEmpty(T t) {
		return ! isEmpty(t);
	}

	/**
	 * 判断一个字符串,是不是全部由字母组成
	 *
	 * @param arg
	 * @return
	 */
	public static boolean isLetter(String arg) {
		return isEmpty(arg) || arg.matches("[a-zA-Z]+");
	}
		if (whiteList.contains(path)) return true;

		// 静态资源放行
		return whiteList.contains(path.split("[/]")[1]);
	}
}

/**
 * Copyright (C) @2020 fgwang.660@gmail.com
 *
 * @version 1.0
 * @className UnitServlets
 * @description 小区单元Servlet
 */

@WebServlet ("/units")
public class UnitServlets extends HttpServlet {
	private static final long serialVersionUID = - 390565335372205827L;

	// 接口的引用指向对应的实现类对象 (CommunityUnit)
	private final ICommunityUnitService service = new CommunityUnitService();

	/**
	 * GET 请求执行的方法
	 *
	 * @param request
	 * @param response
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) {

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于JavaWeb Servlet+JSP的量表系统可以通过以下步骤实现: 1.创建数据库表格,包括量表信息、题目信息、选项信息和用户答题记录信息等。 2.使用Servlet实现用户登录、注册、修改密码等功能。 3.使用JSP实现量表列表展示、量表详情展示、答题页面展示等功能。 4.使用ServletJSP实现用户答题记录的增加、查询、修改和删除等功能。 5.使用Bootstrap等前端框架美化页面,提高用户体验。 以下是一个简单的基于JavaWeb Servlet+JSP的量表系统的代码示例: 引用:基于JavaWeb Servlet+JSP+MYSQL+Bootstrap 文章管理系统 基于JavaWeb Servlet+JSP+MYSQL+Bootstrap 文章管理系统 基于JavaWeb Servlet+JSP+MYSQL+Bootstrap 文章管理系统 基于JavaWeb Servlet+JSP+MYSQL+Bootstrap ... 引用: ```java <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>量表详情</title> </head> <body> <h1>量表详情</h1> <table> <tr> <td>量表名称:</td> <td>${scale.name}</td> </tr> <tr> <td>量表描述:</td> <td>${scale.description}</td> </tr> <tr> <td>题目列表:</td> <td> <table> <c:forEach items="${scale.questions}" var="question"> <tr> <td>${question.content}</td> <td> <c:forEach items="${question.options}" var="option"> <input type="radio" name="${question.id}" value="${option.id}">${option.content} </c:forEach> </td> </tr> </c:forEach> </table> </td> </tr> </table> <form action="submit" method="post"> <input type="hidden" name="scaleId" value="${scale.id}"> <input type="submit" value="提交"> </form> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值