Request学习总结(登录注册界面功能实现)

Request的函数

获得行的内容

request.getMethod()//用于获得HTTP请求信息中的请求方式(如get和post)

request.getRequestURI()//用于获取请求行中资源名称部分,即位于URL的主机和端口之后,参数部分之前的部分

request.getRequestURL()//用于获取客户端发出请求时的完整url,包括协议、服务器名、端口号、资源路劲等等。

request.getContextPath()//用于获取请求URL中属于web应用程序的路径,这个路径以“/”开头。

request.getRemoteAddr()//用于获取请求客户端的IP地址

获得头的内容

request.getHeader(name)

获得请求体的内容

String request.getParameter(name)//请求参数

Map<String,String[]> request.getParameterMap();

String[] request.getParameterValues(name)

注意:客户端发送的参数到服务器端都是字符串

中文乱码的解决方式

post解决:request.setCharacterEncoding("UTF-8");

get解决:parameter = new String(parameter.getBytes("iso8859-1"),""UTF-8)

 

Request的转发和重定向的区别

 1.重定向两次请求,转发一次请求

2.重定向地址栏的地址变化,转发地址不变

3.重定向可以访问外部网站,转发只能访问内部资源

4.转发的性能要优于重定向

重定向代码:sendRedircet(地址)

转发代码: setRequestDispatcher(地址).forward(request,response)   //前面部分实则在创建转发器

登陆注册界面功能实现

需要有两个servlet对象,一个为注册功能,另外一个为登录查询功能

注册界面和登录界面的制作略过,需要注意的是在表单form标签下加入 action 与method,action表示发送表单的地址,method代表提交方式,一般为post或者get。此外几个重要的提交数据都需要加上name属性,name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据。

中间插入了重定向与转发的2个使用,这里需要理解掌握。

register的servlet代码

//设置requestd 编码----只适合post方式
		request.setCharacterEncoding("UTF-8");
		
		//get方式的乱码解决方式,同样适用post
		//String username = request.getParameter("username");//乱码
		//先用iso8859-1编码 在使用utf-8解码
		//username = new String(username.getBytes("iso8859-1"),"UTF-8");
				
		
		//使用BeanUtils进行自动映射封装
		//BeanUtils的工作原理,将map中的数据根据Key与实体的属性的对应关系封装、
		//只要key的名字与实体的属性的名字一样就自动封装到实体中
		Map<String,String[]> properties = request.getParameterMap();
		Usernew user = new Usernew();
		try {
			BeanUtils.populate(user, properties);
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//此时user对象已经封装好了,需要手动封装uid---uuid---随机不重复的字符串32位
		user.setUid(UUID.randomUUID().toString());
		//将参数传递给一个业务方法
		regist(user);
		
		//认为注册成功,下一步跳转到登录界面 ---使用重定向
		response.sendRedirect(request.getContextPath()+"/login.jsp");

其中regist为与数据库交互的一个业务方法,具体代码如下

public void regist(Usernew user) {
		QueryRunner runner =new QueryRunner(JDBCutils.getDataSource());
		String sql = "insert into usernew values(?,?,?,?,?,?,?,?,?,?)";
		try {
			runner.update(sql,user.getUid(),user.getUsername(),user.getPassword(),user.getName(),
					user.getEmail(),null,user.getBirthday(),user.getSex(),null,null);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

login的servlet代码

//获得用户名和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		Usernew login = null;
		//调用一个业务方法进行用户查询
		try {
			login = method(username,password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(login!=null) {
			response.sendRedirect(request.getContextPath());
		}else {
			//跳回到login.jsp
			request.setAttribute("loginInfo", "用户名或密码错误");
			request.getRequestDispatcher("/login.jsp").forward(request, response);
		}

method为与数据库交互的业务方法,代码如下

public Usernew method(String username, String password) throws SQLException {
		QueryRunner qr = new QueryRunner(JDBCutils.getDataSource());
		String sql = "select * from usernew where username=? and password=?";
		Usernew  user = qr.query(sql,new BeanHandler<Usernew>(Usernew.class),username,password);
		return user;
	}

以上为笔者认为比较重要的核心代码。

猜你喜欢

转载自blog.csdn.net/qq_29660957/article/details/88870151