servlet+注册+登录jsp

代码仓库:https://gitee.com/DerekAndroid/ServletLoginJsp.git

效果:

sql语句:

	create database day11;
	use day11;
	create table customer(
		id int primary key auto_increment,
		username varchar(20),
		password varchar(20),
		
		email varchar(20),
		name varchar(20),
		sex varchar(10),
		
		birthday date
	);

问题:注册页面时,存入的birthday字段是date类型的数据为null

原因:从页面获取到的只能是String类型的参数,如果要获取其他类型的需要进行转换

package com.itheima.bean;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

public class TestCustomer {
    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
        //获取前台录入的数据  map
        Map<String, String[]> map = new HashMap<>();
        map.put("name", new String[]{"xiazdong"});
        map.put("sex",  new String[]{"man"});
        map.put("birthday", new String[]{"2010-10-10"});
        //创建bean
        Customer cus = new Customer();
        //date转换
        DateConverter dateConverter = new DateConverter();
        dateConverter.setPattern("yyyy-MM-dd");
        ConvertUtils.register(dateConverter, java.util.Date.class);
        //把map中的数据拷贝到bean中
        BeanUtils.populate(cus, map);
        System.out.println(cus.getName());
        //测试通过
        System.out.println(cus.getBirthday());//Sun Oct 10 00:00:00 CST 2010
    }
}

反射方式实现

package com.itheima.utils;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;

import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Map;

public class MyBeanUtils {
    public static <T> T populate (Class<T> beanClass , Map<String,String[]> properties) {
        try {
            //1反射创建实例
            T bean = beanClass.newInstance();
            //2时间转换器
            DateConverter dateConverter = new DateConverter();
            dateConverter.setPattern("yyyy-MM-dd");
            //3注册转换器
            ConvertUtils.register(dateConverter, Date.class);
            BeanUtils.populate(bean,properties);
            return bean;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

测试:

    private static void testMyBeanUtils() {
        //获取前台录入的数据  map
        Map<String, String[]> map = new HashMap<>();
        map.put("name", new String[]{"xiazdong"});
        map.put("sex",  new String[]{"man"});
        map.put("birthday", new String[]{"2019-10-28"});
        Customer populate = MyBeanUtils.populate(Customer.class, map);
        System.out.println(populate.getName());
        System.out.println(populate.getBirthday());//Mon Oct 28 00:00:00 CST 2019
    }

servlet使用

package com.itheima.servlet;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.Date;
import java.util.Map;

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

import org.apache.commons.beanutils.BeanUtils;

import com.itheima.bean.Customer;
import com.itheima.service.RegisterService;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;

public class RegisterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		try {
			//处理post方式乱码
			request.setCharacterEncoding("utf-8");
			//处理响应乱码
			response.setContentType("text/html;charset=utf-8");
			//获取前台录入的数据  map
			Map<String, String[]> map = request.getParameterMap();
			//创建bean
			Customer cus = new Customer();
			//birthday字段:string转换date
			DateConverter dateConverter = new DateConverter();
			dateConverter.setPattern("yyyy-MM-dd");
			ConvertUtils.register(dateConverter, java.util.Date.class);
			//把map中的数据拷贝到bean中
			BeanUtils.populate(cus, map);
			System.out.println(cus.getName());
			System.out.println(cus.getBirthday());
			//创建service
			RegisterService rs = new RegisterService();


			//调用service方法
			rs.saveCustomer(cus);
			//根据异常判断是否注册成功
			response.getWriter().print("注册成功");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			response.getWriter().print("注册失败");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

get表单提交中文乱码问题

原因:html设置了浏览器在传递请求参数时,编码的时候是UTF-8,但是解码采用iso-8859-1

java模拟浏览器效果

package com.itheima.lmServlet;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class LmDemo {

	public static void main(String[] args) throws UnsupportedEncodingException {
		String s = "汤姆";
		System.out.println(s);
		//html设置了浏览器在传递请求参数时,编码的时候是UTF-8,但是解码采用iso-8859-1
		//模拟浏览器
		String s1 = URLEncoder.encode(s, "utf-8");
		System.out.println(s1);
		//模拟服务器
		String s2 = URLDecoder.decode(s1, "iso-8859-1");
		//浏览器乱码的效果
		System.out.println(s2);
		
		//第一种方式
		//使用iso-8859-1编码
		String s3 = URLEncoder.encode(s2, "iso-8859-1");
		System.out.println(s3);
		//使用utf-8解码
		String s4 = URLDecoder.decode(s3, "utf-8");
		System.out.println(s4);
		
		//第二种方式
		//把乱码的数据打成iso-8859-1的字节数组
		byte[] bytes = s2.getBytes("iso-8859-1");
		//在把字节数组使用utf-8的编码方式重新组装成字符串
		String s5 = new String(bytes, "utf-8");
		System.out.println(s5);
		//简写方式
		String s6 = new String(s2.getBytes("iso-8859-1"), "utf-8");
		System.out.println("s6="+s6);
	}

}

结果:

lm_form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="/day11/lm" method="get">
		username:<input type="text" name="username"/><br>
		password:<input type="password" name="password"><br>
		hobby:<input type="checkbox" name="hobby" value="smoking">
			  <input type="checkbox" name="hobby" value="drink">
			  <input type="checkbox" name="hobby" value="tHead">
		<input type="submit" value="get方式提交">
	</form>
	<hr>
	
	<form action="/day11/lm" method="post">
		username:<input type="text" name="username"/><br>
		password:<input type="password" name="password"><br>
		hobby:<input type="checkbox" name="hobby" value="smoking">
			  <input type="checkbox" name="hobby" value="drink">
			  <input type="checkbox" name="hobby" value="tHead">
		<input type="submit" value="post方式提交">
	</form>
</body>
</html>

运用到servlet中

package com.itheima.lmServlet;

import java.io.IOException;
import java.util.Arrays;
import java.util.Map;

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

public class LmServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//这种方式get提交中文会出现乱码
		//从post方法中移过来的
//		request.setCharacterEncoding("utf-8");
//		//获取username
//		String username = request.getParameter("username");
//		System.out.println(username);
//		//获取hobby
//		String[] hobbys = request.getParameterValues("hobby");
//		System.out.println(Arrays.toString(hobbys));
//		//获取所有
//		Map<String, String[]> map = request.getParameterMap();
//		for(String key:map.keySet()){
//			System.out.println(key+":"+Arrays.toString(map.get(key)));
//		}
		
		//获取username
		String username = request.getParameter("username");
		System.out.println(new String(username.getBytes("iso-8859-1"),"utf-8"));
		//获取hobby
		String[] hobbys = request.getParameterValues("hobby");
		System.out.println(Arrays.toString(hobbys));
		//获取所有
		Map<String, String[]> map = request.getParameterMap();
		for(String key:map.keySet()){
			System.out.println(key+":"+new String(Arrays.toString(map.get(key)).getBytes("iso-8859-1"),"utf-8"));
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
		//		//针对于post请求  乱码解决方式
//		request.setCharacterEncoding("utf-8");
//		//获取username
//		String username = request.getParameter("username");
//		System.out.println(username);
//		//获取hobby
//		String[] hobbys = request.getParameterValues("hobby");
//		System.out.println(Arrays.toString(hobbys));
//		//获取所有
//		Map<String, String[]> map = request.getParameterMap();
//		for(String key:map.keySet()){
//			System.out.println(key+":"+Arrays.toString(map.get(key)));
//		}
	}

}

日志:

username:[阿根]
password:[123]
hobby:[drink, tHead]

 

request请求域

M发送请求数据到B,B获取到数据

直接访问X,返回null

MeServlet

package com.itheima.red;

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

public class MeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String money = request.getParameter("money");
		
		System.out.println("我说:咋了");
		System.out.println("甲说:没钱,借"+money);
		System.out.println("我说:没有");
		System.out.println("我说:我去帮你借!");
		//把money放入request域中
		request.setAttribute("moneyx", money);
		//请求转发到bzr
		request.getRequestDispatcher("/bzr").forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 BzrServlet

package com.itheima.red;

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

public class BzrServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//从上一次请求中获取moneyx
		String moneyx=(String)request.getAttribute("moneyx");
		System.out.println("班主任:嘎哈来了!");
		System.out.println("我说:甲同学回家没钱了,借"+moneyx);
		System.out.println("班主任:给你500");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

结果:

我说:咋了
甲说:没钱,借50
我说:没有
我说:我去帮你借!
50

 

package com.itheima.red;

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

/**
 * Servlet implementation class XxServlet
 */
public class XxServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String xx = (String)request.getAttribute("moneyx");
		System.out.println(xx);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

结果:

null

发布了178 篇原创文章 · 获赞 44 · 访问量 24万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章