понедельник, 26 марта 2018 г.

Дерево сценариев, нюансы

Когда нужно отправить действие <action_name> в те документы, которые указаны на вкладке "Связанные документы" обрабатываемого документа:
notify_documents event="<action_name>"

Когда нужно отправить действие <action_name> в родительский документ обрабатываемого документа:
notify_parent event="<action_name>"

Когда нужно отправить действие <action_name> в дочерние документы обрабатываемого документа:
notify_child event="<action_name>"

пятница, 9 марта 2018 г.

GET и POST

Пример передачи параметров с помощью метода GET:
<input type="button" value="Кнопка открытия второй страницы" onclick="window.open('secondpage.jsp?param1=${param1}','_self')"/>
Пример передачи параметров с помощью метода POST:
<form action="secondpage.jsp" method="POST" target="_self">
  <input type="hidden" name="param1" value="${param1}"/>
  <input type="submit" name="btn1" value="Кнопка открытия второй страницы">
</form>

вторник, 6 марта 2018 г.

Пример Hello World + JSP + Java-classes

WEB-INF/classes/com/example/HelloWorld.java:
package com.example;

public class HelloWorld
{
  public static String hello;
// setter-method:
  public static void setHello(String newhello) {
    hello = newhello;
  }
// getter-method:
  public static String getHello() {
    return hello;
  }
}

index.jsp:
<%@ page import="com.example.HelloWorld"%>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Servlet example</title>
  </head>
  <body>
    <%
    HelloWorld.setHello("Hello World 2");
    out.println(HelloWorld.getHello());
    %>
  </body>
</html>

Пример сервлета

На деле так никто, конечно, делать не будет, но в качестве примера пойдет:

index.jsp:
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.DatabaseMetaData"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.util.Properties"%>
<%@ page import="java.io.FileInputStream"%>
<%@ page import="java.io.File"%>
<%@ page import="java.io.IOException"%>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Servlet example</title>
  </head>
  <body>
    <b><%
    int count;
    Properties props = new Properties();
    props.load(new FileInputStream(new File(application.getRealPath("WEB-INF/classes/myapp.properties"))));
    String dbUrl = props.getProperty("myapp.db.url");
    String dbUser = props.getProperty("myapp.db.user");
    String dbPass = props.getProperty("myapp.db.password");
    String[] splt = dbUrl.split(":",3);
    String dbType = splt[1].toUpperCase();
    String query = "select count(*) from sysuser";
    Properties conProps = new Properties();
    conProps.put("user", dbUser);
    conProps.put("password", dbPass);
    conProps.put("charSet", "Cp1251");
    Connection con = DriverManager.getConnection(dbUrl, conProps);
    DatabaseMetaData meta = con.getMetaData();
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(query);
    while (rs.next()) {
      count = rs.getInt(1);
      out.println("Count of users = " + count);
      out.println("<br>dbType=" + dbType);
    }
    %></b>
  </body>
</html>

Вывод даты-времени на JSTL и Java

Java:
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%
SimpleDateFormat fmt = new SimpleDateFormat("dd.MM.yyyy HH:mm");
date = new Date();
out.println(fmt.format(date));
%>

Java (то же самое, только без переменных):
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%out.println(new SimpleDateFormat("dd.MM.yyyy HH:mm").format(new Date()));%>
JSTL:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:formatDate type="both" pattern="dd.MM.yyyy HH:mm" value="<%=new java.util.Date()%>"/>

понедельник, 5 марта 2018 г.

Import class in JSP

index.jsp:
<%@ page import="MyPackage.MyClass" %>
...
MyClass.class file location:
<tomcat>\webapps\<MyWebApp>\WEB-INF\classes\MyPackage\MyClass.class

MyClass.java:
package MyPackage;
...
import com.example.MyAnotherClass;

MyAnotherClass.class file location:
<tomcat>\webapps\<MyWebApp>\WEB-INF\classes\com\example\MyAnotherClass.class

воскресенье, 4 марта 2018 г.

Пример считывания ini-файла в Java

Example1.java:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.File;
import java.util.Properties;

public class Example1
{
  private static String dbUrl;

  public Example1() throws IOException
  {
    Properties props = new Properties();
    props.load(new FileInputStream(new File("./myfile.properties")));
    dbUrl = props.getProperty("db.url");
    System.out.println(dbUrl);
  }

  public static void main(String[] args) throws IOException
  {
    new Example1();
  }
}

javac Example1.java
java -cp . Example1

Firebird JDBC Encoding

При подключении к базе Firebird с помощью JDBC (jaybird-full-3.0.3.jar) появляется сообщение:
Фев 04, 2018 5:18:52 PM org.firebirdsql.logging.JulLogger warn
WARNING: WARNING: No connection character set specified (property lc_ctype, encoding, charSet or localEncoding), defaulting to character set NONE

Чтобы этого не происходило нужно:
- либо в строке подключения необходимо указывать кодировку "encoding=ISO/UTF/WIN...", например:
jdbc:firebirdsql:url:db?encoding=ISO8859_1
- либо:
Properties connInfo = new Properties();
connInfo.put("user", username);
connInfo.put("password", password);
connInfo.put("charSet", "Cp1251");
Connection db = DriverManager.getConnection(dataurl, connInfo);

пятница, 2 марта 2018 г.

CLI: Конвейер

Вертикальная черта, "конвейер", "перенаправление вывода", "трубопровод", pipe, пайп:
пример работы с двойной чертой для bash (аналогично и в cmd):
rm * || echo "Не могу удалить файлы"
Если при выполнении команды "rm" произойдет ошибка, например, удаляемые файлы будут заняты другим процессом, тогда на экране появится сообщение:
"Не могу удалить файлы"

Архив