<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
</head>
<body>
액션 선택:
<form>
<select name = "action"> <!-- select 태그 -->
<option value = "attack"> 공격</option>
<option value = "defense"> 방어</option>
<option value = "common">공통행동</option>
</select>
종류:
<select name ="cls">
<option value = "nomal"> 일반 공격</option>
<option value = "special">특수 공격</option>
</select>
<input type = "button" value = "전송" onclick="go()"/><!-- 전송 클릭 이벤트가 발생했을때 go를 -->
</form>
<!-- 4번째 확인: 보내는 값을 잘 받는가 (h3안에 있는 값이 바뀌면 set어트리뷰트 에있는 ""값을 바꿔 줘야한다)-->
<h3>${result}</h3><!-- 컨틀롤에 있는 attribute를 이용해서 msg를 출력해준다 -->
</body>
<script>
var action = 'attack';// 초기화를 해준거임
//name 속성이 밸류값이 action이라고 한다
$('select[name="action"]').on('change',funtion({ //2. select의 name이 action을 chagnge를 시켜주면 콜백시켜준다
var action = $(this).val(); // 3.당사자를 (val)가져와서 action에 담아준다 이벤트걸리는 당사자에게 객체를 넣어줌
var content = ""; //아무것도 없는 값을 넣어주고
if(action == 'attack'){
content = '<option value ="nomal">일반 공격</option>'; // 쿼터는 자기가 구분해주기 //content는 화면에 출력시킨다
content += '<option value ="special">특수 공격</option>'; //두문장을 넣어준다
}else if (action == 'defense'){
content = '<option value ="block">막기</option>';
content += '<option value ="avoid">회피</option>';
}else{
content = '<option value = "useItem">아이템사용</option>';
content += '<option value = "move">이동</option>';
content += '<option value = "pickup">줍기</option>';
}
$('select[name="cls"]').html(content);// select의 name의 cls를 불러와서 html에 콘텐트를 출력해준다
//html에 변경해준다 //html 태그와 태그사이에 콘텐트값을 담아줄거다
});
function go(){
$('form').attr('action',action);//attr=속성값 액션값은 위에 있는변수 액션이다 액션 속성을 액션으로 바꿔주고
$('from').submit();//파라미터에 보낸다
}
</script>
</html>
컨트롤
package kr.co.gudi.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.co.gudi.model.Character;
@WebServlet(urlPatterns= {"/attack","/defense","/common"})// 웹서브렛은 안(attack,defense,common등)에있는 걸 받아오는거다
public class Gamecontroller extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 밑에있는 스트링 먼저 해야함
//uri:/08_multiex/common
String uri = req.getRequestURI();
//context path : 08_multiext
String ctx = req.getContextPath();
//sub : /common
String sub = uri.substring(ctx.length());
System.out.println("addr :" +sub);// 확인해보고 들어가야 하기 때문에 시스템 아웃 사용 1번째 확인(요청이 제대로 들어 왔는지?)
String cls = req.getParameter("cls");
System.out.println("param :"+cls);//2번째 확인(파라메터가 제대로 들어 왔는지?)
Character ch = new Character();
String msg = "";//model에서 실행한 메서드가 반환하는 값을 담는 함수
switch (sub) {
case "/attack":
if(cls.equals("nomal")) {
msg = ch.nomal();
}else {
msg = ch.special();
}
break;
case "/defense":
if(cls.equals("move")) {
msg = ch.move();
}else {
msg = ch.useItem();
}
break;
case "/common":
if(cls.equals("move")) {
msg = ch.move();
}else if(cls.equals("pickup")){
msg = ch.pickup();
}else {
msg = ch.useItem();
}
break;
}
System.out.println(msg);//3번째 확인 :model로 부터 반환된 값 확인
req.setAttribute("result", msg);
RequestDispatcher dis = req.getRequestDispatcher("index.jsp");
dis.forward(req, resp);
}
}