2017년 11월 13일 월요일

한글 설정

1.web.xml

<!- 소스 생략 -->
<filter>
 <filter-name>encodingFilter</filter-name>
 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
 </init-param>
</filter>
<filter-mapping>
 <filter-name>encodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


2. jsp파일의 가장 위쪽에 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>


3. 톰캣서버 server.xml에 찾아서 추가
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

4. url에서 한글 값으로 던질때
return "redirect:search_kanji?search="+URLEncoder.encode(search,"utf-8");

[출처] 한글설정|작성자 ihongss

2017년 11월 6일 월요일

redirect 한글값 던지기



project/ KanjiController


@RequestMapping(value="/add_word",method=RequestMethod.GET)
public String add_word(@RequestParam(value="search", defaultValue="list")String search,
@RequestParam("word")String kanji,@RequestParam("ankijang_no")int no)
throws UnsupportedEncodingException{



return "redirect:search_kanji?search="+URLEncoder.encode(search,"utf-8");

2017년 10월 12일 목요일

nodejs설치 및 환경설정 / json 이용 하여 실시간 업데이트


6.11.4 버전 설치 위치 c:\nodejs

nodejs용 개발 도구

cd c:\nodejs


0. express 프레임워크 설치
-g옵션은 어느 폴더에서든 사용가능하게 설치
npm install express-generator -g
npm install nodemon -g
npm install node-cron --save
npm install mysql  --save
npm install socket.io --save


1. express 프로젝트 생성 - project1프로젝트 생성
express -e project1


2. 실행하기
cd  project1    (생성된 프로젝트 폴더로 이동 )
npm install     (관련 라이브러리 설치)
nodemon --inspect ./bin/www  (실행)

3. 결과확인
크롬에서 http://127.0.0.1:3000





폴더열기
c:\nodejs\project1 선택
 view / app.js
  
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');

var batch = require('./routes/batch');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);
app.use('/batch', batch);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
 var err = new Error('Not Found');
 err.status = 404;
 next(err);
});

// error handler
app.use(function(err, req, res, next) {
 // set locals, only providing error in development
 res.locals.message = err.message;
 res.locals.error = req.app.get('env') === 'development' ? err : {};

 // render the error page
 res.status(err.status || 500);
 res.render('error');
});

module.exports = app;



===== json 이용하여 실시간으로 자료 업데이트 ==========

파일명 : routes/batch.js
var express = require('express');
var router = express.Router();
var node_cron = require('node-cron');
var mysql = require('mysql');
var dbconn = require('./dbconfig/dbconn.js');
var conn = mysql.createConnection(dbconn);
conn.connect();

var http = require('http').createServer(function(req,res){
}).listen(1005);
var io = require('socket.io').listen(http);
/* GET home page. */
router.get('/', function(req, res, next) {
 res.render('batch', { title: 'Batch' });
});

io.sockets.on('connection', function(socket){

 socket.on('init', function(data){
   //data 구조 : {id:'abc', msg:'def'}
   socket.join(data.id); //소켓에 회원등록
 });

 node_cron.schedule('* * * * * *', function(){
   //재고 수량이 10개 미만인것 가져오기
   var sql = "SELECT * FROM item1 WHERE item_qty < 10";

   conn.query(sql, function(err, rows, fields){
     if(!err) { //오류가 없다면
       var dt = new Date();
       io.sockets.emit('subscribe', {
         id: String(dt),
         msg : String(JSON.stringify(rows))
       });
     }
   });
 });
});

module.exports = router;


파일명 : views/batch.ejs
<!DOCTYPE html>
<html>
 <head>
   <title><%= title %></title>
   <link rel='stylesheet' href='/stylesheets/style.css' />

   <script src="//code.jquery.com/jquery.min.js"></script>
   <script src="http://127.0.0.1:1005/socket.io/socket.io.js"></script>
   <script>
    $(document).ready(function(){
     //socket.io서버에 접속
     var socket = io.connect("http://127.0.0.1:1005");
    
     //서버에 접속되면
     socket.on('connect', function(){
      //접속시 최초의 값을 서버에 전달함.
      socket.emit('init', {id:'hss', msg:'hello'});
     
      socket.on('subscribe', function(data){
       var tmp = $('#txt_out').val();
       $('#txt_out').val(data.id+","+data.msg+"\n");
      });
     });
        
    });
   </script>
   
 </head>
 <body>
   <textarea rows="10" style="width:100%" id="txt_out"></textarea>
 </body>
</html>


크롬에서 127.0.0.1:3000/batch 실행

redis 세션관리 api 사용하기


<org.springframework-version>4.1.1.RELEASE</org.springframework-version>

<dependencies>
 <dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-redis</artifactId>
  <version>1.7.1.RELEASE</version>
 </dependency>

 <dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.7.2</version>
 </dependency>

</dependencies>

파일명 : redis-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="connectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="211.110.165.201" />
<property name="port" value="6379" />
<property name="password" value="ds603" />
<property name="usePool" value="true" />
</bean>

<bean id="redisTemplate"
class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
</bean>

</beans>



파일명 : web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/mybatis/mybatis-context.xml
/WEB-INF/redis/redis-context.xml
</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
 <param-name>encoding</param-name>
 <param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


</web-app>



파일명 : MemberController.java
package com.ds.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class MemberController {

@Autowired
private RedisTemplate<String, String> strTemplate;

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Model model) {
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String selectItem(Model model,
@RequestParam("id") String id,
@RequestParam("pw") String pw) {
int ret = 1; //xml을 호출하여 로그인함.
if(ret == 1) { //로그인 성공으로 가정함.
//세션에 값을 넣음 - 프로젝트 A
strTemplate.opsForValue().set("_ID", id);
//세션에서 값을 가져옴 - 프로젝트 B
String getID = strTemplate.opsForValue().get("_ID");
System.out.println(getID);

}
else { //로그인 실패
}
return "redirect:main";
}
}


파일명 : login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>로그인</title>
</head>

<body>

<form action="login" method="post">
<input type="text" name="id" /><br />
<input type="password" name="pw" /><br />

<hr />
<input type="submit" value="로그인" />
</form>

</body>
</html>