*AJAX( Asynchronous JavaScript & XML)
- ํ๋ฉด ์ผ๋ถ๋ถ์ ๊ฐฑ์ ํ์ฌ ๋ณด์ฌ์ค ๋
@Controller
public class AjaxController {
@GetMapping("/ajax/emp_ajax.do")
public String searchEmp(int deptno, Model model) {
//service์์ฑ
AjaxService as = new AjaxService();
String jsonObj = as.empJsonObj(deptno);
//๋ชจ๋ธ์ ๋ด๊ธฐ
model.addAttribute("jsonObj", jsonObj);
return "ajax/emp_ajax";
}//searchEmp
//////////////////////////////////////////////////////////@ResponseBody
@ResponseBody //viewResolver์ผ ๋๋ฅผ ์ฐพ์ง๋ง ๋ฐ๋ก ๋๊ฐ๋ค
@GetMapping("/ajax/emp_response_ajax.do")
public String searchEmp2(int deptno, String name) {
//service์์ฑ
AjaxService as = new AjaxService();
String jsonObj = as.empJsonObj(deptno);
return jsonObj;
}//searchEmp2
//์๋น์ค - ์
๋ฌด๋ก์ง ์ฒ๋ฆฌ
public class AjaxService {
public String empJsonObj(int deptno) {
//์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ์ฌ JSONObject์ผ๋ก ์์ฑ
JSONObject jsonObj = new JSONObject();
jsonObj.put("resultFlag", false);
EmpDAO eDAO = new EmpDAO();
try {
List<EmpDomain> list = eDAO.selectDeptEmp(deptno);
jsonObj.put("resultFlag", true); //์กฐํ ์ฑ๊ณตํจ
jsonObj.put("dataSize", list.size()); //๋ช๊ฐ์ธ์ง
//jsonArray๋ง๋ค์
JSONArray jsonArr = new JSONArray();
JSONObject jsonTemp = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//jsonTemp๋ผ๋ jsonObject์ ์์ฑํ ๋ค ๊ฐ(db์กฐํ๊ฒฐ๊ณผ)์ ๋ฃ์ด์ฃผ๊ณ
//jsonTemp๋ฅผ jsonArr์ ๋ด๋๋ค
//jsonTemp์๋ ๋ ์ฝ๋๊ฐ๋ค์ด ๋ด๊น
for(EmpDomain ed : list) {
jsonTemp = new JSONObject();
jsonTemp.put("empno", ed.getEmpno());
jsonTemp.put("ename", ed.getEname());
jsonTemp.put("job", ed.getJob());
jsonTemp.put("mgr", ed.getMgr());
jsonTemp.put("hiredate", sdf.format(ed.getHiredate()));
jsonTemp.put("sal", ed.getSal());
jsonTemp.put("comm", ed.getComm());
//๋ถ์๋ฒํธ๋ ์ ์์ ํ๋ฉด์ ๋จ์์์
//๊ฐ์ ๊ฐ์ง JSONObject์ JSONArray์ ํ ๋น
//jsonArr๋ ๋ ์ฝ๋ ์ ๋ณด๋ฅผ ๋ด์ jsonObject๋ค์ ๊ฐ์ง
jsonArr.add(jsonTemp);
}//end for
//JSONArray๋ฅผ JSONObject์ ํ ๋น
jsonObj.put("data",jsonArr);
} catch (SQLException e) {
e.printStackTrace();
}//end catch
return jsonObj.toJSONString();
}//empJsonObj
}//class
public class EmpDAO {
public List<EmpDomain> selectDeptEmp(int deptno) throws SQLException{
List<EmpDomain> list = new ArrayList<EmpDomain>();
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//end catch
//jdbc:oracle:thin:@ํธ์คํธ:ํฌํธ:SID
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String id="scott";
String pass="tiger";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url,id,pass);
StringBuilder selectEmp = new StringBuilder();
selectEmp
.append("select empno, ename, job, mgr, hiredate, sal, comm ")
.append("from emp ")
.append("where deptno = ? ");
pstmt = con.prepareStatement(selectEmp.toString());
pstmt.setInt(1, deptno);
rs = pstmt.executeQuery();
EmpDomain ed = null;
while(rs.next()) {
ed = new EmpDomain(rs.getInt("empno"),
rs.getInt("mgr"), rs.getInt("sal"),
rs.getInt("comm"), deptno, rs.getString("ename"),
rs.getString("job"), rs.getDate("hiredate"));
System.out.println("2");
list.add(ed);
}//end while
}finally {
if(rs!=null) {rs.close();}
if(pstmt!=null) {pstmt.close();}
if(con!=null) {con.close();}
}//end finally
return list;
}//selectDeptEmp
๋ถ์๋ฒํธ ์ ํํ์ฌ ajax๋ก emp.do ์์ฒญ
emp.do ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ
public String searchEmp(int deptno, Model model)
<<์๋น์ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ, ๋ฐํ ๊ฒฐ๊ณผ(jsonObj)๋ฅผ Model์ ์ ์ฅ - jsp์์ ${jsonObj} ์ถ๋ ฅ,parsingํด์ ์ฌ์ฉ
>> "์ปจํธ๋กค๋ฌ์์ ์๋น์ค ํธ์ถ
public String searchEmpJson(int deptno)
<< ์กฐํ ๊ฒฐ๊ณผ๋ฅผ JSONObject์ผ๋ก ์์ฑ(์ ๋ฌด์ฒ๋ฆฌ)
>> "DAO์์ DBMS๋ฅผ ์กฐํํจ
<< public List<EmpDomain> selectEmp (int deptno)
DAO์์ ์์ธ ๋์ง๊ณ , Service์์ ๋์ง๊ณ ,
Controller๊ฐ ์์ธ๋ฅผ ๋ฐ์ - @ExceptionHandler๋ก ์์ธ์ฒ๋ฆฌ
*@ResponseBody ์ฌ์ฉํ๋ฉด
-์๋ต JSP์์ด Controller์์ ๋ฐ์ํ ๋ฐ์ดํฐ๊ฐ ์ ์์์๊ฒ ๊ทธ๋๋ก ์ถ๋ ฅ๋จ => JSPํ์ผ์ ๋ง๋ค ํ์๊ฐ ์์
์ฌ์ฉ๋ฒ)
@ResponseBody๋ฅผ Controller์ ์์ฒญ method ์์ ์ ์
-์๋ต๋๋ ํ๊ธ์ด ๊นจ์ง๋ฉด @RequestMapping์
produces=“application/json;charset=UTF-8”์ ์ค์ ํ๋ฉด ํ๊ธ์ด ๊นจ์ง์ง ์์
$.ajax({
async: true | false
})
async : ๋น๋๊ธฐ ๋์์ ์ฌ๋ถ
true : ๋น๋๊ธฐ๋ก ๋์
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต(์๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๋๊ธฐ ์ ์)์ด ์ค๊ธฐ ์ ์ callback function์ด ํธ์ถ๋จ
false : ๋๊ธฐ๋ก ๋์
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ด ์๋ฃ๋ ํ callback function์ด ํธ์ถ๋จ
*์์ธ์ฒ๋ฆฌ ( @ExceptionHandler ์ฌ์ฉ )
-Controller์ ์์ฒญ์ฒ๋ฆฌ method์์ throws๋ก ์์ธ๋ฅผ ๋์ง๋ฉด DispatherServlet์์ ์์ธ๋ฅผ ์ก์ ์ฒ๋ฆฌํจ
=> ๊ฐ๋ฐ์๋ ์์ธ๊ฐ ๋ฐ์ํ ์ดํ์ ํ์ด์ง๋ฅผ ์ง์ ํ ์ ์์
์ฌ์ฉ๋ฒ)
์์ธ๋ฅผ ๋ฐ์์ํค๋ ์์ฒญ method๋ throws ์์ธ๋ฅผ ๋ ๋ฆผ
-์์ธ์ฒ๋ฆฌ method
1.@ExceptioinHandler(์์ธ์ฒ๋ฆฌํด๋์ค.class)๋ฅผ method์์ ์ ์ธ
2.method์ ๋งค๊ฐ๋ณ์๋ก ์์ธ์ฒ๋ฆฌํด๋์ค๋ฅผ ์ ์ธ
3. method์์์ ์์ธ๊ฐ ๋ฐ์ ํ์ ๋ ์ฒ๋ฆฌ์ฝ๋๋ฅผ ๊ธฐ์
4. ModelAndView๋ฅผ ๋ฆฌํดํ์ฌ ์์ธ์ฒ๋ฆฌ ๊ฐ์ฒด์ ์์ธ ๋ฐ์์ ์๋ตํ ํ์ด์ง๋ฅผ ์ค์ ํ์ฌ ๋ฐํ
*์์ฒญ์ฒ๋ฆฌ method๊ฐ ๋ฌ๋ผ๋ ๊ฐ์ ์์ธ๊ฐ ๋ฐ์๋๋ฉด ํ๋์ ExceptionHandler method์์ ์ฒ๋ฆฌ๋จ
@ExceptionHandler(Exception.class)
public ModelAndView exceptionMethod( Exception e) {
์์ธ์ฒ๋ฆฌ์ฝ๋
ModelAndView mav=new ModelAndView();
mav.setViewName(“์์ธ๋ฐ์์ ์๋ตํ JSP๋ช ”); //redirect: ๋๋ forward:์ ์ฌ์ฉํ ์ ์์
mav.addObject(“์ด๋ฆ”, View JSP๋ก ์ ๋ฌํ ์์ธ์ ๋ณด); //์์ธ ๊ฐ์ฒด, ์์ธ๋ฉ์์ง
return mav;
}
//method์์ ๋ฐ์๋ ์์ธ๋ DispatcherServlet์ด ์ก์์ ๋ง๋ค์ด์ง ์์ธํ์ด์ง๋ก ์ด๋ํ์ฌ
//์๋ฌ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ค
//>๋ด๊ฐ ๋ง๋ ํ์ด์ง์์ ์์ธ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค >> @ExceptionHandler์ ์ฌ์ฉ
@GetMapping("/test_exception.do")
public String testException() throws ClassNotFoundException {
if(new Random().nextBoolean()) {
throw new ClassNotFoundException("ํด๋์ค๊ฐ ์์ด์ ์ฃ์ก");
}//end if
return "/exception/success";
}//testException
//1.annotation์ค์ (์ฒ๋ฆฌํ ์์ธํด๋์ค์ ๋์ผํ ํด๋์ค ์ค์ )
@ExceptionHandler(ClassNotFoundException.class)
//2.method๊ฐ MAV๋ฅผ ๋ฐํํ๊ณ ์์ธ๋ฅผ ๋ฐฐ๊ฐ๋ณ์๋ก ์ค์
public ModelAndView exceptionProcess(ClassNotFoundException cnfe) {
ModelAndView mav = new ModelAndView();
//3.์์ธ์ฒ๋ฆฌ
cnfe.printStackTrace();
//4.์์ธ๋ฐ์ ์ ๋ณด์ฌ์ค ํ์ด์ง๋ช
์ค์
mav.setViewName("exception/fail");
mav.addObject("msg", "์ด๊ฒ์ ์์ธ๋ฐ์ ์ ๋ณด์ฌ์ค ๋ฉ์์ง");
mav.addObject("simple_msg", cnfe.getMessage());
return mav;
}//exceptionProcess