项目笔记一 javaWeb 前端登录

表单提交

前端登录一般会有一个表单,填写个人信息及验证码,(前端校验),点击登录,请求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 {
    
    }

    //。。等等
}

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

public class BaseServlet 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继承这个BaseServlet,不用每次去重新写判断语句,而且可以直接返回视图名称进行页面跳转。

使用SpringMVC 

SpringMVC底层对Servlet进行了封装,简化了开发,体现在表单登录上的是对于参数的接收的简化,可以直接在Controller中的方法中直接接收。

    /**
    * 使用User对象接收表单数据,要求input框name属性和User的属性名一致(底层使用反射进行赋值)
    */
    @RequestMapping("login")
    @ResponseBody
    public Result login(User user, String vcode){

    }

    /**
    * 直接使用字符串进行接收
    */
    @RequestMapping("login")
    @ResponseBody
    public Result login(String username, String password, String vcode){

    }

验证码

前端代码

            <tr>
        		<td></td>
       			 <td>
         		 <div id="divVerifyCode"><img id="imgVerifyCode" src="UserServlet?method=getVerifyCode"/></div>
        		</td>
        		<td>
         		 <label id="changeLable"><a href="javascript:_hyz()">换一张</a></label>
        		</td>
      		</tr>

ps:换一张的请求中的路径必须添加动态参数(时间),因为相同的url请求浏览器不会重复发送,而换验证码就是重复请求的过程。

function _hyz(){
		document.getElementById("imgVerifyCode").src ="UserServlet?method=getVerifyCode&" + new Date().getTime();
	}

Servlet代码

public void getVerifyCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		VCodeUtils vc = new VCodeUtils();
		try {
			//保存图片并输出到页面
			vc.saveImage(vc.getImage(), response.getOutputStream());
			String sb = vc.getText();
			request.getSession().setAttribute("Vcode", sb);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

VCodeUtils工具类


持续更新~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值