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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章