表单提交

前端登录一般会有一个表单,填写个人信息及验证码,(前端校验),点击登录,请求Servlet,完成后端检验,登陆成功。

\"\"

Servlet中接收表单数据,如果数据条数较多,可以使用request.getParameterMap()方法将数据封装到一个map中,并且还可以封装成一个javaBean对象,可以传到dao层进行查询校验。

​
//接受表单数据
Map<String, String[]> map = request.getParameterMap();
//把map中的数据映射到user对象中
//方法一,使用CommonUtils工具方法
User user = CommonUtils.toBean(map, User.class);
//方法二,BeanUtils工具方法
//User user = new User();
//BeanUtils.populate(user, map);

Servlet方法

实际应用中,往往一个Servlet里有多个方法,前端可以通过传入method参数,在servlet中进行判断,选取合适的方法。

public class UserServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 得到请求参数method,判断当前是什么操作
		String method = request.getParameter(\"method\");

		if (\"login\".equals(method)) {
			login(request, response);
		} else if (\"regist\".equals(method)) { 
			regist(request, response);
		} else if (\"logout\".equals(method)) {
			logout(request, response);
		} else if (\"activeuser\".equals(method)) {
			activecode(request, response);
		}

	}
    
    public void login(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
    
    }

    //。。等等
}

这样是比较麻烦的,所以可以自定义一个Servlet,来完成判断并执行方法、返回视图的工作。

public class  Servlet extends HttpServlet {
	/*
	 * 它会根据请求中的m,来决定调用本类的哪个方法
	 */
	protected void service(HttpServletRequest request , HttpServletResponse response )
			throws ServletException, IOException {
		request .setCharacterEncoding(\"UTF-8\");
		response .setContentType(\"text/html;charset=utf-8\");

		// 例如:http://localhost:8080/demo1/xxx?method=login
		String methodName = request .getParameter(\"method\");// 它是一个方法名称
		
		// 当没用指定要调用的方法时,那么默认请求的是execute()方法。
		if(methodName == null || methodName.isEmpty()) {
			methodName = \"execute\";
		}
		//反射
		Class c = this.getClass();
		try {
			// 通过方法名称获取方法的反射对象
			Method m = c.getMethod(methodName, HttpServletRequest.class,
					HttpServletResponse.class);
			// 反射方法目标方法,也就是说,如果methodName为add,那么就调用add方法。
			String result = (String) m.invoke(this, request , response);
			// 通过返回值完成请求转发
			if(result != null && !result.isEmpty()) {
				request.getRequestDispatcher(result).forward(request , response);
			}
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}
}

后台处理请求的Servlet继承这个 Servlet,不用每次去重新写判断语句,而且可以直接返回视图名称进行页面跳转。

收藏 打印