mybatis 를 이용해서 쿼리문 이용하다가 에러가 났다. 

 

이유는, 

PostRepository.java

package com.poscoict.jblog.repository;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.poscoict.jblog.vo.PostVo;

@Repository
public class PostRepository {
	@Autowired
	private SqlSession sqlSession;

	public List<PostVo> getPost(String blog_id) {
		return sqlSession.selectList("post.fintByid",blog_id);
	}
	
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="post">
	<select id="findByid" parameterType="string" resultType="list">
	<![CDATA[
		select * 
		from post
		ORDER BY no DESC;
	]]>
	</select>
</mapper>

PostRepository에서 list로 쿼리 결과값을 받아서 그럼 post.xml에서도 list로 반환하겠지? 라고 생각했는데

아니였다. 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="post">
	<select id="findByid" parameterType="long" resultType="postvo">
	<![CDATA[
		select * 
		from post
		where category_no=#{category_no}
		ORDER BY no DESC;
	]]>
	</select>
</mapper>

 

List<PostVo>로 받기 때문에

resultType을 PostVo의 별칭인 postvo로 설정해주니깐 됐다!!!

 

'study > java' 카테고리의 다른 글

[Tomcat] 설치 및 eclipse 설정  (0) 2022.01.01
JAVA 상속(2)  (0) 2021.12.04
JAVA 상속  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
java Ajax 연습하기  (0) 2020.07.25

mysql -u root -p할 때 오류남

 

 

service mysql restart

Redirecting to /bin/systemctl restart mysql.service

systemctl start mariadb
mysql -u root -p

하니깐 된다!!

'study > JAVA 전문가' 카테고리의 다른 글

[linux] 톰캣 설치  (0) 2022.01.26
[HTML/CSS]  (0) 2022.01.11
[JSP] filter  (0) 2022.01.06
[JSP] 방명록 프로그램  (0) 2022.01.05
[JSP] EL  (0) 2022.01.05
  1. ifconfig로 ip 확인
IPADDR=192.168.0.69
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=168.126.63.1
DNS2=168.126.63.2

DNS는 nslookup www.----.com  을 통해서 알아냈다. 

2. tomcat 압축 풀기

tar xvfz apache-tomcat-8.5.75.tar.gz

3. 톰캣 위치 옮기기

mv apache-tomcat-8.5.75

/usr/local/poscoict/tomcat8.5에 확인

4. 톰캣 실행

[root@localhost poscoict]# tomcat8.5/bin/catalina.sh start

 

5. 작업 관리자 확인

ps -ef | grep tomcat

 

6. 네트워크 열려져 있는 것 확인

netstat -anp | grep 8080

 

7. 톰캣 중단

/usr/local/poscoict/tomcat8.5/bin/catalina.sh stop

 

8. 서비스 등록

 vi /usr/lib/systemd/system/tomcat.service

 

9. 톰캣 시작하고 종료하고 reboot해서 톰캣 확인 

- systemctl start tomcat
- ps -ef | grep tomcat
- systemctl stop tomcat
- sync
- sync
- sync
- sync
- sync

- reboot
- http://192.168.0.69:8080/

 

10. 

 vi /usr/local/poscoict/tomcat8.5/conf/tomcat-users.xml

해서 맨 밑 </tomcat-users>바로 위에

<role rolename="manager"/>
  <role rolename="manager-gui" />
  <role rolename="manager-script" />
  <role rolename="manager-jmx" />
  <role rolename="manager-status" />
  <role rolename="admin"/>
  <user username="admin" password="manager" roles="admin,manager,manager-gui, manager-script, manager-jmx, manager-status"/>

붙여넣기

 

여기서 비밀번호 잘 기억

톰캣 manager app클릭하면 비밀번호 치는 거 나옴

 

11. tomcat manager 설정

vi /usr/local/douzone2021/tomcat/webapps/manager/META-INF/context.xml

원래 기존의 context 주석 처리해줌

<Context antiResourceLocking="false" privileged="true" docBase="${catalina.home}/webapps/manager">
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="^.*$" />
</Context>

추가해준다. 

 

12. 다시 시작해줘서 확인

systemctl stop tomcat
systemctl start tomcat

http://192.168.0.69:8080/manager/html 들어가서 manager app 들어가서 비번치면 manager들어가짐

Maven

  • 빌드, 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성관리, svn 등 손쉽게 할 수 있다.
  • 형상관리서버와 연동(SCMs), 배포 쉽게 가능
  • Coc (Converntion over Configuration)
    • 소스파일이 어느 위치에 있는 지를 미리 정함
  • 이점 : 직접 다운 받지 않아도 라이브러리 사용 가능
  • pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>kr.or.connect</groupId>
        <artifactId>examples</artifactId>
        <packaging>jar</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>mysample</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
        </depend​
  • groupId : 프로젝트 생성하는 조직 고유 아이디
    • com.poscoict
  • artifactId : 고유 아이디
    • 빌드하면 파일이 [고유아이디]-[version].jar로 파일이 생김
  • dependency
    • dependencies : 필요한 라이브러리 지정함

 

jsp 실행 순서

서블릿

  • 자바 웹 어플리케이션의 구성 요소 중 동적인 처리하는 역할
  • was에서 동작하는 java 클래스
  • HttpServlet클래스를 상속 받아야 함

브라우저 동작

브라우저 기본 구조

  1. 사용자 인터페이스 
  2. 브라우저 엔진 - 브라우저 sw 실행
  3. 렌더링 엔진 - 위치, 색, 표시 (브라우저 마다 다름)
    • Html 파싱 (DOM트리 구축) 
    • 렌더 트리 구축
    • 렌더 트리 배치
    • 렌더 트리 그리기 
  4. networking - 통신, http와 같은 네트워크 호출에 사용, 각 플랫폼 하부에서 실행됨
  5. java script interpreter - 자바 스크립트 코드 해석
  6. ui backend 

파싱 

  • 토큰 단위로 잘라서 실행하는 것
  • 2 +  3 - 1이면 다 잘라서 실행하는 것
  • Html 파서 : make up = tree 구조
  • css 파싱 : selectors와 Declarations있음
    • selectors : p
    • Declarations : Margin-top 3px 예로 들 수 있다.

https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

 

How Browsers Work: Behind the scenes of modern web browsers - HTML5 Rocks

In this comprehensive primer, you will learn what happens in the browser between when you type google.com in the address bar until you see the Google page on the browser screen.

www.html5rocks.com

 

웹 서버 동작

 

DBMS

  • 데이터 베이스 관리하는 sw
  • 보안이 나쁨
    • 다수의 사용자가 DB내에 접근할 수 있도록 함
    • 클라이언트 로직이 많으면 관리가 어려워짐

 

미들웨어

  • 비지니스 로직을 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하게 만듦
  • 클라이언튼느 입출력만 담당

WAS

  • 미들웨어
  • 클라이언트 요청 중 웹 app이 동작하도록 지원
  • 웹 서버 기능 내장함
  • 규모가 커질 수록 웹 서버와 WAS 분리함
  • 웹서버는 WAS보다 더 간단하다.

eclipse

  • perspective(조망) 개발(JAVA SE, JAVA EE) view 배치
  • 설정
    • encoding
      java Properties File빼고 다 UTF-8로
    • spelling disable
    • export
      • /.settings
      • /.classpath
      • .projects 가 있는 얘들 -> 커모
      • src 
      • pom.xml
    • 커버낫 프로젝트
      • maven -> /.settings, /.classpath, .projects가 나옴
      • 빌드툴 
        • src
        • pom.xml
        • (멀티 프로젝트 만들 수 있음)
          •  servlet-practice (부모) 
            • |--- helloweb (라이브러리 만드는 )
            • |--- guestbook (라이브러리 사용하는 app)
            • |--- mysite 
      • gradle

프로젝트 구조

  • 이클립스
    • project
      • |--- src 
        1. * .java
        2.  package
          1. 프로젝트의 구조를 나누는 역할
            • 기능 분리
          2. 클래스 충돌 방지
            • 구조를 잘 나눠야 한다. 
            • 개발하는 사람 기준 
            • 큰 데서 작은 곳으로
            • com.javax.hello ,,, ㄷ으등
      • |--- bin
        • 클래스 있음
          • cmd창에서 실행해보기
            1. 클래스가 어디에 있는지를 먼저 찾아야함 - class path필요
            2. java -cp . 위치

 

maven

  • 빌드 위치는 target
    • src, pom.xml 만 올려도 됨
  • |--- src
    • main
      • java
        • hello
          • HelloWorld.java
      • resources : 소스말고 다른 것 (설정파일) - 패키지 (컴파일 대상이 아님)
        • config
          • db.properties
  • |--- test ( 테스트 클래스 만드는 것 - 실패하면 빌드 안 함)
    • java
      • hello
        • HelloWorld.java

  • target
    • hello
      • HelloWorld.class
    • cinfig
      • db.properties

pom.xml - 빌드 옵션 설정하는 파일

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.poscoict</groupId>
	<artifactId>helloworld</artifactId>
	<version>0.0.1-SNAPSHOT</version>


	<properties>
		<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
	</properties>

	<dependencies>
	</dependencies>

	<build>
		<sourceDirectory>src/main/java</sourceDirectory>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<source>11</source>
					<target>11</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
  • pom추가해주고 
  • maven update해준다. 
  • 서버환경에 올려야해서 build해야 함 - J2SE-1.5가 바뀜
  • javaSE로 바꿔주기위해 configuration 바꿔줌

waven 실행

꼴 설정하고 run해주면 됨
따로 설정 안 해주려면 이렇게 적어놓으면 된다. 
실행 후 console
실행 후 생김

 

[문제]

게시판 만들다가 댓글을 입력하고 새로고침을 하면 댓글이 한 개 더 재 등록이 되는 것이다!

form태그에 submit이 계속 되는 것이다. 

 

구글링 한 결과 

https://hulbo.tistory.com/13

 

javascript 새로고침 방지

JavaScript 새로고침 방지 웹 개발을 하다보면 저장후 또는 삭제등 목록이나 여러 부분에서 액션 수행후 새로고침(F5)으로 인해 고생하는 경우가 있다. 액션이나 DB로 해결할 수도 있지만 간단하게

hulbo.tistory.com

 

1번방법을 사용했더니 됐다!!

<script type="text/javascript">
    //새로 고침 시 재 등록 방지
    function notReload(){
      if((event.ctrlKey == true && (event.keyCode == 78 || event.keyCode == 82)) || (event.keyCode == 116) ){
        event.keyCode = 0;
        event.cancelBubble = true;
        event.returnValue = false;
        var frm = document.addForm;
        frm.action = "액션값";
        frm.submit();
      }
    }
    document.onkeydown = notReload;
</script>

 

'study > 웹 프로그래밍' 카테고리의 다른 글

[boostcource] 웹 백엔드 1  (0) 2022.01.18
[jsp] 뒤로가기 누를 시 새로고침  (0) 2022.01.10
starting Tomcat v9.0 Server at localhost  (0) 2021.12.27

[문제]

게시판 만들다가 뒤로가기를 누르면 조회수가 증가하지 않았다. 

구글 검색 결과 

https://chicpro.dev/%EB%AA%A8%EB%B0%94%EC%9D%BC-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90%EC%84%9C-back-%EB%B2%84%ED%8A%BC-%ED%81%B4%EB%A6%AD%EC%8B%9C-%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B0%95%EC%A0%9C-%EB%A6%AC%EB%A1%9C/

 

모바일 브라우저에서 Back 버튼 클릭시 페이지 강제 리로딩 하기 – CHICPRO

 

chicpro.dev

딱 나랑 맞는 분을 찾았다. 

 

[해결]

게시판 보여주는 view.jsp코드로 가서 

<script type="text/javascript">
	window.onpageshow =  function(event) {
	    //back 이벤트 일 경우
	    if (event.persisted) {
	    	document.location.reload();
	    }
	}
</script>

맨 앞에 추가해줬더니 됐다. 

filter

필수는 아닌데 알고 있으며 편할 때가 있다. 

  • 서버 기동 될 때, 객체 생성함 
  • 서블릿 수행 되기 전, 수행되고 나서 역활 할 수 있는 것
  • 요청 왔을 때, 필터를 거쳐서 수행됨 (jsp, servlet, static file)
  • 로그 필터 - ex) 회사가 앞으로 한달 동안만 사이트의 어느 시간 때에 요청이 많이 오는 지 확인할 때.
  • 필터 갯수 제한 없음
  • 몇 번째 필터냐에서 순서가 달라짐
    • 순서는 필터의 이름 순서에 따라 달라진다.  - 알파벳 순
  • 한번 객체 생성되면 서버 죽을 때까지 유지됨
    • 서버 기동될 때 객체 생성 해 놓는다. 
  • chain.doFilter : 다음 친구를 수행 시켜라. - 수행해야함. 
    • servlet수행 하기 전에 전처리 할 내용 앞에 적음
    • 후 처리할 내용은 chain.doFilter호출 뒤에 적는다. 
    • 이거 안 하면 filter만 호출되고 응답해버림 (servlet안 해줌)
  • first(servlet) 요청(request 선택)할 때만 filter하겠다. 
  • httpservlet은 클래스라서 자유로웠는데 filter는 인터페이스
  • 다른 서블릿 요청할 때 수행 안 됨
    package filter;
    
    import java.io.IOException;
    import javax.servlet.DispatcherType;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    
    /**
     * filter 공부
     * 2022.01.06
     * init메소드가 맨 밑 - 알파벳 순
     */
    @WebFilter(dispatcherTypes = {DispatcherType.REQUEST }
    					, urlPatterns = { "/first" })
    public class FlowFilter implements Filter {
    	
        public FlowFilter() {
        	System.out.println("FlowFilter 객체 생성");
        }
    	public void destroy() {
    		
    	}
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    		System.out.println("---- 서블릿 수행 전 생성");
    		chain.doFilter(request, response);
    		System.out.println("---- 서블릿 수행 후 생성");
    	}
    	// 필터가 객체 생성할 때 - 서버가 기동할 때(서버 죽을 때까지 유지)
    	public void init(FilterConfig fConfig) throws ServletException {
    		System.out.println("FlpwFilter 객체 초기화");
    	}
    
    }​

  • 모든 자원 시작할 때 filter시작

'study > JAVA 전문가' 카테고리의 다른 글

[linux] 톰캣 설치  (0) 2022.01.26
[HTML/CSS]  (0) 2022.01.11
[JSP] 방명록 프로그램  (0) 2022.01.05
[JSP] EL  (0) 2022.01.05
[ServletJSP] 시험 준비  (0) 2022.01.04

+ Recent posts