BACK END/JAVA

[코드리뷰]D27 - interface 다중구현

dinoelll 2023. 2. 27. 22:49

구현할 내용

 

 

 

<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);