[코드리뷰]D27 - interface 다중구현
<form action="">
<!-- 5) 다음 폼에 액션은 빈것을 만들어 줍니다.
그 다음 '액션 선택'을 넣어주고 id가 action인 셀렉트를 만들어줍니다. 그리고
거기에 옵션에 밸류가 attack이고 공격이라고 보여지는 선택 옵션과 밸류가 deffense이고 방어라고 보여지는
선택 옵션을 만듭니다.
마찬가지로 종류: 를 넣어주고 네임이 클래스인 셀렉트를 만들어주고
옵션에 값이 노멀인 일반공격 옵션을 만들어주고 옵션에 밸류 값이 스페션인 특수공격을 만들어줍니다.
그 다음 버튼을 만들고 onclick해서 클릭하면 go()함수를 실행되게 만들어 주고 클릭하면 정보가 날라가지 않도록
타입은 button으로 만들어 줍니다..-->
액션 선택 :
<select id="action">
<option value="attack">공격</option>
<option value="deffense">방어</option>
</select>
종류 :
<select name="class">
<option value="normal">일반공격</option>
<option value="special">특수공격</option>
</select>
<button type="button" onclick="go()" >전송</button>
</form>
<h3>${msg}</h3>
</body>
//6) 다음 id가 액션인 것에 on을써서 이벤트를 걸어줍니다. 그리고 선택을 바꿔줄때마다 실행되는 함수를 걸어줍니다.
//7)그 다음 빈 content 변수를 초기화 해줍니다.
// 8) 만약 이 아이디가 action인 것의 value 값이 attack인 경우와 아니면 의 함수 if를 걸어줍니다.
//9)만약 attack 값이라면 일반공격 특수공격 선택지 나타나도록 해야되기 때문에 content 그 두개의 선택지를 넣어줍니다.
//두개의 선택지는 하나는 옵션이 값이 nomal이고 일반공격으로 보여지고 다른 옵션는 벨류값이 special이고 특수공격이라 보여집니다.
//그리고 else인 deffensed에
//회피와 방어가 나오도록 담아줍니다.
// 그리고 select에서 name 이 class인 태그에 html을 써서 content의 내용이 보여지도록 해줍니다.
//
$('#action').on('change',function(){
var content = '';
if($(this).val() == 'attack'){
content = '<option value="normal">일반공격</option>';
content += '<option value="special">특수공격</option>';
}else{
content = '<option value="avoid">회피</option>';
content += '<option value="block">방어</option>';
}
$('select[name="class"]').html(content);
});
//10) 다음에 go ()로 클릭이벤트를 걸어줬던 버튼에 함수를 걸고
//11) action의 벨류값인 어텍과 디벤스 값을 빼낸다음 action변수에 담습니다.
//12) 그 다음 폼에 ****속성이 action에 action값을 집어 넣습니다.
//13) 그 다음 submit을 써서 폼을 서버로 보낸다.
function go(){
var action = $('#action').val();
$('form').attr('action',action);
$('form').submit();
//14) MainController는 HttpServlet을 상속받아주는 클래스로 만들어 줍니다. 그런다음
//14) action의 벨류갑을 서버로 보냈기 때문에 연결하는 작업을 할껀데요.
//15)webServlet에 받아오는 값이 다양하기 때문에 urlPatterns을 써주고 /attack, /deffense를 써서
//16)연결해줍니다.
@WebServlet(urlPatterns = {"/attack","/deffense"})
public class MainController extends HttpServlet {
//17) 폼에서 오는 게 get이기 때문에 alt + shift + s로 doget을 오버라이딩 해줍니다.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//18)어떤 요청으로{"/use","/skill","/jump"} 왔는지 확인 가능하기 위해서 작업들을 해줍니다.
//19)제일 먼저 연결해준 class의 파라미터 값을 req. getParameter로 빼내주고 cls에 저장해 놓습니다.
String cls =req.getParameter("class");
//19) 그다음은 uri에 찍히는 값을 나중에 대조 시킬꺼니까 form로 받아온 전체 uri를 req.getRequestURI로 뽑아냅니다.
//20) 그 값은 uri에 저장합니다.
String uri = req.getRequestURI();
System.out.println(uri);
String ctx = req.getContextPath();
//21)그 다음 컨텍스트 경로만 빼서 ctx에 저장합니다.
System.out.println(ctx);
//22) 다음 전체 uri경로에서 컨테스트경로의 길이 번호부터의 값을 addr에 저장하면 전체에서 컨태스트 경로를 뺀 나머지
//23)경로를 보여주는 결과를 냅니다.
String addr = uri.substring(ctx.length());
System.out.println(addr);
//인터페이스는 스스로 객체화 되지 않는다.
//그래서 ㅇ니터페이스를 구현해줄 클래스가 필요하다.
//24)Character 클래스를 ch 변수에 객체화 시켜주고
Character ch =new Character();
//요청이 /attack일 경우
//25) 나중에 사용해줄 result 변수를초기화 해줍니다.
String result = "";
//26) 만약 그 잘라낸 addr 값이 /attack과 같다면
if(addr.equals("/attack")) {
//class가 normal일 경우
//27) 두가지 경우를 실행합니다. 먼저 파라미터 값인 cls가 normal과 같다면
//28) 객체화한 ch의 normal 메소드를 불러오고 result 값에 넣어줍니다.
if(cls.equals("normal")) {
result = ch.normal();
}else {
//29) normal이 아니라면 special 메소드를 불러옵니다.
result = ch.special();
}
//30) 만약 attack의 값이 아니라면 다음 else문을 실행시킵니다.
}else {// 아닐경우
//class가 avoid일 경우
//31) cls 파라미터값이 avoid과 같다면 avoid메소드를 result 값에 저장하고
if(cls.equals("avoid")) {
result = ch.avoid();
}else {
//32) 그게 아니라면 block메소드를 result 값에 저장합니다.
result = ch.block();
}
//class가 avoid일 경우
}
System.out.println("result: "+ result);
// 33) 이제 index에서 h3로 보여주려고 했던 msg에 값을 띄어주려고 하기 때문에
//34) 일단 req.setAttribute를 써서 msg라는 ***이름으로 result 변수 의 값을 넣어줍니다.
//35) response로 보내야 하는데 response는값을 보낼 수 없기 때문에 requestDispatcher로 response
//36) 를 보낼때request를 붙여서 보내줘야 합니다..
//37) 그래서 request로 부터 requestDispatcher를 사용해 뽑아내고 index.jsp로 보내주겠다고 경로를 정해줍니다.
//38 ) 그리고 dis로 부터 forward 시켜서 request 값과 response의 값을 함께 보내줍니다.
req.setAttribute("msg", result);
RequestDispatcher dis =req.getRequestDispatcher("index.jsp");
dis.forward(req, resp);