javacode banner

Примеры и образцы кода

java ?статический запрос к базе
извлечение данных из базы данных при статическом формировании запроса
                
public class JDBCSelectServlet extends HttpServlet
{
  @Override
  protected void doGet(
      HttpServletRequest request, 
      HttpServletResponse response) 
        throws ServletException, IOException
  {
    String sql = "select us_state_nm, us_state_cd "
                 + "from us_states order by us_state_nm";
    ArrayList<UsStateBean> stateList = new ArrayList<UsStateBean>();
    try
    {
      InitialContext initialContext = new InitialContext();
      DataSource dataSource = (DataSource) initialContext
          .lookup("jdbc/__CustomerDBPool");
      Connection connection = dataSource.getConnection();
      PreparedStatement preparedStatement = connection.prepareStatement(sql);
      ResultSet resultSet = preparedStatement.executeQuery();
      response.setContentType("text/html");
      while (resultSet.next())
      {
        stateList.add(new UsStateBean(resultSet.getString("us_state_nm"),
            resultSet.getString("us_state_cd")));
      }
      connection.close();
      request.setAttribute("stateList", stateList);
      request.getRequestDispatcher("us_states.jsp").forward(request, response);
    }
    catch (NamingException namingException)
    {
      namingException.printStackTrace();
    }
    catch (SQLException sqlException)
    {
      sqlException.printStackTrace();
    }
  }
}
        
java ?динамический запрос к базе
извлечение данных из базы данных при динамическом формировании запроса
                
public class JDBCSelectServlet2 extends HttpServlet
{
  @Resource(name = "jdbc/__CustomerDBPool")
  private javax.sql.DataSource dataSource;
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    String sql = "select us_state_nm, us_state_cd from us_states where "
        + "us_state_nm like ? or us_state_nm like ? order by us_state_nm";
    ArrayList<UsStateBean> stateList = new ArrayList<UsStateBean>();
    try
    {
      Connection connection = dataSource.getConnection();
      PreparedStatement preparedStatement = connection.prepareStatement(sql);
      preparedStatement.setString(1, "North%");
      preparedStatement.setString(2, "South%");
      ResultSet resultSet = preparedStatement.executeQuery();
      response.setContentType("text/html");
      while (resultSet.next())
      {
        stateList.add(new UsStateBean(resultSet.getString("us_state_nm"),
            resultSet.getString("us_state_cd")));
      }
      connection.close();
      request.setAttribute("stateList", stateList);
      request.getRequestDispatcher("us_states.jsp").forward(request, response);
    }
    catch (SQLException sqlException)
    {
      sqlException.printStackTrace();
    }
  }
}
        
xml ?тернарный оператор в JSF Facelets
чтобы не городить конструкцию из c:if
                
<!-- проверка на пустоту -->
<ui:param name="var" 
  value="#{empty utilBean.value ? 'its empty' : 'not empty' }"/>
<!-- проверка на пустоту -->
<ui:param name="var" 
  value="#{utilBean.value == null ? 'its empty' : 'not empty' }"/>
<!-- сравнение со строкой -->
<ui:param name="var" 
  value="#{utilBean.value == 'string' ? 'good' : 'bad' }"/>
        
xml ?реализация if - else if - else с помощью JSTL
эта конструкция применима и на страницах JSP, и на страницах JSF
                
<!--начало конструкции -->
<c:choose>
    <!-- if -->
    <c:when test="${salary <= 0}">
       Salary is very low to survive.
    </c:when>
    <!-- else if -->
    <c:when test="${salary > 1000}">
        Salary is very good.
    </c:when>
    <!-- else -->
    <c:otherwise>
        No comment sir...
    </c:otherwise>
</c:choose>
        
java ?как зашифровать пароль в MD5
класс формирует хэш MD5 на основе строки с паролем
                
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class EncryptPassword {

  public static String encryptPassword(String password)
      throws NoSuchAlgorithmException {
    MessageDigest messageDigest =
        MessageDigest.getInstance("MD5");
    byte[] bs;

    messageDigest.reset();
    bs = messageDigest.digest(password.getBytes());

    StringBuilder stringBuilder = new StringBuilder();

    //шестнадцатеричное кодирование дайджеста
    for (int i = 0; i < bs.length; i++) {
      String hexVal = Integer.toHexString(0xFF & bs[i]);
      if (hexVal.length() == 1) {
        stringBuilder.append("0");
      }
      stringBuilder.append(hexVal);
    }

    return stringBuilder.toString();
  }
}
                
java ?образец использования JPQL
JPQL является SQL-подобным языком, используемым для получения, обновления и удаления сущностей в базе дынных
                
public class SelectQueryDemoServlet extends HttpServlet
{
  @PersistenceUnit(unitName = "customerPersistenceUnit")
  private EntityManagerFactory entityManagerFactory;

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    PrintWriter printWriter = response.getWriter();
    List<UsState> matchingStatesList;

    EntityManager entityManager = entityManagerFactory.createEntityManager();

    Query query = entityManager
        .createQuery("SELECT s FROM UsState s WHERE s.usStateNm LIKE :name");

    query.setParameter("name", "New%");
    matchingStatesList = query.getResultList();

    response.setContentType("text/html");

    printWriter.println("Следующие штаты соответствуют критерию:<br/>");
    for (UsState state : matchingStatesList)
    {
      printWriter.println(state.getUsStateNm() + "<br/>");
    }
  }
}

                
java ?использование executeUpdate()
это метод интерфейса java.sql.PreparedStatement для вставки, удаления или обновления данных в базе
                
public class JdbcUpdateServlet extends HttpServlet
{
  @Resource(name = "jdbc/__CustomerDBPool")
  private DataSource dataSource;

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    String insertCustomerSql = "insert into customers " 
            + "(customer_id, first_name, last_name, email) values (?,?,?,?)";
    String updateCustomerLastNameSql = "update customers " 
            + "set last_name = ? where customer_id = ?";
    String deleteCustomerSql = "delete from customers where customer_id = ?";

    PreparedStatement insertCustomerStatement;
    PreparedStatement updateCustomerLastNameStatement;
    PreparedStatement deleteCustomerStatement;

    try
    {
      Connection connection = dataSource.getConnection();
      
      insertCustomerStatement = connection
          .prepareStatement(insertCustomerSql);
      updateCustomerLastNameStatement = connection
          .prepareStatement(updateCustomerLastNameSql);
      deleteCustomerStatement = connection.prepareStatement(deleteCustomerSql);
      
      insertCustomerStatement.setInt(1, 1);
      insertCustomerStatement.setString(2, "Leo");
      insertCustomerStatement.setString(3, "Smith");
      insertCustomerStatement.setString(4, "lsmith@fake.com");
      insertCustomerStatement.executeUpdate();
      
      insertCustomerStatement.setInt(1, 2);
      insertCustomerStatement.setString(2, "Jane");
      insertCustomerStatement.setString(3, "Davis");
      insertCustomerStatement.setString(4, null);
      insertCustomerStatement.executeUpdate();
      
      updateCustomerLastNameStatement.setString(1, "Jones");
      updateCustomerLastNameStatement.setInt(2, 2);
      updateCustomerLastNameStatement.executeUpdate();
      
      deleteCustomerStatement.setInt(1, 1);
      deleteCustomerStatement.executeUpdate();
      
      connection.close();
      
      response.getWriter().println("База данных успешно обновлена.");
      
    }
    catch (SQLException e)
    {
      e.printStackTrace();
    }
  }
}
                
java ?собственный валидатор данных в JSF
класс реализует блок проверки допустимости электронной почты
                
@FacesValidator(value = "emailValidator")
public class EmailValidator implements Validator {

  @Override
  public void validate(FacesContext facesContext,
      UIComponent uiComponent,
      Object value) throws ValidatorException {
    org.apache.commons.validator.EmailValidator emailValidator =
        org.apache.commons.validator.EmailValidator.getInstance();
    HtmlInputText htmlInputText = (HtmlInputText) uiComponent;

    String email = (String) value;

    if (!StringUtils.isEmpty(email)) {
      if (!emailValidator.isValid(email)) {
        FacesMessage facesMessage = new FacesMessage(htmlInputText.
            getLabel()
            + ": недопустимый формат email.");
        throw new ValidatorException(facesMessage);
      }
    }
  }
}
                
java ?как удалить html-тэги из строки
аналог функции strip_tags из php
                
String noHTMLString = htmlString.replaceAll("\\<.*?\\>", "");
                
java ?получить ключи GET-запроса в правильном порядке
на выходе будет вот такая, чистая и аккуратная строка = section:year:page:key:param_1
                
String query = "section=news&year=2013&page=2&key=value¶m_1=param1value";
String asd = query.replaceAll("\\=.*?\\&", ":");
asd = asd.replaceAll("\\=.*?$", "");
                
java ?инициализация массивов и коллекций с параметрами
иногда это нужно при динамическом заполнении
                
new String[]{"первая строка","вторая строка","третья строка"}

Arrays.asList("первая строка","вторая строка","третья строка")

new HashMap(){{
  put("key1","val1") ;
  put("key2","val2") ;
  put("key3","val3") ;
}}

new ArrayList<HashMap>(){{
  add(new HashMap(){{
    put("id_news","1") ;
  }}) ;
  add(new HashMap(){{
    put("id_news","2") ;
  }}) ; 
  add(new HashMap(){{
    put("id_news","3") ;
  }}) ;      
}}
                
java ?доступ к properites-файлу из classpath
так можно получить доступ к файлу свойств, который расположен в одном из пакетов
                
Properties prop = new Properties();
String path = "/ru/util/uri-rules.properties";
prop.load(GetParamFilter.class.getClassLoader().getResourceAsStream(path));
                
java ?доступ к контексту сервлета
определенного для всего приложения или для конкретного сервлета
                
//context-param
String email= getServletContext().getInitParameter("AdministratorEmail"); 

//servlet init-param
String email= getServletConfig().getInitParameter("AdministratorEmail");
                
java ?доступ к объекту ServletContext в бине для JSF
получаем в бине объект контекста сервлета, который был проинициализирован в фильтре
                
protected FacesContext facesContext;
protected ServletContext servletContext;

/* конструктор бина */
public TestBean() {
    fContext = FacesContext.getCurrentInstance();
    servletContext = (ServletContext) fContext.getExternalContext().getContext();
}

/* метод возвращающий объект контекста */
public String contextParam(String name) {
    return (String) this.servletContext.getAttribute(name);
}

                
java ?сохранение объекта в ServletContext из фильтра
инициализируем переменную в контексте сервлета, которая теперь доступна всему приложению / любому сервлету
                
private FilterConfig filterConfig = null;    
private ServletContext servctx;
this.servctx = filterConfig.getServletContext();
servctx.setAttribute("param1", "параметр №1 из контекста сервлетов");

                
java ?транслитерация кириллицы в латиницу на JAVA
переводим русский текст в английскую транскрипцию p.s. код, конечно, же требует некоторой доработки для работы с заглавными буквами
                
public String translitRustoEng(String str) {
SortedMap map = this.translitGetMap();
str = str.toLowerCase();
String[] rus = str.split("");
String key = "";
String result = "";
for(int i = 0; i<rus.length; i++) {
  key = rus[i];
  if(map.containsKey(key)) {
    result += map.get(key);
  } else {
    result += key;
  }
} 
return result;
}  

public SortedMap translitGetMap() {
SortedMap<String, String> map = new TreeMap<String,String>();
String[] rus = this.alphabet_rus;
String[] eng = this.alphabet_eng;
for(int i = 0; i<rus.length; i++) {
  map.put(rus[i], eng[i]);
} 
return map;
}

public final String[] alphabet_rus = new String[]{
"а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п",
"р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я"
};

public final String[] alphabet_eng = new String[]{
"a","b","v","g","d","e","e","zh","z","i","y","k","l","m","n","o","p",
"r","s","t","u","f","h","c","ch","sh","sch","","y","","e","yu","ya"
};
                
xml ?как подгрузить файл с переменными в Facelets
очень удобно подгружать в шаблоны отдельный файл в котором инициализируются переменные — в таком случае они будут доступны на всех страницах, к которым применим этот шаблон... делать это надо с помощью ui:decorate, а не ui:include
                
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    
<ui:decorate template="/WEB-INF/facelets/variables/" />
    
<h:head>
...
</h:head>
    
<h:body>
...  
</h:body>
</html>
                
xml ?включаем правильный вывод html-сущностей
для того, чтобы html-сущности типа &lauo; храниемые в базе данных корректно отображались надо сделать так
                <h:outputText value="#{val.name}" escape="false" />
                
xml ?подключение к базе данных через инъекции ресурса
чтобы подключиться с помощью @Resource в Apache Tomcat, открываем файл server.xml и в раздел <GlobalNamingResources> добавляем этот код
                
<Resource name="myjndi" auth="Container" 
   type="javax.sql.DataSource"
   driverClassName="com.mysql.jdbc.Driver" 
   maxActive="20" 
   maxIdle="10" 
   maxWait="20000" 
   url="jdbc:mysql://localhost:3306/mydatabase" 
   password="mypassword"
   username="mylogin"/>
                
xml ?настройка ролей в tomcat-users
небольшие пояснения к файлу tomcat-users.xml
                
<tomcat-users>
    <!-- 
    кнопка: ManagerApp ::
    URL: /manager/html :: 
    в NetBeans: /manager 
    -->        
    <role rolename="manager-gui"/>
    <user username="manager-gui" password="gui" roles="manager-gui"/>
    <!-- 
    кнопка: ServerStatus ::
    URL: /manager/status
    -->
    <role rolename="manager-script"/>
    <user username="manager-script" password="script" roles="manager-script"/>
    <!-- 
    кнопка: HostManager
    URL: /host-manager/html :: 
    в NetBeans: /host-manager 
    -->
    <role rolename="admin-gui"/>
    <user username="admin-gui" password="gui" roles="admin-gui"/>
</tomcat-users>
                
bash ?создание домена в asadmin
образец того, как можно создать новый домен так, чтобы он и его админка работали каждая на своем определенном порту: админка(--adminport) будет доступна на порту 7070, а сам сайт(--instanceport) будет грузиться на порту 7071
                
Last login: Fri May  3 16:55:47 2013 from 46.39.244.44
[itsme@vhosting ~]# clear
[itsme@vhosting ~]# cd /usr/share/gfish/bin
[itsme@vhosting bin]# ./asadmin
asadmin> create-domain --adminport 7070 --instanceport 7071 newDomain
Enter admin user name [Enter to accept default "admin" / no password]>
Using port 7070 for Admin.
Using port 7071 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Using default port 6666 for OSGI_SHELL.
........
No domain initializers found, bypassing customization step
Domain newDomain created.
Domain newDomain admin port is 7070.
Domain newDomain allows admin login as user "admin" with no password.
Command create-domain executed successfully.
                
bash ?как удалить развернутое приложение
периодически возникает необходимость удалить с сервера развернутое ранее приложение: давайте удалим его с помощью утилиты asadmin, посмотрев перед этим — какие приложения вообще есть = после этого ненужное приложение не будет нам мозолить глаза во вкладке Applications в админке
                
[userlogin@vpshosting ~]# cd /usr/share/gfish/bin
[userlogin@vpshosting bin]# ./asadmin
Use "exit" to exit and "help" for online help.
asadmin> list-applications
Enter admin user name>  admin
Enter admin password for user "admin"> 
application-001        <web>  
my-first-app           <web>  
portal-good            <web>  
jws-01                 <web>  
jws-01-out             <web>  
ServletExample         <web>  
javasource             <web>  
Command list-applications executed successfully.
asadmin> undeploy jws-01
Enter admin user name>  admin
Enter admin password for user "admin"> 
Command undeploy executed successfully.
asadmin>
                
java ?как перекодировать строку в UTF
на уровне бина можно перекодировать строку в UTF-8
                
public void setSubject(String subject) 
   throws UnsupportedEncodingException {
      byte[] b = subject.getBytes("ISO-8859-1");
      subject = new String(b,"UTF-8");
      this.subject = subject;
}
                
java ?обработка строки для тега description
иногда удобнее не писать самому значение для мета-тега description, а сделать его на лету из контента правильно перед этим подготовив
                
/**
 * создание описания нужной длины
 */  
public String createDescr(String content,int number) {
  String str = "";
  str = content.trim();
  if(str.length() == 0) {
    str = "";
  } else {
    str = UtilBean.stripTags(content);
    if(str.length() <= number) {
      number = str.length();
    } 
    if(str.length() != 0) {
      str = str.substring(0, number);
      str = str.substring(0, str.lastIndexOf(" ")).trim();
      // удалили переводы строк
      str = str.replaceAll("\r\n", "");
      // все пробелы которых 2 и более привели к одному
      str = str.replaceAll("\\s{2,}", " "); 
      // удалили ненужные символы
      str = str.replaceAll("[():-]", "");
    }      
  }
  return str;
}

/**
 * удаляем все HTML-теги и HTML-сущности (мнемоники)
 */
public static String stripTags(String str) {
  String s = "";
  s = str.replaceAll("\\<.*?\\>", "");
  s = s.replaceAll("\\&.*?\\;", "");
  return s;
}
                
java ?как получить число с ведущими нулями?
иногда нужно вывести число с ведущими нулями... сделать это просто - с помощью String.format
                
public String testDigit(int digit) {
    return String.format("%02d", digit);
}
// 02 означает что всего должно быть 2 символа в результирующий строке
// то есть если вставим число 5, то функция вернет строку 05
                
java ?устранение ошибки @ConversationScoped
Вы можете столкнуться с тем, что при использовании @ConversationScoped и его методов conversation.begin() и conversation.end() происходит исключение: javax.servlet.ServletException: WELD-000214 Attempt to call begin() on a long-running conversation и org.jboss.weld.exceptions.IllegalStateException: WELD-000214 Attempt to call begin() on a long-running conversation ... не беда — это лечится приведенным ниже кодом, ну а если коротко = то нужно использовать conversation.isTransient()
                
private @Inject Conversation conversation;  
// Control start and end of conversation
/**conversation begin*/
public void start() throws ServletException { 
  if (conversation.isTransient()) {
    conversation.begin();
  }
}
/**conversation end*/
public void end() throws ServletException { 
  if (!conversation.isTransient()) {
    conversation.end();
  }
}