<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>폼테스트</title>
</head>
<body>
<h2>폼테스트</h2>
<!-- <form method="get" action="1_formtest_ok.jsp"> get방식-->
<!-- <form method="post" action="1_formtest_ok.jsp"> post방식-->
<form method="post" action="Formtest">
<p>메세지: <input type="text" name="msg"> </p>
<p><button>전송</button></p>
</form>
</body>
</html>
formtest.java(servlet)
package com.koreait;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Formtest
*/
@WebServlet("/Formtest")
public class Formtest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Formtest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("get 방식 호출");
String msg = request.getParameter("msg");
PrintWriter out = response.getWriter();
out.print(msg);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("post 방식 호출");
String msg = request.getParameter("msg");
PrintWriter out = response.getWriter();
out.print(msg);
}
}
결과
post 방식 호출 만 출력된다!
post 매개변수 테스트할수있는 라이브러리가 있다
postman
https://www.postman.com/downloads/
post 테스트 할수있는 라이브러리
calc.java 라는 서블릿 코드가 있다
package com.koreait;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Calc
*/
@WebServlet("/Calc")
public class Calc extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Calc() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("get으로 호출할 수 없습니다");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
int result = num1 +num2;
PrintWriter out =response.getWriter();
out.print(result);
}
}
이클립스를 통해 이페이지를 실행시키면
빈화면이 나오는게 맞지만 콘솔을보면
--결과--
get으로 호출할 수 없습니다
쟤가 출력된다
즉 그냥 실행하면 get이 기본적으로 실행되는것이다
그리고나서 주소를 복사해서
포스트맨을 통해 포스트로 테스트가 가능
REST(Representational State Transfer)
- 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미
- 자원: 소프트웨어가 관리하는 모든 것(문서, 이미지, 데이터 ..)
- json, xml을 통해 데이터를 주고 받는 것이 일반적
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API사용을 위한 별도의 인프라를 구축할 필요가 없음
- HTTP 표준 프로토콜에 따른 모든 플랫폼에서 사용이 가능
- 서버와 클라이언트의 역할을 명확하게 분리(프론트엔드 - 백엔드)
단점
- 표준이 존재하지 않음(백엔드 개발자 마음대로라는 말임)
- 사용할 수 있는 메소드의 형태가 제한적
- 구형 브라우저가 아직 지원하지 않는 부분이 존재할 수 있음(이거는큰걱정안해도됨)
스프링에서는 json 을 지원하만
서블릿에서는 지원하지않아서 라이브러리를 깔아야함
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220924</version>
</dependency>
<!-- https://mvnr
postman 을 이용해서 테스트
jsontest.java
package com.koreait;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
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 org.json.JSONObject;
/**
* Servlet implementation class Jsontest
*/
@WebServlet("/Jsontest")
public class Jsontest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Jsontest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ArrayList<User> list = new ArrayList();
list.add(new User(1,"apple","김사과",20,"010-1111-1111","서울 서초구"));
list.add(new User(2,"banana","반하나",20,"010-2222-2222","서울 강남구"));
list.add(new User(3,"orange","오렌지",20,"010-3333-3333","서울 동작구"));
list.add(new User(4,"melon","이메론",20,"010-4444-4444","서울 구로구"));
list.add(new User(5,"cherry","채리",20,"010-5555-5555","서울 금천구"));
JSONObject result = new JSONObject();
int idx = Integer.parseInt(request.getParameter("idx"));
User user = list.get(idx-1);
result.put("idx",user.getIdx());
result.put("userid",user.getUserid());
result.put("name",URLEncoder.encode(user.getName()));
result.put("age",user.getAge());
result.put("hp",user.getHp());
result.put("address",URLEncoder.encode(user.getAddress()));
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.print(result);
out.flush();
out.close();
}
}
주소를 복붙
idx 입력하고 아무 1~5중 아무값 넣어주면 출력됨
db로 데이터 불러와서 json화 하기
jsontest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>json 테스트</title>
<style type="text/css">
table{width:600px; border:1px solid deepskyblue;}
</style>
<script>
fetch('http://localhost:8080/Day8/MemberView?userid=dpfmaptm1534').then(function(response){
response.json().then(function(json){
console.log(json);
for(let key in json){
document.querySelector('#detail').innerHTML +=
"<tr><td>" + json[key] + "</td></tr>";
console.log(json[key]);
}
});
} );
</script>
</head>
<body>
<h2>json테스트</h2>
<table id="detail"></table>
</body>
</html>
memberview.java(서블릿)
package com.koreait;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
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 org.json.JSONObject;
/**
* Servlet implementation class MemberView
*/
@WebServlet("/MemberView")
public class MemberView extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MemberView() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ArrayList<Member> list = new ArrayList();
response.setCharacterEncoding("UTF-8");
JSONObject result = new JSONObject();
String userid = request.getParameter("userid");
System.out.println(userid);
memberDAO dao = new memberDAO();
Member member = dao.insertData(userid);
result.put("userid",member.getUserid());
result.put("userpw",member.getUserpw());
result.put("username",member.getUsername());
result.put("hp",member.getHp());
result.put("email",member.getEmail());
result.put("hobby",member.getHobby());
result.put("ssn1",member.getSsn1());
result.put("ssn2",member.getSsn2());
result.put("zipcode",member.getZipcode());
result.put("address1",member.getAddress1());
result.put("address2",member.getAddress2());
result.put("address3",member.getAddress3());
result.put("regdate",member.getRegdate());
result.put("gender",member.getGender());
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.print(result);
out.flush();
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Member테이블의 멤버정보를 Json으로 전달하는 프로그램을 작성
//(단 멤버의 번호(mem_idx)를 전달받아 해당 번호의 멤버정보를 출력)
response.setCharacterEncoding("UTF-8");
ArrayList<Member> list = new ArrayList();
JSONObject result = new JSONObject();
String userid = request.getParameter("userid");
System.out.println(userid);
memberDAO dao = new memberDAO();
Member member = dao.insertData(userid);
result.put("userid",member.getUserid());
result.put("userpw",member.getUserpw());
result.put("username",member.getUsername());
result.put("hp",member.getHp());
result.put("email",member.getEmail());
result.put("hobby",member.getHobby());
result.put("ssn1",member.getSsn1());
result.put("ssn2",member.getSsn2());
result.put("zipcode",member.getZipcode());
result.put("address1",member.getAddress1());
result.put("address2",member.getAddress2());
result.put("address3",member.getAddress3());
result.put("regdate",member.getRegdate());
result.put("gender",member.getGender());
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.print(result);
out.flush();
out.close();
}
}
memberDAO.java(자바파일)
package com.koreait;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.koreait.db.Dbconn;
import com.koreait.Member;
public class memberDAO {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "";
Member member;
public Member insertData(String userid) {
try {
conn = Dbconn.getConnection();
sql = "select * from tb_member where mem_userid=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,userid);
rs = pstmt.executeQuery();
while(rs.next()) {
member = new Member(
rs.getString("mem_userid"),
rs.getString("mem_userpw"),
rs.getString("mem_username"),
rs.getString("mem_hp"),
rs.getString("mem_email"),
rs.getString("mem_hobby"),
rs.getString("mem_ssn1"),
rs.getString("mem_ssn2"),
rs.getString("mem_zipcode"),
rs.getString("mem_address1"),
rs.getString("mem_address2"),
rs.getString("mem_address3"),
rs.getString("mem_regdate"),
rs.getString("mem_gender"));
}
}catch(Exception e) {
e.printStackTrace();
}
return member;
}
}
member.java
package com.koreait;
public class Member {
private String userid;
private String userpw;
private String username;
private String hp;
private String email;
private String hobby;
private String ssn1;
private String ssn2;
private String zipcode;
private String address1;
private String address2;
private String address3;
private String regdate;
private String gender;
public Member(String userid, String userpw, String username, String hp, String email, String hobby, String ssn1,
String ssn2, String zipcode, String address1, String address2, String address3, String regdate,
String gender) {
super();
this.userid = userid;
this.userpw = userpw;
this.username = username;
this.hp = hp;
this.email = email;
this.hobby = hobby;
this.ssn1 = ssn1;
this.ssn2 = ssn2;
this.zipcode = zipcode;
this.address1 = address1;
this.address2 = address2;
this.address3 = address3;
this.regdate = regdate;
this.gender = gender;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUserpw() {
return userpw;
}
public void setUserpw(String userpw) {
this.userpw = userpw;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getHp() {
return hp;
}
public void setHp(String hp) {
this.hp = hp;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getSsn1() {
return ssn1;
}
public void setSsn1(String ssn1) {
this.ssn1 = ssn1;
}
public String getSsn2() {
return ssn2;
}
public void setSsn2(String ssn2) {
this.ssn2 = ssn2;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getAddress1() {
return address1;
}
public void setAddress1(String address1) {
this.address1 = address1;
}
public String getAddress2() {
return address2;
}
public void setAddress2(String address2) {
this.address2 = address2;
}
public String getAddress3() {
return address3;
}
public void setAddress3(String address3) {
this.address3 = address3;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
크롤링
메이븐으로 jsoup 추가
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
실습1-cgv 영화 차트 빼오기
package com.koreait.crawling;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Crawling1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 메이븐에서org.jsoup
String url = "http://www.cgv.co.kr/movies/";
// System.out.println("접속주소: "+ url);
Document doc = null;
try {
doc = Jsoup.connect(url).get();
// System.out.println("접속성공");
// System.out.println(doc.html());
}catch(Exception e) {
e.printStackTrace();
}
Elements elements = doc.select("div.sect-movie-chart");
Iterator<Element> rank = elements.select("strong.rank").iterator();
Iterator<Element> title = elements.select("strong.title").iterator();
while(rank.hasNext()) {
System.out.println(rank.next().text() + " : " + title.next().text());
}
}
}
--결과--
No.1 : 올빼미
No.2 : 탄생
No.3 : 엔시티 드림 더 무비 : 인 어 드림
No.4 : 압꾸정
No.5 : (라이브뷰잉)Ensemble Stars!! DREAM LIVE -7th Tour Allied Worlds- Live Viewing
No.6 : 오늘 밤, 세계에서 이 사랑이 사라진다 해도
No.7 : 너와 사랑한 시간
No.8 : 원피스 필름 레드
No.9 : 본즈 앤 올
No.10 : 만인의 연인
No.11 : 요정
No.12 : 유포자들
No.13 : 블랙 팬서-와칸다 포에버
No.14 : 데시벨
No.15 : SIFF2022-다섯 번째 흉추
No.16 : 동감
No.17 : SIFF2022-괴인
No.18 : SIFF2022-디어 평양
No.19 : SIFF2022-지옥만세
실습2 - 벅스 순위 100차트 빼오기
package com.koreait.crawling;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Crawling2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 메이븐에서org.jsoup
String url = "https://music.bugs.co.kr/chart";
// System.out.println("접속주소: "+ url);
Document doc = null;
try {
doc = Jsoup.connect(url).get();
// System.out.println("접속성공");
// System.out.println(doc.html());
}catch(Exception e) {
e.printStackTrace();
}
Elements elements = doc.select("div.innerContainer");
Iterator<Element> title = elements.select("p.title").iterator();
Iterator<Element> artist = elements.select("p.artist").iterator();
Iterator<Element> ranking = elements.select("div.ranking strong").iterator();
while(title.hasNext()) {
System.out.println(ranking.next().text() +"위 "+ title.next().text() + " - " + artist.next().text());
}
}
}
--결과--
1위 WHEN I MOVE - 카라(Kara)
2위 사건의 지평선 - 윤하(Younha/ユンナ)
3위 Hype Boy - NewJeans
4위 Dreamers [Music from the FIFA World Cup Qatar 2022 Official Soundtrack] (feat. FIFA Sound) - 정국 정국
.
.
길어서 생략
.
100위 MY BAG - (여자)아이들
실습3 - 네이버 영화리뷰 빼오기
package com.koreait.crawling;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.koreait.Member;
import com.koreait.db.Dbconn;
public class Crawling3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//과제
//네이버 영화에서 영화제목, 평점, 리뷰를 크롤링
//(단, 10페이지의 데이터를 크롤리앟여 db에 저장)
// 메이븐에서org.jsoup
int maxnum=10;
String movieurl = "https://movie.naver.com/movie/point/af/list.naver?page=";
// System.out.println("접속주소: "+ url);
String url="";
Document doc = null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "";
int a=0;
for(int i=1;i<=maxnum;i++) {
url=movieurl+i;
try {
doc = Jsoup.connect(url).get();
// System.out.println("접속성공");
// System.out.println(doc.html());
}catch(Exception e) {
e.printStackTrace();
}
Elements elements = doc.select("table.list_netizen");
Iterator<Element> title = elements.select("a.movie.color_b").iterator();
Iterator<Element> starpoint = elements.select("div.list_netizen_score em").iterator();
Iterator<Element> text = elements.select("td.title").iterator();
while(title.hasNext()) {
String m_title = title.next().text();
String m_point = starpoint.next().text();
String tempreview = text.next().text().substring(m_title.length()+12);
int firstspace = tempreview.indexOf(" ");
String delspace = tempreview.substring(firstspace);
String delcomplain = delspace.substring(0,delspace.length()-2);
String m_review = delcomplain;
System.out.println(m_title + " - " + m_point + " - " + m_review);
try {
conn = Dbconn.getConnection();
sql = "insert into tb_movie(m_title,m_point,m_review) values(?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,m_title);
pstmt.setString(2,m_point);
pstmt.setString(3,m_review);
a = pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}
}
}
System.out.println("쿼리반영성공");
}
}
--결과--
킹스맨: 퍼스트 에이전트 - 8 - 의외의 재미와 액션, 캐릭터의 매력이 골고루 있는 영화!
타짜 - 9 - 봐도봐도 재밌고 김장되고, 배우들도 매력적인 영화다
스파이더맨: 노 웨이 홈 - 10 - 재미와 감동을 모두 준 스파이더 맨!!
채털리 부인의 연인 - 4 - 흠.... 넷플릭스가 최근 시청률 올리며 노력(?)하는 것은 알았는데...
.
.
생략
.
.
블랙 아담 - 6 - 드웨인 존슨 나온대서 기대했는데 뭔가 아쉬움
올빼미 - 10 - 반전의 반전의 반전인 영화 .. 진짜 강추드립니다 처음부터 끝까지 손에 땀나면서 봤던거 같아요 연말 최고의 영화 ....!
쿼리반영성공
'웹 개발 > 🎆 JSP' 카테고리의 다른 글
전자정부 Spring 3.1버전 인터셉터로 로그인 세션체크 (0) | 2024.03.19 |
---|---|
three.js JSP에 적용하기 (0) | 2024.03.08 |
JSP | 사진첨부파일 업로드,수정,삭제 가능한 게시판 (0) | 2022.12.04 |
JSP | JSP영역,EL표현식,JSTL,Maven,fileupload (0) | 2022.11.30 |
JSP | JavaBean,DAO,DTO (0) | 2022.11.29 |