[java] HttpServletRequest 로 여러개의 값을 jsp 값 받아와서 DB에 저장하기
안녕하세요~~~
오늘도 퇴근하고 돌아온 jju_developer입니다!!
jsp에서 한명의 사용자 정보가 아닌,
여러명의 사용자 정보를 받고 나서 한번에 저장을 하려고 하는데용!
java로 값을 넘겨줄때 사용하는 HttpServletRequest 에 대해 간략하게 알아보도록 하겠습니다!
JSP 파일에서 보통 html 코드와 js 코드를 합쳐서
프론트 단을 만들게 되는데요,
우리가 사용하는 jsp의 기본으로 내장되어있는
객체 중 request라는 객체를 많이 사용하게 됩니다.
간단히 예시를 들어보자면
웹에서 사용자의 정보를 입력해줍니다.
이름 | jju |
나이 | 29 |
이름 | 김개똥 |
나이 | 20 |
등등
해당 정보를 입력하고 저장을 하면!
서버로 요청을 하게되겠죠?
해당 정보를 db에 안전하게 insert 하도록 말입니다.
이때,
서버에서는 HttpServletRequest를 생성해서,
요청정보에 있는 path(경로)로 매핑된 서블릿에게 전달합니다.
이렇게 전달받은 내용들을
파라미터로 Get과 Post 형식으로 전달하는 것입니다.
즉,
jsp 에서 자바(controller)로 HttpServletRequest request 객체를 넘겨주어야 하고
자바(controller)에서 해당 객체를 getParameterValues 해서 배열로 저장하여
insert문을 실행하면 되는것이죠!
여기서 저는 한사람의 정보를 insert 하는것이 아닌,
여러명의 정보를 한번에 insert 하도록 하겠습니다!!!

1. JAVA 정보 insert 하는 Controller
/**
* 여러명의 보호자 정보를 insert 한다.
* @autor OGJ
* @param request : jsp에서 입력한 보호자의 정보를 받아온다.
* @return 보호자 정보를 insert 후 다시 jsp 에 전달
* @exception Exception
*/
@RequestMapping(value = "/admin/manage/insertGuardianMng.do")
public String insertGuardianMng(@ModelAttribute("searchVO") SearchVO searchVO, @RequestParam Map<String, Object> commandMap, ModelMap model, SessionStatus status, HttpServletRequest request) throws Exception {
// 보호자 데이터 여러명을 한번에 insert 하기
// 1. guardianMngRegist.jsp에서 입력한 보호자 정보를 HttpServletRequest request로 받아서 배열로 저장한다.
String[] bizId = request.getParameterValues("bizId");
String[] searchUserId = request.getParameterValues("searchUserId");
String[] guardianNm = request.getParameterValues("guardianNm");
String[] guardianType = request.getParameterValues("guardianType");
String[] mobile = request.getParameterValues("mobile");
String[] addr = request.getParameterValues("addr");
String[] sortOrder = request.getParameterValues("sortOrder");
// 2. for문을 돌려서 paramMap에 담아 insert 할때 정보를 같이 넘겨준다.
HashMap<String, Object> paramMap = new HashMap<String, Object>();
if(null != bizId && bizId.length > 0) {
for(int i = 0 ; i < bizId.length ; i++ ) {
paramMap.put("bizId", bizId[i]);
paramMap.put("searchUserId", searchUserId[i]);
paramMap.put("guardianNm", guardianNm[i]);
paramMap.put("guardianType", guardianType[i]);
paramMap.put("mobile", mobile[i]);
paramMap.put("addr", addr[i]);
paramMap.put("sortOrder", sortOrder[i]);
paramMap.put("loginId", EgovUserDetailsHelper.getAdminLoginId());
// 3. TB_EMERGENCY_CONTACTS에 insert
userMngService.insertGuardianMng(paramMap);
}
}
status.setComplete();
model.addAttribute("commandMap", commandMap);
return "redirect:/admin/manage/guardianMngList.do?gid=lm_07&mid=lm_07_01&cmd=update&message=insert&searchBizId="+commandMap.get("searchBizId");
}
어우 뭐가 이렇게 파라미터로 많이 받아 하겠지만!
중요한것은
HttpServletRequest request
이부분입니다.
결국,
jsp에서 정보를 따닥 따닥 입력한것을
getParameterValues
로 받아오는것이죠,
하나만 받아올거 아니고, 여러명의 데이터를 받아올것이니까
배열에 저장을 해서
다 저장을 해놓은 다음에~
나중에 for 문으로 하나하나 꺼내면서 insert 를 해주는 것이죠!
정리하자면
우선,
1. jsp에서 입력받은 값을 controller로 넘겨줘야겠죠!
jsp 예시)
<form:form commandName="frm" name="frm" method="post">
<td>
<input type="text" class="form-control form-control-lg" id="guardianNm" name="guardianNm" value="${result.guardianNm}" maxlength="50">
</td>
</form:form>
폼테그 안에 정의한 테이블에 text로 보호자 이름을 넣을 수 있게 해놨습니다.
그러면 해당 input 태그에 name="guardianNm" 으로 지정을 해주고
해당 값에 보호자 이름을 넣는다면 자바스크립트로 폼테그를 submit 한다고 해주면 됩니다.
그럼 폼테그 안에 있는 name = " " 해당 키값으로 값을 Controller에 보내줄 수 있답니당!!!
2. JS 로 기능 구현
// 신규등록
function insertDB() {
$("#frm").attr("action", "<c:url value='서버로 보낼 때 해당 데이터가 도착할 URL'/>");
$("#frm").attr("target","_self");
$("#frm").submit();
}
서버로 보낼 때 해당 데이터가 도착할 URL 은 Controller 의 value로 지정한 url 로 해주면 됩니당
Controller의 request mapping 어노테이션 value의 url이랑 같다.
@RequestMapping(value = "/admin/manage/insertGuardianMng.do")
/admin/manage/insertGuardianMng.do
폼테그의 정보들을 submit 할때에 action을 취할 주소가 바로 Controller 주소가 됩니다!
이렇게 하면 저장된 모든 name에 들어있는 value들을 Controller에서
꺼내 쓸 수 있다는 것이죠!!!
3. XML insert 문 등록
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.co.jjusystems.admin.manage.userMng.service.impl.UserMngMapper">
<insert id="insertGuardianMng" parameterType="java.util.Map">
INSERT INTO TB_EMERGENCY_CONTACTS (
BIZ_ID
, USER_ID
, GUARDIAN_NM
, GUARDIAN_TYPE
, MOBILE
, ADDR
, SORT_ORDER
, USE_YN
, REG_ID
, REG_DT
) VALUES (
#{bizId}
, #{searchUserId}
, #{guardianNm}
, #{guardianType}
, #{mobile}
, #{addr}
<if test='sortOrder != null and sortOrder != ""'>
, #{sortOrder}
</if>
<if test='sortOrder == null or sortOrder == ""'>
, NULL
</if>
, 'Y'
, #{loginId}
, NOW()
)
<selectKey keyProperty="guardianId" resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
</mapper>
당연히 해당 xml에 insert 문 넣을때에 컬럼들이랑 controller와 jsp에 결과를 담아주는 부분이 동일해야겠죵!!
☆ 요약
1. JSP: name 값을 <input> 태그에 설정하고 value를 해당 태그에 담아준다.
2. JS : function insertDB() 함수를 통해 form 값이 Controller로 전달 될 수 있도록 한다.
3. Controller: HttpServletRequest 객체를 통해 jsp 값을 받아서 처리.
4. xml 에 정의 (insert, select, delete) 구현
재 . 밌 . 따 ~
그럼 오늘도 고생하셨습니다~!!
수정사항은 언제나 댓글
환영합니당!
