์ํฐํฐ ๋ง๋ค๊ธฐ
์ํฐํฐ ํจํค์ง ์์ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ๋น๊ณต๊ฐ ๋ฌธ์์ด ๋ณ์์ธ name ๋ฐ password ๊ฐUser
์๋ ํด๋์ค๋ฅผ ๋ง๋ค ๊ฒ์
๋๋ค . ์์ฑ์(๊ธฐ๋ณธ๊ฐ ๋ฐ ๋ ๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ๋ ์์ฑ์)์ getter/setter๋ฅผ ๋ง๋ค๊ณ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฐ ๋ฉ์๋์ ํจ๊ป ๋ฉ์๋๋ฅผ ์ฌ์ ์ํฉ๋๋ค . ์ฆ, ์ฐ๋ฆฌ๋ ํ๋ฅญํ Java ๊ฐ๋ฐ์๊ฐ ํด๋์ค๋ฅผ ๋ง๋ค ๋ ์ํํ๋ ๋ชจ๋ ์์
์ ์ํํฉ๋๋ค. toString()
equals()
hashCode()
public class User {
private String name;
private String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if (name != null ? !name.equals(user.name) : user.name != null) return false;
return password != null ? password.equals(user.password) : user.password == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (password != null ? password.hashCode() : 0);
return result;
}
}
์ด์ ์ฌ์ฉ์ ๋ชฉ๋ก ์์ฑ์ ์์ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๊ณ ์ฌ๊ธฐ์์ ์ฌ์ฉ์๋ฅผ ๊ฐ์ ธ์ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. Tomcat์ด ์ฐ๋ฆฌ๋ฅผ ์ํด ์ด ์์
์ ์ํํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ ์ํ๋ ๋ฉ์๋๋ ์ด๋ฏธ ์ ์๋์ด ์์ผ๋ฏ๋ก ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ ์๋ธ๋ฆฟ ๋ชจ๋์์ ๋ณผ ์ ์๋ ๊ณต์ ๋ชฉ๋ก์ ์ด๋ป๊ฒ ๋ง๋ค ์ ์์ต๋๊น? ๊ฐ ์๋ธ๋ฆฟ์ ๋ชฉ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ํ ๋ชฉ๋ก์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ์ง๋ง ListServlet์๋ ๋ค๋ฅธ ๋ชฉ๋ก์ ์ฌ์ฉ์๊ฐ ํ์๋ฉ๋๋ค .. ๋ฐ๋ผ์ ๋ ์๋ธ๋ฆฟ์ด ๊ณต์ ํ๋ ๊ฐ์ฒด๊ฐ ํ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ํด๋์ค๊ฐ ๊ณต์ ํ๋ ๊ฐ์ฒด, ์ฆ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ์ํ ํ๋์ ๊ฐ์ฒด๊ฐ ํ์ํฉ๋๋ค. ๋์์ธ ํจํด์ ๋ํด ๋ค์ด๋ณด์
จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด๋ค ์ฌ๋๋ค์๊ฒ๋ ์ด๊ฒ์ด ๊ทธ๋ค์ ํ๋ก๊ทธ๋จ์์ Singleton ํจํด ์ ๋ํ ์ฒซ ๋ฒ์งธ ์ง์ ํ ํ์์ฑ์ผ ์ ์์ต๋๋ค . ์ด์ค ํ์ธ ๋ฐ ๋๊ธฐํ๋ฅผ ํตํด ์ด์ํ ์ฑ๊ธํค์ ์์ฑํ ์ ์์ต๋๋ค . ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์์ ํ ์ ํฉํ๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ์ด๊ธฐํ ๊ธฐ์ ์ ์ฌ์ฉํ ๊ฒ์
๋๋ค.
๋ชจ๋ธ ๋ง๋ค๊ธฐ
๋ชจ๋ธ ํจํค์ง์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ (๊ทธ๋ฆฌ๊ณ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๊ณ ) ํน์ดํ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ธ . ํด๋์ค์์ ์ฌ์ฉ์์ ๊ฐ์ธ ๋ชฉ๋ก์ ๋ง๋ค๊ณ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๊ตฌํํฉ๋๋ค. ํ๋๋ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๊ณ ๋ค๋ฅธ ํ๋๋ ๋ฌธ์์ด(์ฌ์ฉ์ ์ด๋ฆ) ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค. ์ฌ์ฉ์ ๊ฐ์ฒด๋ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ณต๊ฐํ๊ณ ์ถ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฆ ๋ชฉ๋ก๋ง ๊ฐ๊ฒ ๋ฉ๋๋ค.
public class Model {
private static Model instance = new Model();
private List<User> model;
public static Model getInstance() {
return instance;
}
private Model() {
model = new ArrayList<>();
}
public void add(User user) {
model.add(user);
}
public List<String> list() {
return model.stream()
.map(User::getName)
.collect(Collectors.toList());
}
}
MVC์ ๋ํด ์กฐ๊ธ
์ฑ๊ธํค ์ ๋ํด ์ด๋ฏธ ๋ค์ด๋ดค๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋์์ธ ํจํด ๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ (MVC) ์ ๋ํด ๋ค์ด๋ดค์ ๊ฒ์ ๋๋ค . ๊ทธ ๋ชฉ์ ์ ๋ทฐ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ์ํํ ์์ ์ ๊ฒฐ์ ํ๋ ์ฝ๋์ ํญ๋ชฉ์ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ๋ทฐ ๋ ๋ฐ์ดํฐ๊ฐ ํ์๋๋ ๋ฐฉ์์ ๋ด๋นํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋ทฐ๋ JSP ํ์ด์ง ์ ๋๋ค . ๊ทธ๊ฒ์ด ๋ฐ๋ก ๋ด๊ฐ ๊ทธ๊ฒ๋ค์ views ๋ผ๋ ํด๋์ ๋ฃ์ ์ด์ ์ ๋๋ค . ๋ชจ๋ธ์ ํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก ์์ ํ๋ ๋ฐ์ดํฐ์ ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด๊ฒ์ ์ฌ์ฉ์(์ฌ์ฉ์ ๋ชฉ๋ก)์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปจํธ๋กค๋ฌ๋ ๊ทธ๋ค ์ฌ์ด์ ๋งํฌ์ ๋๋ค. ๊ทธ๋ค์ ๋ชจ๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ทฐ์ ์ ๋ฌํฉ๋๋ค(๋๋ Tomcat ์์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค)., ์ฒ๋ฆฌํ๊ณ ๋ชจ๋ธ์ ์ ๋ฌ). ๋ชจ๋ธ์ด๋ ๋ทฐ๊ฐ ์๋๋ผ ๋น์ฆ๋์ค ๋ก์ง(ํ๋ก๊ทธ๋จ์ด ์ํํด์ผ ํ๋ ์์ )์ ์ ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ๋ถ๋ถ์ ์์ฒด ๋น์ฆ๋์ค๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.- ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ทฐ๋ ๋ฐ์ดํฐ์ ์๋ฆ๋ค์ด ํํ์ ๋ ๋๋งํฉ๋๋ค.
- ์ปจํธ๋กค๋ฌ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
<form method="post">
<label>Name:
<input type="text" name="name"><br />
</label>
<label>Password:
<input type="password" name="pass"><br />
</label>
<button type="submit">Submit</button>
</form>
์ฌ๊ธฐ์ ์์์๋ ๊ฐ์ด post ์ธ ๋ฉ์๋ ์์ฑ์ด ์์ต๋๋ค . ์ด๋ ์ด ์์์ ๋ฐ์ดํฐ๊ฐ POST ์์ฒญ ์ผ๋ก ์๋ฒ๋ก ์ด๋ํจ์ ๋ํ๋
๋๋ค . ์์
์์ฑ์ด ์ง์ ๋์ง ์์์ต๋๋ค. ์ฆ, ์์ฒญ์ด ์ด ํ์ด์ง์ ์จ ๊ฒ๊ณผ ๋์ผํ ์ฃผ์( /add ) ๋ก ์ ์ก๋ฉ๋๋ค . ๋ฐ๋ผ์ GET ์์ฒญ์ ์์ ํ๋ฉด ์ด ์ฃผ์์ ๋ฐ์ธ๋ฉ๋ ์๋ธ๋ฆฟ์ ์ฌ์ฉ์ ์ถ๊ฐ ์์๊ณผ ํจ๊ป JSP๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ POST ์์ฒญ์ ์์ ํ๋ฉด ์์์ด ์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ๊ฒ์ ์ ์ ์์ต๋๋ค(์ฌ๊ธฐ์ ์๋ ์์ฒญ ๊ฐ์ฒด์์ ์ถ์ถํฉ๋๋ค.doPost()
๋ฐฉ๋ฒ, ํ๋ก์ธ์ค ๋ฐ ์ ์ฅ์ ์ํด ๋ชจ๋ธ์ ์ ๋ฌ). ์
๋ ฅ ํ๋์๋ ์ด๋ฆ (์ฌ์ฉ์ ์ด๋ฆ์ ๊ฒฝ์ฐ, ๋น๋ฐ๋ฒํธ์ ๊ฒฝ์ฐ pass ) ์ด๋ผ๋ ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค . ์ด๊ฒ์ ๋งค์ฐ ์ค์ํ ํฌ์ธํธ์
๋๋ค. ๋ฐ๋ผ์ ์์ฒญ(์๋ธ๋ฆฟ ๋ด๋ถ)์์ ์ด ๋ฐ์ดํฐ(์
๋ ฅํ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ์ํธ)๋ฅผ ์์ ํ๊ธฐ ์ํด ์ด๋ฌํ ์ด๋ฆ ๋ฐ ํจ์ค ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋์ค์ ๋ ์์ธํ ์ค๋ช
ํฉ๋๋ค. ๋ฐ์ดํฐ ์ ์ก์ ์ํ ๋ด ๋ฒํผ์ ๊ด๋ก์ ์ธ ์ถ๋ ฅ ํ๋๊ฐ ์๋ ๋ฒํผ ์ผ๋ก ๋ค์ ๋ง๋ค์ด์ก์ต๋๋ค . ์ด ์ ๊ทผ ๋ฐฉ์์ด ์ผ๋ง๋ ๋๋ฆฌ ์ฑํ๋์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ ์๊ฒ๋ ํจ๊ณผ์ ์
๋๋ค(Chrome ๋ธ๋ผ์ฐ์ ).
POST ์์ฒญ์ ์๋ธ๋ฆฟ ์ฒ๋ฆฌ
AddServlet ์ผ๋ก ๋์๊ฐ์ . ์๋ธ๋ฆฟ์ด GET ์์ฒญ์ "์ก์" ์ ์๋๋ก HttpServletdoGet()
ํด๋์ค ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์์ ์๊ธฐ์์ผ ๋๋ฆฝ๋๋ค . ์๋ธ๋ฆฟ์ด POST ์์ฒญ ๋ ํฌ์ฐฉํ๋๋ก ๊ฐ๋ฅด์น๋ ค๋ฉด ๋ฉ์๋ ๋ ์ฌ์ ์ํด์ผ ํฉ๋๋ค . Tomcat์ ์ฐ๋ฆฌ๊ฐ ์์
ํ ์ ์ฌํ ์์ฒญ ๋ฐ ์๋ต ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค. ์์ํ๋ ค๋ฉด ์์ฒญ ์ด๋ฆ์ ์ถ์ถํ๊ณ ์์์์ ๋ณด๋ธ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค(์์์ ๋ค๋ฅธ ์ด๋ฆ์ ์ง์ ํ ๊ฒฝ์ฐ ํด๋น ์ด๋ฆ ์ฌ์ฉ). ๊ทธ๋ฐ ๋ค์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ณ ์์ฑ๋ ์ฌ์ฉ์๋ฅผ ๋ชจ๋ธ์ ์ถ๊ฐํฉ๋๋ค. doPost()
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("pass");
User user = new User(name, password);
Model model = Model.getInstance();
model.add(user);
}
๋ทฐ์ ๋ฐ์ดํฐ ์ ๋ฌ
ListServlet ์ผ๋ก ๋์ด๊ฐ์๋ค . ๋ฐฉ๋ฒdoGet()
์ ์ด๋ฏธ ๊ตฌํ๋์ด ์์ต๋๋ค. ๋จ์ํ ๋ณด๊ธฐ( list.jsp )๋ก ์ ์ด๋ฅผ ์ ์กํฉ๋๋ค. ์์ง ์๋ ๊ฒฝ์ฐ AddServlet ์ ๋ฉ์๋์ ์ ์ฌํ๊ฒ ์์ฑํ์ญ์์ค . ์ด์ ๋ชจ๋ธ์์ ์ฌ์ฉ์ ์ด๋ฆ ๋ชฉ๋ก์ ๊ฐ์ ธ์ ๋ณด๊ธฐ์ ์ ๋ฌํ๋ฉด ์ข์ ๊ฒ์
๋๋ค. ์ด๋ฅผ ์ํด Tomcat ์์ ๋ฐ์ ์์ฒญ ๊ฐ์ฒด๋ฅผ ๋ค์ ์ฌ์ฉํฉ๋๋ค . ์ด ๊ฐ์ฒด์ ์์ฑ์ ์ถ๊ฐํ์ฌ ์ผ์ข
์ ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ค์ ๋ก ๋ทฐ์ ์ ๋ฌํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค .. ์๋ธ๋ฆฟ์์ ๋ทฐ๋ก ์ ์ด๋ฅผ ์ ์กํ ๋ ์๋ธ๋ฆฟ์ด ๋ฐ์ ๊ฒ๊ณผ ๋์ผํ ์์ฒญ ๋ฐ ์๋ต ๊ฐ์ฒด๋ฅผ ๋ทฐ์ ์ ๋ฌํ๋ค๋ ์ฌ์ค ๋๋ฌธ์ ์์ฒญ ๊ฐ์ฒด์ ์ด๋ฆ ๋ชฉ๋ก์ ์ถ๊ฐํ ๋ค์ ์์ฒญ์์ ์ฌ์ฉ์ ์ด๋ฆ ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ณด๊ธฐ์ ๊ฐ์ฒด์
๋๋ค. ์ฐ๋ฆฌ๋ ListServlet ํด๋์ค ๋ก ์์
์ ๋ง์ณค ์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ์ ์ฒด ํด๋์ค์ ์ฝ๋๋ฅผ ์ ์ํ๊ฒ ์ต๋๋ค.
package app.servlets;
import app.model.Model;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class ListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Model model = Model.getInstance();
List<String> names = model.list();
req.setAttribute("userNames", names);
RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/list.jsp");
requestDispatcher.forward(req, resp);
}
}
JSP ํ์ผ์์ Java ์ฝ๋ ์คํ
list.jsp ๋ฅผ ์ดํด๋ณผ ์๊ฐ์ ๋๋ค . ListServlet์ด ์ ์ด๋ฅผ ์ ์กํ ๋๋ง ์คํ๋ฉ๋๋ค . ๋ํ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์๋ธ๋ฆฟ์ ๋ชจ๋ธ์์ ์ฌ์ฉ์ ์ด๋ฆ ๋ชฉ๋ก์ ์ค๋นํ๊ณ ์ฌ๊ธฐ ์์ฒญ ๊ฐ์ฒด์ ์ ๋ฌํ์ต๋๋ค. ์ด๋ฆ ๋ชฉ๋ก์ด ์์ผ๋ฏ๋ก ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณตfor
ํ๊ณ ๊ฐ ์ด๋ฆ์ ํ์ํ ์ ์์ต๋๋ค. ์ด์ ์ ๋งํ๋ฏ ์ด JSP ํ์ผ์ Java ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค (์ ์ HTML ํ์ด์ง์ ๋ค๋ฅธ ์ ). ์ผ๋ถ ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋ค์ ๊ตฌ์ฑ์ ์ ์ ํ ์์น์ ๋ฐฐ์นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
<!-- html code -->
<%
// Java code
%>
<!-- html code -->
์ด ๊ตฌ์ฑ ๋ด์์ ์ฌ๋ฌ ๋ณ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- request โ ๋จ์ํ req ๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๋ธ๋ฆฟ์์ ์ ๋ฌํ ์์ฒญ ๊ฐ์ฒด์ ๋๋ค .
- ์๋ต - ์๋ต ๊ฐ์ฒด( ์๋ธ๋ฆฟ์์ resp ๋ผ๊ณ ํจ)
- out โ JspWriter ๊ฐ์ฒด(์ผ๋ฐ Writer ๋ฅผ ์์ํจ)๋ก, HTML ํ์ด์ง ์์ฒด ์ ์ง์ ๋ฌด์ธ๊ฐ๋ฅผ "์ฐ๋" ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค . out.println("Hello, World!") ๋ฌธ ์ System.out.println("Hello, World!") ์ ๋งค์ฐ ์ ์ฌ ํ์ง๋ง ํผ๋ํ์ง ๋ง์ญ์์ค!
- out.println()์ HTML ํ์ด์ง ์ "์ฐ๊ณ " System.out.println ์ ์์คํ ์ถ๋ ฅ ์คํธ๋ฆผ ์ ์๋๋ค . Java ์ฝ๋๊ฐ ์๋ JSP ์น์ ๋ด์์ System.out.println()์ ํธ์ถํ๋ฉด Tomcat ์ฝ์ ์๋ ๊ฒฐ๊ณผ๊ฐ ํ์๋์ง๋ง ํ์ด์ง์๋ ํ์๋์ง ์์ต๋๋ค.
<ul>
<%
List<String> names = (List<String>) request.getAttribute("userNames");
if (names != null && !names.isEmpty()) {
for (String s : names) {
out.println("<li>" + s + "</li>");
}
}
%>
</ul>
์ฌ์ฉ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๋ชฉ๋ก์ ํ์ํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ง ์ฌ์ฉ์๊ฐ ์๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด ์น์
์ ์ฝ๊ฐ ๋ค์ ์์ฑํ ์ ์์ต๋๋ค.
<%
List<String> names = (List<String>) request.getAttribute("userNames");
if (names != null && !names.isEmpty()) {
out.println("<ui>");
for (String s : names) {
out.println("<li>" + s + "</li>");
}
out.println("</ui>");
} else out.println("<p>There are no users yet!</p>");
%>
์ด์ ์๋ธ๋ฆฟ์์ ๋ทฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์์์ผ๋ฏ๋ก AddServlet์ ๊ฐ์ ํ์ฌ ์ฑ๊ณต์ ์ธ ์ฌ์ฉ์ ์ถ๊ฐ์ ๋ํ ์๋ฆผ์ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด doPost()
๋ฉ์๋์์ ์ ์ฌ์ฉ์๋ฅผ ๋ชจ๋ธ์ ์ถ๊ฐํ ํ ์ด ์ฌ์ฉ์ ์ด๋ฆ์ req ๊ฐ์ฒด์ ์์ฑ์ ์ถ๊ฐํ๊ณ ์ปจํธ๋กค์ ๋ทฐ ( add.jsp )๋ก ๋ค์ ๋๊ธธ ์ ์์ต๋๋ค. ์ด์ Java ์ฝ๋๊ฐ ํฌํจ๋ ์น์
์ ์ถ๊ฐํ์ฌ ์์ฒญ์ ์ด๋ฌํ ์์ฑ์ด ์๋์ง ํ์ธํ๊ณ ํด๋น ์์ฑ์ด ์์ผ๋ฉด ์ฌ์ฉ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ถ๊ฐ๋์๋ค๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ ํ AddServlet ์ ์ ์ฒด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
package app.servlets;
import app.entities.User;
import app.model.Model;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class AddServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
requestDispatcher.forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("pass");
User user = new User(name, password);
Model model = Model.getInstance();
model.add(user);
req.setAttribute("userName", name);
doGet(req, resp);
}
}
์ฌ๊ธฐ์์ ๋ฉ์๋์ ๋์์ doPost()
๋ชจ๋ธ์ ์ถ๊ฐ๋ ์ฌ์ฉ์์ ์ด๋ฆ์ผ๋ก ์์ฑ์ ์์ฑํ ๋ค์ doGet()
ํ์ฌ ์์ฒญ ๋ฐ ์๋ต์ ์ ๋ฌํ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ด doGet()
๋ฉ์๋๋ ์ด์ ์์ฑ์ผ๋ก ์ฒจ๋ถ๋ ์ถ๊ฐ๋ ์ฌ์ฉ์์ ์ด๋ฆ์ด ์๋ ์์ฒญ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ ๋ณด๊ธฐ๋ก ์ ์ด๋ฅผ ์ ์กํฉ๋๋ค. ๋จ์ ์์
์ ๊ทธ๋ฌํ ์์ฑ์ด ์์ ๊ฒฝ์ฐ ์๋ฆผ์ ํ์ํ๋๋ก add.jsp๋ฅผ ์์ ํ๋ ๊ฒ์
๋๋ค. ๋ค์์ add.jsp ์ ์ต์ข
๋ฒ์ ์
๋๋ค .
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Add new user</title>
</head>
<body>
<div>
<h1>Super app!</h1>
</div>
<div>
<%
if (request.getAttribute("userName") != null) {
out.println("<p>User '" + request.getAttribute("userName") + "' added!</p>");
}
%>
<div>
<div>
<h2>Add user</h2>
</div>
<form method="post">
<label>Name:
<input type="text" name="name"><br />
</label>
<label>Password:
<input type="password" name="pass"><br />
</label>
<button type="submit">Submit</button>
</form>
</div>
</div>
<div>
<button onclick="location.href='/'">Back to main</button>
</div>
</body>
</html>
ํ์ด์ง ๋ณธ๋ฌธ์ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ํค๋๊ฐ ์๋ div;
- ์ฌ์ฉ์ ์ด๋ฆ์ด ์๋ ์์ฑ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ด์ฉ์ ํฌํจํ๋ div ์ปจํ ์ด๋
- ์ฌ์ฉ์ ์ถ๊ฐ ์์์ด ํฌํจ๋ div
- ํ๋จ์๋ ํ ํ์ด์ง๋ก ๋์๊ฐ๋ ๋ฒํผ์ด ์๋ ๋ฐ๋ฅ๊ธ์ด ์์ต๋๋ค.
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Users</title>
</head>
<body>
<div>
<h1>Super app!</h1>
</div>
<div>
<div>
<div>
<h2>Users</h2>
</div>
<%
List<String> names = (List<String>) request.getAttribute("userNames");
if (names != null && !names.isEmpty()) {
out.println("<ui>");
for (String s : names) {
out.println("<li>" + s + "</li>");
}
out.println("</ui>");
} else out.println("<p>There are no users yet!</p>");
%>
</div>
</div>
<div>
<button onclick="location.href='/'">Back to main</button>
</div>
</body>
</html>
๋ฐ๋ผ์ ์ฌ์ฉ์๋ฅผ ์ ์ฅ ๋ฐ ์ถ๊ฐํ๊ณ ์ฌ์ฉ์ ์ด๋ฆ ๋ชฉ๋ก์ ํ์ํ ์ ์๋ ์๋ฒฝํ๊ฒ ์๋ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ต๋๋ค. ์ด์ ์ด์๊ฒ ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค... :)
์คํ์ผ์ ์ถ๊ฐํฉ๋๋ค. W3.CSS ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
ํ์ฌ ์ฐ๋ฆฌ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ํ์ง๋ง ์์ ํ ํฐ๋ฌด๋์์ด ๋ณด์ ๋๋ค. ์ด์ ๋ฐฐ๊ฒฝ์ ์ถ๊ฐํ๊ณ , ํ ์คํธ์ ๋ฒํผ์ ์์์ ์ง์ ํ๊ณ , ๋ชฉ๋ก์ ์คํ์ผ์ ์ถ๊ฐํ๊ณ , ์์๋ฅผ ์ ๋ ฌํ๊ณ , ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์คํ์ผ์ ์๋์ผ๋ก ์์ฑํ๋ ค๋ฉด ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ์ ๊ฒฝ์ด ์ฐ์ผ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ ๋ W3.CSS ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ ์ํฉ๋๋ค. ์ด๋ฏธ ์คํ์ผ์ด ์๋ ์ฆ์ ์ฌ์ฉํ ์ ์๋ ํด๋์ค๊ฐ ์์ต๋๋ค. ์ฌ์ฉํ๋ ค๋ CSS ํด๋์ค๋ฅผ ์ฌ๋ฐ๋ฅธ ์์น์ ๋ฐฐ์นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ํ์ด์ง์ ์ถ๊ฐํ๋ ค๋ฉด ๋จผ์ ์คํ์ผ ํ์ผ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.-
ํ์ด์ง๋ฅผ ์ดํด๋ณด๊ณ ํค๋ ์น์ ์ ์คํ์ผ ํ์ผ์ ๋ํ ๋ค์ ์ง์ ๋งํฌ๋ฅผ ์ฝ์ ํ์ญ์์ค.
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
์ด ์ต์ ์ ์๊ตฌ์ ์ธ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์๋ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค. ๋ก์ปฌ ์๋ฒ์์ ํ์ด์ง๋ฅผ ์ด๋ฉด ์ธํฐ๋ท์์ ์คํ์ผ์ ๊ฐ์ ธ์ต๋๋ค.
-
๊ทธ๋ฌ๋ ๋ชจ๋ ์คํ์ผ์ ๋ก์ปฌ์์ ์ฌ์ฉํ๊ณ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ์์กดํ์ง ์์ผ๋ ค๋ฉด ์คํ์ผ ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ ์น ํด๋ ( ์: web/styles/w3.css )์ ์ ์ฅํ์ญ์์ค. ๊ทธ๋ฐ ๋ค์ ๋ชจ๋ ํ์ด์ง( index.html, add.jsp, list.jsp )๋ฅผ ์ดํด๋ณด๊ณ head ์น์ ๋ด๋ถ์ ์คํ์ผ ํ์ผ์ ๋ค์ ๋งํฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค .
<link rel="stylesheet" href="styles/w3.css">
๊ทธ๋ฐ ๋ค์ ํ๊ทธ๋ฅผ ์ดํด๋ณด๊ณ ์ํ๋ ์คํ์ผ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ๋๋ ์ด๊ฒ์ ๋ํด ์์ธํ ๋ค๋ฃจ์ง ์์ ๊ฒ์ ๋๋ค. ๋์ ๋์คํฐ ์คํ์ผ ํด๋์ค๊ฐ ํฌํจ๋ ํ์ผ 3๊ฐ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฒ์ ์ ์ ๊ณตํ๊ฒ ์ต๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Super app!</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
</head>
<body class="w3-light-grey">
<div class="w3-container w3-blue-grey w3-opacity w3-right-align">
<h1>Super app!</h1>
</div>
<div class="w3-container w3-center">
<div class="w3-bar w3-padding-large w3-padding-24">
<button class="w3-btn w3-hover-light-blue w3-round-large" onclick="location.href='/list'">List users</button>
<button class="w3-btn w3-hover-green w3-round-large" onclick="location.href='/add'">Add user</button>
</div>
</div>
</body>
</html>
add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Add new user</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
</head>
<body class="w3-light-grey">
<div class="w3-container w3-blue-grey w3-opacity w3-right-align">
<h1>Super app!</h1>
</div>
<div class="w3-container w3-padding">
<%
if (request.getAttribute("userName") != null) {
out.println("<div class=\"w3-panel w3-green w3-display-container w3-card-4 w3-round\">\n" +
" <span onclick=\"this.parentElement.style.display='none'\"\n" +
" class=\"w3-button w3-margin-right w3-display-right w3-round-large w3-hover-green w3-border w3-border-green w3-hover-border-grey\">ร</span>\n" +
" <h5>User '" + request.getAttribute("userName") + "' added!</h5>\n" +
"</div>");
}
%>
<div class="w3-card-4">
<div class="w3-container w3-center w3-green">
<h2>Add user</h2>
</div>
<form method="post" class="w3-selection w3-light-grey w3-padding">
<label>Name:
<input type="text" name="name" class="w3-input w3-animate-input w3-border w3-round-large" style="width: 30%"><br />
</label>
<label>Password:
<input type="password" name="pass" class="w3-input w3-animate-input w3-border w3-round-large" style="width: 30%"><br />
</label>
<button type="submit" class="w3-btn w3-green w3-round-large w3-margin-bottom">Submit</button>
</form>
</div>
</div>
<div class="w3-container w3-grey w3-opacity w3-right-align w3-padding">
<button class="w3-btn w3-round-large" onclick="location.href='/'">Back to main</button>
</div>
</body>
</html>
list.jsp
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Users list</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
</head>
<body class="w3-light-grey">
<div class="w3-container w3-blue-grey w3-opacity w3-right-align">
<h1>Super app!</h1>
</div>
<div class="w3-container w3-center w3-margin-bottom w3-padding">
<div class="w3-card-4">
<div class="w3-container w3-light-blue">
<h2>Users</h2>
</div>
<%
List<String> names = (List<String>) request.getAttribute("userNames");
if (names != null && !names.isEmpty()) {
out.println("<ul class=\"w3-ul\">");
for (String s : names) {
out.println("<li class=\"w3-hover-sand\">" + s + "</li>");
}
out.println("</ul>");
} else out.println("<div class=\"w3-panel w3-red w3-display-container w3-card-4 w3-round\">\n"
+
" <span onclick=\"this.parentElement.style.display='none'\"\n" +
" class=\"w3-button w3-margin-right w3-display-right w3-round-large w3-hover-red w3-border w3-border-red w3-hover-border-grey\">ร</span>\n" +
" <h5>There are no users yet!</h5>\n" +
"</div>");
%>
</div>
</div>
<div class="w3-container w3-grey w3-opacity w3-right-align w3-padding">
<button class="w3-btn w3-round-large" onclick="location.href='/'">Back to main</button>
</div>
</body>
</html>
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ ๋ค์ผ. :) ์ฌ์ ํ ๊ถ๊ธํ ์ ์ด๋ ์๊ฒฌ์ด ์๊ฑฐ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ผ๋ฉด ์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ๋์๋์ง์ ๋ํ ๋ช ๊ฐ์ง ์คํฌ๋ฆฐ์ท์ ์ฒจ๋ถํ๊ฒ ์ต๋๋ค.
- ์๋ธ๋ฆฟ๊ณผ JSP๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ์๋ฅผ ์ญ์ ํ๊ณ ๋ค๋ฅธ ์์ ์ถ๊ฐํ์ฌ ๊ธฐ์กด ์ฌ์ฉ์๋ฅผ ํธ์งํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋ ์ง์ ํ CRUD ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ๊ฒ์ ๋๋ค. ;)
- ์ถ๊ฐ๋ ์ฌ์ฉ์๊ฐ ์๋ฒ๋ฅผ ๋ค์ ์์ํ ํ์ ์ฌ๋ผ์ง์ง ์๋๋ก ๋ชฉ๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ต์ฒดํ์ญ์์ค. :)
GO TO FULL VERSION