Другие разделы:
Tomcat: Как посмотреть war файл в tomcat.
Для этого необходимо установить JVM (java virtual machine), если она еще не установлена, при установке ничего не надо менять (только директорию, если хотите установить в другом месте), жмем везде ОК. Далее скачиваем tomcat, устанавливаем, если JVM была предварительно установлена, tomcat при установке автоматически пишет его директорию, если директорию вдруг указывает неправильно естественно меняем на правильную, в общем везде жмем ОК. Не помню где именно, tomcat предлагает ввести пароль, пользователь admin, пароль придумайте сами, но лучше запомнить:))) Если забыли, его можно будет впоследствии посмотреть здесь: C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf \tomcat-users. Если на рабочем столе нет ярлыка, значит запускаем tomcat из пуска – программы – Apache Tomcat 6.0 (это у меня установлена такая версия) – Monitor tomcat. В правом нижнем углу появится трей, правой кнопкой мыши – Start Service, если tomcat успешно запустился трей станет зелененьким. Далее открываем браузер, набираем в адресной строке http://localhost:8080/manager/html - порт 8080 у всех, если при установке вы его не меняли. Вот здесь Вам и понадобится имя пользователя (в нашем случае admin) и пароль. На открывшейся страничке ищем WAR file to deploy - Select WAR file to upload – обзор (выбираем war файл) – жмем Deploy. В разделе Applications появится название вашего war файла. Теперь можно запускать файлик. На этом все.
06.10.2008
наверх
Как написать сервлет, который будет соединяться с базой данный через JDBC и выводить данные из таблицы на консоль. Как правильно настроить DataSource.
Проект создан с помощью: Apache tomcat v6.0, MySQL 5, Eclipse Platform Version: 3.3.2. Коннектор не забудьте - mysql-connector-java-5.0.8-bin.jar. У меня он лежит здесь: C:\Program Files\Java\jre1.6.0_05\lib\ext. Ах да, и саму джаву не забудьте: jdk1.6.0_05. Предполагается что все программы уже установлены.
Шаг №1. Создать базу данных с названием «1» в MySQL 5, затем таблицу tab2.Таблица выглядит так:
Шаг №2. В среде разработки Eclipse Platform Version: 3.3.2 создаем проект: file-new- project-dynamic web project- project name “3”-ok. На проекте правой кнопкой мышки – new - package pak4. На папке pak4 правой кнопкой мышки – new – class “Serv5”.
Serv5.java
package pak4; import javax.servlet.*; import javax.servlet.http.*; import javax.sql.DataSource; import javax.naming.*; import java.io.*; import java.sql.*; /** * http://www.poister-kazan.narod.ru/java.html * DataSource */ public class Serv5 extends HttpServlet implements javax.servlet.Servlet { public Serv5() { super(); } DataSource pool; public void init() throws ServletException { Context env = null; try { env = (Context) new InitialContext().lookup("java:/comp/env"); pool = (DataSource) env.lookup("6"); if (pool == null) throw new ServletException("'6' is an unknown DataSource"); } catch (NamingException ne) { throw new ServletException(ne.getMessage()); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sql = "select * from tab2 "; Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = pool.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { String colVal = rs.getString("number"); String colVal2 = rs.getString("name"); System.out.println(colVal + "| " + colVal2); } } catch (Exception e) { throw new ServletException(e.getMessage()); } finally { try { if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException sqle) { } } } }
Если в сервлете красные линии возможно нет нужной библиотеки: На проекте (“3”) жмем правой кнопкой мышки – properties – java build path – libraries – add library – server runtime – apache tomcat v6.0 – ok. А вообще эту библиотеку можно сразу при создании проекта установить.
Шаг №3. Нужно открыть следующий файл в нашем проекте: WebContent – WEB-INF – web.xml
итого данный web.xml будет выглядеть так:
Сохраним изменения, нажав на соответствующую пиктограмму.
Шаг №4.Открываем файл – server.xml: Project explorer – Servers – Tomcat v6.0 server at localhost-config – server.xml (код приводится частично, там много комментариев в начале).
Шаг №5. Запускаем проект: правой кнопкой мыши на проекте ("3") run as - run on server.Должно выйти как рисунке:
PS. Цифры использованы в данном проекте исключительно в целях наглядности, так называть не надо, давайте человеческие названия в соответствии
Java naming conventions Архив проекта можно скачать с
3 data sourse.rar29.10.2008
наверх
Как отправить коллекцию из сервлета на страницу JSP (использование цикла for each)
От вышеприведенного примера в таком виде мало толка, поэтому отправим коллекцию на страницу jsp, не выводя результаты на консоль. Необходимы 2 библиотеки, которые можно свободно скачать в интернете: jstl.jar and standard.jar
Шаг №1. DBServlet.java.
package paket; import javax.servlet.*; import javax.servlet.http.*; import javax.sql.DataSource; import javax.naming.*; import java.io.*; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * http://www.poister-kazan.narod.ru/java.html * To send a collection in JSP */ public class DBServlet extends HttpServlet implements javax.servlet.Servlet { public DBServlet() { super(); } DataSource pool; public void init() throws ServletException { Context env = null; try { env = (Context) new InitialContext().lookup("java:/comp/env"); pool = (DataSource) env.lookup("6"); if (pool == null) throw new ServletException("'6' is an unknown DataSource"); } catch (NamingException ne) { throw new ServletException(ne.getMessage()); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sql = "select * from tab2 "; Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = pool.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); List "Bean1" someList = new ArrayList"Bean1"(); while (rs.next()) { Bean1 bean = new Bean1(); bean.setSomeString(rs.getString("name")); bean.setSomeLong(rs.getString("age")); someList.add(bean); } request.setAttribute("someList", someList); RequestDispatcher rd = request.getRequestDispatcher("ind1.jsp"); rd.forward(request, response); } catch (Exception e) { throw new ServletException(e.getMessage()); } finally { try { if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException sqle) { } } } } в этой строке List "Bean1" someList = new ArrayList"Bean1"(); вместо кавычек надо писать угловые скобки.
Шаг №2. Bean1.java
package paket; /** * http://www.poister-kazan.narod.ru/java.html */ public class Bean1 { private String someString = null; private String someLong = null; public Bean1() { } public String getSomeString() { return someString; } public void setSomeString(String someString) { this.someString = someString; } public String getSomeLong() { return someLong; } public void setSomeLong(String someLong) { this.someLong = someLong; } }
Шаг №3. ind1.jsp
Внимание: в старых книжках JSTL (JSP Standard Tag Library) объявляют так: taglib uri="http://java.sun.com/jstl/core" prefix="c" (спецификация 2.3), а надо вот так: taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" (спецификация 2.4), иначе будет вот такая ошибка "According to TLD or attribute directive in tag file, attribute items does not accept any expressions"
Архив проекта можно скачать с
TestDB jsp.rar (проект может немного отличаться названиями и т.д., но суть та же)
20.11.2008
наверх
А теперь переделаем предыдущий проект с использованием Hibernate - XML
Библиотеки нужные для Hibernate:
antlr.jar asm.jar asm-attrs.jar c3p0.jar cglib.jar commons-collections.jar commons-logging.jar dom4j.jar hibernate3.jar hsqldb.jar jta.jar
Структура проекта будет такая, рисунок конечно у меня не очень получился, но что есть уж:)
Шаг №1. Date1.java
package pak4;
/**
* http://www.poister-kazan.narod.ru/java.html
*/
public class Date1 {
private Long id;
private String name;
private int age;
public Date1() {
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Шаг №2. ДАО - Data access object. DateInterf.java and Date1Implem.java
package pak4;
import java.sql.SQLException;
import java.util.Collection;
/**
* http://www.poister-kazan.narod.ru/java.html
*/
public interface DateInterf {
public Collection getAllNames() throws SQLException;
}
package pak4;
import java.sql.SQLException;
import java.util.*;
import org.hibernate.Session;
import org.hibernate.Query;
import pak4.Date1;
import pak4.DateInterf;
import pak4.HibernateUtil;
/**
* http://www.poister-kazan.narod.ru/java.html
*/
public class Date1Implem implements DateInterf {
public Collection getAllNames() throws SQLException {
Session session = null;
List names = new ArrayList"Date1"();
try {
session = HibernateUtil.getSessionFactory().openSession();
names = session.createCriteria(Date1.class).list();
} catch (Exception e) {
throw new Exception(e.getMessage());
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return names;
}
}
List names = new ArrayList"Date1"(); - угловые скобки вместо кавычек использовать.
Шаг №3. Factory.java
package pak4; import pak4.Date1Implem; import pak4.DateInterf; import pak4.Factory; /** * http://www.poister-kazan.narod.ru/java.html */ public class Factory { private static DateInterf dateInterf = null; private static Factory instance = null; public static synchronized Factory getInstance() { if (instance == null) { instance = new Factory(); } return instance; } public DateInterf getDateInterf() { if (dateInterf == null) { dateInterf = new Date1Implem(); } return dateInterf; } }
Шаг №4. Этот класс взят с официального сайта Hidernate. Для всех проектов он будет одинаков (xml), если с помощью аннотаций, то чуть-чуть другой класс, пример с аннотациями будет дальше.
HibernateUtil.java
package pak4; import org.hibernate.cfg.Configuration; import org.hibernate.SessionFactory; /** * http://www.poister-kazan.narod.ru/java.html */ public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
Шаг №5. Создаем mapping, xml файл. Файл назовем Date1.hbm.xml, в Eclipse нужно выбрать xml и просто в название добавить hbm.
property name - название столбца взято из таблицы и поля также называются, и тип данных.
Шаг №6. По умолчанию конфигурационный файл называют hibernate.cfg.xml, если вы назвали по-другому, то в метод configure() нужно передать название как аргумент. Данный файл нужно положить вне папок с классами, иначе будет ошибка: hibernate.cfg.xml is not found, внимательно смотрите рисунок как выглядит структура проекта.
datasourse полностью писать туда не надо, мы его уже настроили, просто пишем название. Show_sql со значением true будет выводить на консоль hibernate sql, для новичков полезно:) Далее пишем диалект для той базы, которую используем. Это минимальные настройки, которые необходимы, чтоб запустить наш проект.
Список диалектов для баз:
DB2/390 - DB2390Dialect DB2/400 - DB2400Dialect DB2 - DB2Dialect Derby - DerbyDialect Firebird - FirebirdDialect FrontBase - FrontBaseDialect HSQLDB - HSQLDialect Informix - InformixDialect Ingres - IngresDialect InterBase - InterbaseDialect JDataStore - JDataStoreDialect Mimer SQL - MimerSQLDialect Mckoi - MckoiDialect MySQL 5 - MySQL5Dialect MySQL (меньше 5.x) - MySQLDialect MySQL with InnoDB tables - MySQLInnoDBDialect MySQL with MyISAM tables - MySQLMyISAMDialect Oracle9i - Oracle9Dialect Oracle9i (DataDirect drivers) - DataDirectOracle9Dialect Oracle (меньше 9.x) - OracleDialect PointBase - PointbaseDialect PostgreSQL - PostgreSQLDialect Progress - ProgressDialect RDMS for Unisys OS2200 - RDMSOS2200Dialect SAP DB - SAPDBDialect SQL Server - SQLServerDialect Sybase - SybaseDialect Sybase 11 - Sybase11Dialect Sybase Anywhere - SybaseAnywhereDialect Times Ten 5.1 - TimesTenDialect
Шаг №7. Сервлет - Serv5.java
package pak4; import javax.servlet.*; import javax.servlet.http.*; import pak4.Date1; import pak4.Factory; import java.io.*; import java.util.*; /** * http://www.poister-kazan.narod.ru/java.html */ public class Serv5 extends HttpServlet implements javax.servlet.Servlet { public Serv5() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Collection names = Factory.getInstance().getDateInterf() .getAllNames(); request.setAttribute("names", names); RequestDispatcher rd = request.getRequestDispatcher("Index1.jsp"); rd.forward(request, response); } catch (Exception e) { throw new ServletException(e.getMessage()); } } }
Ну все на этом:) Заметьте у нас в сервлете исчез полностью блок, сами найдите, посмотрев предыдущие проекты. JSP странички не привожу, мы их уже писали. Архив проекта можно скачать
3 hibernate jsp.rar 10.12.2008
наверх
Refactoring
А теперь перейдем к весьма важной части - refactoring. Переименуем все классы и переменные, чтоб красиво все было. На названии класса щелкаем, выбираем refactor - rename (пишу на память, могу ошибаться) и пишем новое имя, соответственно все зависимости тож поменяются, но на самом деле не все, ну либо я не умею:) Привожу измененные классы.
Структура проекта:
Шаг №1. Date.java
package store; /** * http://www.poister-kazan.narod.ru/java.html */ public class Date { private Long id; private String name; private int age; public Date() { } public void setId(Long id) { this.id = id; } public Long getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Шаг №2. DAO - DateDAO.java and DateDAOImpl.java
package store; /** * http://www.poister-kazan.narod.ru/java.html */ import java.sql.SQLException; import java.util.Collection; public interface DateDAO { public Collection getAllDates() throws SQLException; } package store; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.hibernate.Session; import store.Date; import store.DateDAO; import util.HibernateUtil; /** * http://www.poister-kazan.narod.ru/java.html */ public class DateDAOImpl implements DateDAO { public Collection getAllDates() throws SQLException { Session session = null; List dates = new ArrayList"Date"(); try { session = HibernateUtil.getSessionFactory().openSession(); dates = session.createCriteria(Date.class).list(); } catch (Exception e) { throw new Exception(e.getMessage()); } finally { if (session != null && session.isOpen()) { session.close(); } } return dates; } } List dates = new ArrayList"Date"(); - использовать угловые скобки вместо кавычек.
Шаг №3. Factory.java
package store; import store.DateDAO; import store.DateDAOImpl; import store.Factory; /** * http://www.poister-kazan.narod.ru/java.html */ public class Factory { private static DateDAO dateDAO = null; private static Factory instance = null; public static synchronized Factory getInstance() { if (instance == null) { instance = new Factory(); } return instance; } public DateDAO getDateDAO() { if (dateDAO == null) { dateDAO = new DateDAOImpl(); } return dateDAO; } }
Шаг №4. HibernateUtil.java
package util; import org.hibernate.cfg.Configuration; import org.hibernate.SessionFactory; /** * http://www.poister-kazan.narod.ru/java.html */ public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
Шаг №5. Date.hbm.xml
Шаг №6. hibernate.cfg.xml
Шаг №7. web.xml
Шаг №8. Servlet.java
package store; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.Collection; import store.Factory; /** * http://www.poister-kazan.narod.ru/java.html */ public class Servlet extends HttpServlet implements javax.servlet.Servlet { public Servlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Collection allDates = Factory.getInstance().getDateDAO() .getAllDates(); request.setAttribute("allDates", allDates); RequestDispatcher rd = request.getRequestDispatcher("results.jspx"); rd.forward(request, response); } catch (Exception e) { throw new ServletException(e.getMessage()); } } }
Шаг №9. Теперь приведем наши странички jsp в соответствии с XML, т.е. расширение будет jspx, про XML подробнее Вам расскажет гугл, я же просто привожу код:)
index.jspx
results.jspx
На этом все, и не забудьте проверить файл server.xml, вдруг там старые данные. Архив проекта можно скачать
WebStore.zip12.12.2008
наверх
Проект Hibernate с помощью аннотаций - annotation
Структура проекта:
Шаг №1. Dates.java
package annotation; import java.sql.Date; import javax.persistence.*; /** * http://www.poister-kazan.narod.ru/java.html */ @Entity @Table(name = "tab2") public class Dates { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = "typep") private String typep; @Column(name = "subtype") private String subtype; @Column(name = "summa") private double summa; @Column(name = "comments") private String comments; @Column(name = "date_time") private Date date_time; public Dates() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTypep() { return typep; } public void setTypep(String typep) { this.typep = typep; } public String getSubtype() { return subtype; } public void setSubtype(String subtype) { this.subtype = subtype; } public double getSumma() { return summa; } public void setSumma(double summa) { this.summa = summa; } public String getComments() { return comments; } public void setComments(String comments) { this.comments = comments; } public Date getDate_time() { return date_time; } public void setDate_time(Date date_time) { this.date_time = date_time; } }
Шаг №2. DateDAO.java and DateDAOImpl.java
package annotation; import java.sql.SQLException; import java.util.Collection; /** * http://www.poister-kazan.narod.ru/java.html */ public interface DateDAO { public Collection getAllDates() throws SQLException; } DateDAOImpl.java package annotation; import java.sql.SQLException; import java.util.*; import org.hibernate.Session; import util.HibernateUtil; import annotation.Dates; import annotation.DateDAO; public class DateDAOImpl implements DateDAO { // The method gets all dates public Collection getAllDates() throws SQLException { Session session = null; List dates = new ArrayList"Dates"(); try { session = HibernateUtil.getSessionFactory().openSession(); dates = session.createCriteria(Dates.class).list(); } catch (Exception e) { throw new Exception(e.getMessage()); } finally { if (session != null && session.isOpen()) { session.close(); } } return dates; } }
Шаг №3. Factory.java
package annotation; import annotation.DateDAO; /** * http://www.poister-kazan.narod.ru/java.html */ public class Factory { private static DateDAO dateDAO = null; private static Factory instance = null; public static synchronized Factory getInstance() { if (instance == null) { instance = new Factory(); } return instance; } public DateDAO getDateDAO() { if (dateDAO == null) { dateDAO = new DateDAOImpl(); } return dateDAO; } }
Шаг №4. HibernateUtil.java
package util; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; /** * http://www.poister-kazan.narod.ru/java.html */ public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new AnnotationConfiguration().configure() .buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } } Отличие от примера с xml в строчке sessionFactory =
Шаг №5. hibernate.cfg.xml
Шаг №6. Servlet.java
package annotation; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.Collection; import annotation.Factory; /** * http://www.poister-kazan.narod.ru/java.html */ public class Servlet extends HttpServlet implements javax.servlet.Servlet { public Servlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Collection allDates = Factory.getInstance().getDateDAO() .getAllDates(); request.setAttribute("allDates", allDates); RequestDispatcher rd = request .getRequestDispatcher("allDates.jspx"); rd.forward(request, response); } catch (Exception e) { throw new ServletException(e.getMessage()); } } }
На этом все. Страницы jspx не изменились и я их не привожу. Архив проекта скачать
18.12.2008
наверх
Как перенести приложение Hibernate с Tomcat-а 6.0 на JBoss 5.1 (продолжение предыдущих статей)
В рамках сервера Tomcat нам стало тесно, и теперь перейдем на другой сервер - JBoss:) Начнем с установки JBoss (все написанное относится к OS Windows):
1. Предварительно у вас должна быть установлена JVM. Переменная окружения: JAVA_HOME и ее значение: C:\Program Files\Java\jdk1.6.0_14
2. Скачиваем zip-архив, распаковываем его в любую папку, в пути этой папки не должны содержаться пробелы, т.е. стандартная папка C:\Program Files для установки программ в данном случае не подходит, лучше так: C:\jboss.
3. Устанавливаем переменную окружения: JBOSS_HOME и ее значение: C:\jboss
4. Далее в этой папке C:\jboss\bin находим файл run.bat и запускаем его двумя кликами мыши.
5. Если все сделано правильно, то много-много букавок вам напишет JBoss и в конце фраза, что стартовал в течении такого-то времени. Пока командная строка открыта, сервер запущен, сервер будет оставлен, если закрыть это окошечко. JBoss можно сделать в виде сервиса, кому интересно это написано в книге JBoss in action (см. раздел книги - ejb)
6. Переходим в eclipse, в наш проект, и добавляем в папку WEB-INF файл jboss-web.xml со следующим содержанием:
7. Теперь нам нужно создать DataSource. В папке: C:\jboss\server\default\deploy создаем файл с названием mysql-ds.xml или копируем отсюда: C:\jboss\docs\examples\jca и просто редактируем этот файлик.
8. В данном случае наш сервер стартовал с дефолтными настройками, т.е. по адресу: http://localhost:8080, все проекты надо ложить сюда: C:\jboss\server\default\deploy, прежде чем положить наш новый проект сделаем заново из него war файл, т.к. у нас новый файл добавился. Ну вот теперь приложение должно работать:)
9. Ваше приложение работает только локально, т.е. удаленный доступ отсутствует, для того чтоб был доступ извне нужно стартовать с такой настройкой: C:\jboss\bin\run.bat -b 0.0.0.0
На этом все.
наверх
Spring: таблица jar-файлов с описанием - Spring JAR Files
JAR File | Описание |
spring-aop.jar | This JAR contains all the classes you need to use Spring’s AOP features within your application. You also need to include this JAR in your application if you plan to use other features in Spring that use AOP, such as declarative transaction management |
spring-beans.jar | This archive contains all of Spring’s dependency injection. It contains the bean factories and supporting classes. In most cases, you will need to add spring-context.jar, which contains code needed to build the application context |
spring-context.jar | This JAR contains code needed to build the Spring application context; it packages the main ApplicationConext interface and its implementations together with code for instrumentation, JNDI, scheduling, themes, and validation |
spring-context-support.jar | This package contains utility Spring code—this means caching, instrumentation, e-mail and scheduling support, and the very interesting scripting languages support |
spring-core.jar | This contains the core files of the Spring Framework: it deals with annotations, enumerations, task execution, resource loading, and other utilities and exceptions you may find useful even outside the context of the Spring Framework |
spring-jdbc.jar | This package contains code for the JDBC support classes, namely the JdbcTemplate and JdbcDaoSupport classes |
spring-jms.jar | This JAR contains code for JMS |
spring-orm.jar | This archive contains the files needed for object-relational mapping (ORM) tools. Including this package on your classpath will give you Spring support for Hibernate 3, iBATIS, JDO, JPA, and TopLink |
spring-test.jar | This package contains support code to write unit and integration tests using the Spring Framework. It supports the JUnit 3, JUnit 4, and TestNG testing frameworks. In addition, you can use classes from the org.springframework.mock package, which represent mock implementations of JNDI and web classes |
spring-tx.jar | This one contains support for core data access exceptions and transaction technologies. These two areas are closely bound together, because the transactions generally work with some data access code |
spring-web.jar | This JAR contains code for the Spring web application support (utilities, binders, multipart resolvers) |
spring-webmvc-portlet.jar | This JAR contains code needed to build portlet-based (rather than servlet-based) web applications. If you have an application server that supports the Portlet API (JSR 168), you can use this package |
spring-webmvc-struts.jar | This package contains code needed to use Spring with the Jakarta Struts Framework |
spring-webmvc.jar | This package contains the Spring MVC code |
наверх Spring: таблица зависимостей
Dependency Group | JAR File | Описание |
ant | ant.jar, ant-junit.jar, ant-launcher.jar | Spring uses Apache Ant as its build tool, ant-launcher.jar as well as for many tasks such as generating documentation and running tests. Ant is not used at all at runtime, so you do not need to include this JAR file in your distribution |
aopalliance | aopalliance.jar | The AOP Alliance (http://aopalliance.sourceforge.net/) is a combined, open source collaboration between many projects to provide a standard set of interfaces for AOP in Java. Spring’s AOP implementation is based on the standard AOP Alliance APIs. You only need this JAR file if you plan to use Spring’s AOP or AOP-based features |
axis | axis.jar, saaj.jar, wsdl4j.jar | Spring uses the Apache Axis project to support the JAX-RPC capabilities in Spring remoting. You only need these files if you are using JAX-RPC remoting |
caucho | burlap-2.1.7.jar, hessian-3.0.13.jar | Spring remoting provides support for a wide variety of different protocols, including Caucho’s Burlap and Hessian. You only need the JARs in this group if you are using the corresponding protocols in your application |
cglib | cglib-full-2.0.2.jar | CGLIB is used to generate dynamic proxy classes for use in both the core DI and AOP implementations. You almost always need to include CGLIB with your application, because it is used to implement a wide range of Spring’s functionality |
cos | cos.jar | COS stands for com.oreilly.servlet, which is a collection of useful classes for working with servlets and web-based applications. Spring uses COS in two areas: for handling file uploads and sending e-mail. In both cases, COS is just an implementation choice, so you only need to include cos.jar if you choose to use COS over one of the other implementations |
dom4j | dom4j.jar | You must have dom4j when you are using Hibernate, so you need to include this JAR file if you plan to use Hibernate for ORM in your application |
easymock | easymock.jar, easymockclassextension.jar | EasyMock is used in the Spring test suite, so you only need to use this JAR for building and running the test suite; you do not need to distribute this with your application |
freemaker | freemaker.jar | Spring provides wrapper classes around the FreeMarker templating engine and also provides support for using FreeMarker templates as views for your web applications. This is required whenever you are using FreeMarker |
hibernate | ehcache.jar, hibernate3.jar, odmg.jar | These JAR files are required when you are using Spring’s Hibernate integration and support classes. If you are using a different ORM tool, such as iBATIS, you can leave these JARs out of your application. When you are using Hibernate, you must also include the CGLIB JAR file in your application |
hsqldb | hsqldb.jar | The hsqldb.jar file is used by the Spring sample applications |
ibatis | ibatis-common.jar, ibatis-sqlmap.jar, ibatis-sqlmap-2.jar | These files are required when you are using Spring’s iBATIS integration classes, but you can leave them out of your application if you are using JDBC or another ORM tool such as Hibernate or JDO |
itext | itext-1.3.1.jar | Spring uses iText to provide PDF support in the web tier. Only include this JAR if your web applications need to generate PDF output |
j2ee | activation.jar, connector-api.jar, ejb.jar, jaxrpc.jar, jdbc2_0-stdext.jar, jms.jar, jstl.jar, jta.jar, mail.jar, servlet.jar, xml-apis.jar | As you can see, there is a large array of different Java EE-related JAR files. You need the activation.jar and mail.jar files if you want to use the JavaMail implementation of Spring’s mail support. You need connector-api.jar to use the JCA connector for Hibernate, ejb.jar to use Spring’s EJB support, and jms.jar to use Spring’s JMS support. For web applications, you need servlet.jar, and you need jstl.jar if you want to use Spring’s JSTL support. The jaxrpc.jar file is required for JAX-RPC support in Spring remoting, and jta.jar is used for JTA transaction support. The remaining two jars, jdbc2_0-stdext.jar and xml-apis.jar, are needed for JDBC and XML configuration support, respectively—but only when you are using a version 1.3 JVM |
jakarta | jakarta-commons commons-attributes-api.jar, commons-attributes-compiler.jar, commons-beanutils.jar, commons-collections.jar, commons-dbcp.jar, commons-digester.jar, commons-discovery.jar, commons-fileupload.jar, commons-lang.jar, commons-logging.jar, commons-pool.jar, commons-validator.jar | Many of the components from the Jakarta Commons project are used by Spring. You need the commons-attribute-api.jar if you want to use source-level metadata in your application, plus you need the compiler JAR file to compile the attributes into your application. The beanutils, collections, digester, discovery, and validator JAR files are used by Struts, and Hibernate uses collections as well. dbcp is used by Spring’s JDBC support when you are using DBCP connection pools, and pooling is required by some of the sample applications fileupload is required if you want to use the corresponding Spring wrapper to handle file uploads in your web applications. Finally, logging is used throughout Spring, so you need to include it in every Spring-based application |
jakarta-taglibs | standard.jar | This is the Jakarta JSTL implementation, and it is used by some of the Spring sample applications |
jboss | jboss-common-jdbc-wrapper.jar | This is required when you are using Spring’s JDBC classes in an application running on the JBoss application server |
jdo | jdo.jar | This is required for Spring’s JDO support |
jdom | jdom.jar | JDOM is required when you are using iBATIS 1.3 with Spring |
jotm | jotm.jar, xapool.jar | The jotm.jar file is required if you plan to use JOTM in conjunction with Spring’s transaction abstraction layer. You only need xapool.jar if you plan to use XAPool for connection pooling in your application |
junit | junit.jar | JUnit is not required at all at runtime; it is only used for building and running the test suite |
log4j | log4j-1.2.14.jar | This is required when you want to use Spring to configure log4j logging |
poi | poi-2.5.1.jar | This adds support for Microsoft Excel output to Spring’s MVC framework |
quartz | quartz.jar | This is used for Spring Quartz-based scheduling support |
regexp | jakarta-oro-2.0.7.jar | This is required when you are using regular expressions to specify point cuts in AOP |
struts | struts-1.1.jar | The Struts JAR is required whenever you want to use Struts in conjunction with Spring to build a web application |
velocity | velocity-1.4.jar, velocity-tools-generic-1.1.jar | Spring provides wrapper classes around Velocity to make it DI enabled and to reduce the amount of code you need to write to use Velocity in your application. In addition to this, Spring provides classes to support the use of Velocity as the view provider in the web tier. If you are using any of these features, you need to include the Velocity JAR files in your distribution |
xdoclet | xjavadoc-1.0.jar | Commons Attributes uses this to parse your source code files and extract the attribute information. Include this JAR file if you are using Spring’s Commons Attributes support |
наверх
Как использовать Spring и JSF вместе
Все классы будут находится в пакете test. Создадим класс-POJO
package test; public class DVD { private String title; private Integer discs;
далее геттеры и сеттеры
Интерфейс:
public interface IDVDService { public String saveDVD(DVD dvd); }
И его реализация:
public class DVDService implements IDVDService { public String saveDVD(DVD dvd) { return "hello"; } }
Контроллер:
public class SaveDVDBean { private DVD dvd; private IDVDService service; и их геттеры и сеттеры public String save() { System.out.println(service.saveDVD(dvd)); return null; }
Соответственно при работе нашего приложения на экране должно выводиться слово “hello”.
Теперь отредактируем файл web.xml
Добавим в папку WebContent- >WEB-INF файл faces-config.xml
И там же создадим файл applicationContext.xml
И страницу jsp создаем: spring.jspx
Готово, можно запускать
наверх
Interceptors - новая фишка в EJB 3.0, связанная с Aspect Oriented Programming (AOP)
Здесь будет описываться дефолтный Interceptor (перехватчик). Создайте файл ejb-jar.xml в следующей директории: ejbModule - META-INF - ejb-jar.xml
Далее создаем класс-перехватчик.
public class Auditor { public Object audit (InvocationContext invocationContext) throws Exception { String name = invocationContext.getMethod().getName(); long startTime = System.nanoTime(); System.out.println ("Default interceptor. Starting method: " + name); try { return invocationContext.proceed(); } finally { long elapsedTime = System.nanoTime() - startTime; System.out.println("Finished method: " + name + " Method took " + elapsedTime + " nanoseconds to execute"); } } }
Вы можете что угодно делать в этом классе до того как вызовется метод invocationContext.proceed(); Можно записывать логи в базу, файл и т.д. В данном случае, на консоль будет выводиться информация о том, какой метод был вызван, и сколько времени ушло на его обработку. В файле ejb-jar.xml ejb-name * /ejb-name (угловые скобки как всегда поедены) означает, что перехватчик по умолчанию применим ко всему EJB в текущем приложении. Так же можно сделать перехватчик только для класса: перед классом написать аннотацию @Interceptors(Auditor.class), в самом классе перед методом audit написать @AroundInvoke. Тогда перехватчик вызывается для методов этого класса. И 3 вариант: вызывать для конкретного метода, пишем аннотацию перед самим методом. Ну вперед, проверьте на деле новую фишку EJB 3.0!
наверх Как использовать EJB 3.0 и JSF 1.2 вместе.
Начнем с EJB модуля.
package lesson; import javax.persistence.*; @Entity public class Person implements java.io.Serializable { @Id @GeneratedValue private Integer id; private String name; далее геттеры и сеттеры package lesson; import javax.ejb.Local; @Local public interface HelloWorldLocal { public void createPerson (Person person); } package lesson; import javax.ejb.*; import javax.persistence.*; @Stateless public class HelloWorldBean implements HelloWorldLocal { @PersistenceContext(unitName = "persons_dates") private EntityManager manager; public void createPerson (Person person){ manager.persist(person); } }
Теперь WEB модуль
package servlets; import javax.ejb.*; import lesson.*; public class TestClient { @EJB private HelloWorldLocal hello; private Person person; и его геттеры и сеттеры public void result() { hello.createPerson(person); } }
Создадим файл faces-config.xml
И последний шаг: new.jsp
Все остальные файлы стандартные, поэтому не приводятся
наверх
Пример использования фреймворка Seam
В данном случае Seam используется для того чтоб «подружить» EJB 3.0 и JSF 1.2. Предустановленное ПО: JVM (1.6), JBoss (5.1), Eclipse (3.4.2), MySQL 5.1 – предполагается, что вы уже знаете как ими правильно пользоваться. Фреймворк Seam можно скачать с официального сайта, архив весит порядка 100 мб, но в данном примере использоваться будут только 4 библиотеки (так сказать необходимый минимум), которые будут в архиве проекта вместе с исходными кодами. Версия фреймворка 2.2.0.GA. Во всех подобных примерах предлагают воспользоваться плагином Seam в Eclipse, который генерит все нужные файлы, но меня такой путь не устраивает, а вдруг я хочу добавить фреймворк уже к существующему проекту, а вот здесь и ожидает засада, т.к. плагин делает много вещей, которые остаются за кадром, и нет понимания как оно все работает и где и что должно быть!
Создаем в Eclipse новый Enterprise Application Project, назовем его seam. В seam->EarContent будет лежать первая библиотека: jboss-seam.jar, остальные три: jboss-el, jsf-facelets, jboss-seam-ui (эта библиотека используется для валидации данных). В seam->EarContent->META-INF редактируем application.xml. В него нужно добавить следующие строчки:
В той же папке создаем файл jboss-app.xml:
Структура показана на рисунке.
В seamEJB -> Properties -> J2EE Module Dependencies отмечаем jboss-seam.jar
В seamEJB->ejbModule в папке lesson создаем класс Person:
@Entity @Name("person") @Scope(ScopeType.SESSION) public class Person implements java.io.Serializable { @Id @GeneratedValue private Integer id; @NotNull @Length(min=5, max=15) //это и есть валидация данных private String name; далее геттеры и сеттеры.
Интерфейс HelloWorldLocal стандартный, с одним методом, код не приводится поэтому. Реализация интерфейса:
@Stateless @Name("register") //будьте внимательны, чтоб имена были уникальны. public class HelloWorldBean implements HelloWorldLocal { @In private Person person; @PersistenceContext(unitName = "persons_dates") private EntityManager manager; public String createPerson() { manager.persist(person); return "/registered.jsp"; }
Так же в seamEJB->ejbModule создадим файл components.properties:
jndiPattern=seam/\#{ejbName}/local
embeddedEjb=false
и там же пустой файл seam.properties
В seamEJB->ejbModule-> META-INF исправляем файл ejb-jar.xml, этот файл пишется в том случае если используется ejb
Там же должен быть файл persistence.xml
В seamWeb->WebContent->WEB-INF создаем файл components.xml
В той же папке должен быть faces-config.xml, в нем следующие строчки:
И файл jboss-web.xml
Редактируем файл web.xml
Теперь веб-страницы: register.jsp
И страница registered.jsp
Проект готов, можно тестировать.
наверх
Facelets. Как писать пробелы для Facelets. А проблема в том, что он их поедает:)
Пример:
h:commandLink value="Link 1"
h:commandLink value="Link 2"
Получится следующее:
Link 1Link 2
Решение: 1. использовать EL expression, который вставляет пробел
h:commandLink value="Link 1"
#{' '}
h:commandLink value="Link 2"
Результат:
Link 1 Link 2
2. Связать пробел с одно-символьной переменной
factory name="_" value=" " scope="APPLICATION"
#{' '} == #{_}
На заметку: & n b s p; лучше не использовать для обозначения пробела. А мне Facelets вообще не позволяет писать такие символы:) Конечно угловые скобки не отображаются, но я думаю и так знаете, где их надо поставить:) Взято отсюда:
http://www.redhat.com/f/pdf/jbw/dallen_940_best_kept_secrets.pdf наверх
Eclipse: Комбинации клавиш. Сочетание клавиш. Назначение.
Ctrl+N Создание нового объекта, при этом будет запущен список выбора мастеров Ctrl+M Свертывание, развертывание окон редакторов и представлений Ctrl+Shift+Пробел Подсказка в параметрах метода Ctrl+Shift+M Вставка Ctrl+F Простой поиск Ctrl+H Сложный поиск Ctrl+K Повторить последний поиск Ctrl+/ Комментировать одну строку кода, если выделить несколько строчек и нажать комбинацию выделенный фрагмент будет закомментирован. Ctrl+F6 Перебор редакторов. Следующий редактор Ctrl+F8 Перебор перспектив. Следующая перспектива Ctrl+F7 Перебор представлений. Следующее представление F12 Активировать редактор F3 Открывает объявление выделенного элемента Alt+- Показать системное меню Shift+Ctrl+F Форматирование кода Ctrl-Q Перейти к последнему окну (месту), где происходило редактирование, удобно после навигации по коду для возвращения назад в точку редактирования. Ctrl+Alt+H Открыть иерархию вызовов. Открывает окно с деревом вызовов метода, на котором стоял курсор. Удобно при анализе вызовов метода, поскольку становятся видны все места, с которых осуществляется его вызов. Ctrl-Shift-G Найти все ссылки в коде. Показывает все пакеты, классы и члены, где используется выбранный тип. Alt-Shift-R (в редакторе) Переименовать
30.10.2008
Статья Горячие клавиши в Eclipse
http://www.pleso.net/ru/publications/2008/03/24/eclipse-hotkeys/ Установка плагинов в Eclipse
http://greycoder.blogspot.com/2008/01/eclipse.html MyEclipse Hibernate Introduction Tutorial - здесь видео как пользоваться hibernate tools (выглядит все приблизительно, не один в один)
http://www.myeclipseide.com/documentation/quickstarts/hibernateintroduction/ наверх
Полезные ссылки:
JAVA
Что нового появилось в Java SE 6
http://forum.vingrad.ru/articles/topic-191562.html
Собеседование по JAVA, вопросы, задачки, ответы
Ответы на вопросы для собеседования по Java SE (Часть 1)
http://dr-magic.blogspot.com/2009/01/java-se-1.html Мысли вслух и глупые программистские вопросы
http://caphome.com/tag/java/
JAVA: Даты, работа с датами
Статья об инструментах для обработки дат
http://www.ibm.com/developerworks/ru/edu/j-intermed/section7.html Работа с датами в Java
http://forum.vingrad.ru/articles/topic-157980.html Работа с классом java.util.Date
Статья здесь
JAVA: Регулярные выражения
Regexp-ы для java точь в точь как для php
http://javatutor.net/articles/java-regexp-like-php Регулярные выражения (Regular Expressions) в Java (regexp)
http://javaportal.ru/java/articles/regexp.html
JAVA: Java Transaction API (JTA)
Доступ к внешним системам и механизм глобальных, транзакций на платформе J2EE
http://forum.vingrad.ru/forum/topic-177144/anchor-entry1368040/0.html
JAVA: Java Message Service (JMS)
Введение в Java Message Service
http://www.ibm.com/developerworks/ru/edu/j-jms/
Enterprise JavaBeans (EJB)
Отличный пример по EJB 3
http://www.quizful.net/post/ejb-eclipse-example Пример EJB, работает точно:))
http://www.jairrillo.com/blog/2008/04/25/example-of-ejb3-session-bean-using-eclipse-europa-and-jboss/ Статья для начинающих - EJB
http://www.ibm.com/developerworks/ru/edu/j-scea/section5.html Начало работы с приложениями для Java EE
http://www.netbeans.org/kb/60/javaee/ejb30_ru.html Про то как создать и развернуть на сервере приложений JBoss простой message driven bean используя аннотации спецификации EJB 3
http://www.engine4business.ru/eclipse-jboss-mdb-ejb3-servlet-article-page1.html Часть 11: EJB3
http://wiki.linuxformat.ru/index.php/LXF99:Java_EE_EJB3 Eclipse, БД Derby, JBoss для создания примера J2EE, содержащего JSP-страницы, сервлет и сессионный компонент
http://www.ibm.com/developerworks/ru/library/os-ecl-wtp-i/ Статья про транзакции
http://www.ibm.com/developerworks/ru/library/j-jtp0514/index.html Миграция унаследованных приложений, использующих Hibernate, на OpenJPA и EJB 3.0
http://www.ibm.com/developerworks/ru/library/wes-0708_vines/index.html Постоянство в Java SE и Java EE на базе EJB 3.0 Persistence (слайды)
http://sun.dev.3wstyle.ru/pdf/std/PersistenceEJB3.0_Mikhail_Moscow.pdf
J2EE
Разработка Web-приложений с помощью Eclipse Europa : Часть 1. Java EE для Eclipse (2 и 3 части для языков PHP и Ruby)
http://www.ibm.com/developerworks/ru/edu/os-dw-os-eclipse-europa1.html
JSP
Перевод руководства по JavaServer Pages JSP 1.2
http://www.opennet.ru/docs/RUS/jsp1_2/jsp1_2-web.html.gz#JSP2_html_JSP_2_1_1 Статья о том как писать странички JSP с помощью JSTL
Статья здесь
JSF, Facelets, RichFaces
Введение в JavaServer Faces 1.2: Часть 1. Создание простых приложений
http://www.ibm.com/developerworks/ru/edu/j-jsf1/index.html Отличная статья как создавать проекты в eclipse и пример (рабочий)
http://balusc.blogspot.com/2008/01/jsf-tutorial-with-eclipse-and-tomcat.html Inside Facelets Part 1: An Introduction
http://www.jsfcentral.com/articles/facelets_1.html Facelets fits JSF like a glove
http://www.ibm.com/developerworks/java/library/j-facelets/ JSF 2.0 UI Component
http://forum.vingrad.ru/forum/s/d0f6876b41a4bb31658933039aa52c05/topic-270634/anchor-entry1950574/0.html Пример jsf
http://slonopotamus.org/jsf-ru/quickstart/hello_world JSF Request Lifecycle (рус.)
http://slonopotamus.org/jsf-ru/faq/request_lifecycle What’s New in JSF 2?
http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/ JSF Core Tags
http://www.horstmann.com/corejsf/jsf-tags.html Dynamic JSF forms
http://confluence.highsource.org/display/~lexi/Programmatic+usage+of+Facelets JSF Component Library Integration
http://www.jroller.com/wesleyhales/entry/jsf_component_library_integration_and Multi select in RichFaces trees
http://technology.amis.nl/blog/4710/multi-select-in-richfaces-trees Интегрирование JSF-приложения со средой Spring
https://www.ibm.com/developerworks/ru/edu/os-ag-jsf5/section4.html Пример JSF+RichFaces Checkbox
http://www.coderanch.com/t/449576/JSF/java/Check-box-column-trouble
JDBC
Все о JDBC
http://www.jdbc.teploduv.net
SQL and MySQL
Основы SQL
http://samsonov.bn.by/lib/sql/index.html Объяснение SQL объединений JOIN / INNER / OUTER
http://www.skillz.ru/dev/php/article-Obyasnenie_SQL_obedinenii_JOIN_INNER_OUTER.html MySQL + кодировки - хорошая статья про русские кодировки
http://www.lissyara.su/?id=1655 Проблема с кодировкой при занесении данных в базу MySQL
http://www.brim.ru/faq/java/encoding.html#1 Java: Русские буквы и не только...
http://java.brim.ru/article/index.jsp?id=2 Суперэффективные мускулы
http://www.xakep.ru/magazine/xs/063/060/1.asp Удаленный доступ к базе MySQL
http://forum.ru-board.com/topic.cgi?forum=8&topic=25939
Oracle
Всё об Oracle
http://baks.gaz.ru
JBoss
Установка JBoss
http://www.jboss.ru/translate/jboss24/ch01s06.html JBoss Installation Guide
http://wiki.jvantage.com/index.php/JBoss_Installation_Guide
Hibernate
Документация по Hibernate
http://www.hibernate.org/hib_docs/reference/en/html/ Complete Hibernate 3.0 Tutorial - с примерами на англ.яз.
http://www.roseindia.net/hibernate/index.shtml Статья "Основы hibernate" - с помощью файла xml
http://habrahabr.ru/blogs/java/29694/#habracut Статьи про hibernate
http://man4j.blogspot.com/search/label/Hibernate Статья: Не повторяйте DAO! Создание обобщенного типизированного DAO с Hibernate и Spring AOP
http://www.ibm.com/developerworks/ru/library/j-genericdao/ Hibernate Example
http://l2improve.wikidot.com/hibernate-example Hibernate: каскадные обновления, инверсия отношений и прочая и прочая
http://javatutor.net/articles/hibernate-cascade-update-inverse-etc Пример приложения с использованием Hibernate и Spring
http://www.ibm.com/developerworks/ru/edu/dm0604balani/index.html ORM и подводные камни реализации equals и hashCode
статья здесь
Spring
Простое приложение на Spring
http://artamonov.ru/2006/03/15/prostoe-prilozhenie-na-spring Пример. Spring
http://forum.vingrad.ru/articles/topic-210395.html Приложение на Spring с нуля
http://pro-dev.ru/?p=10 Обработка форм в Spring
http://pro-dev.ru/?p=27 Разработка веб-приложений на Spring
http://yasinetskiy.com/2008/01/21/spring-web-applications-development-part1/ Концепция Inversion of Control и основы Spring
http://javatutor.net/articles/spring-basic-and-inversion-of-control Не очень краткое введение в Spring Framework
http://samolisov.blogspot.com/2009/01/spring-framework.html Тестируем Spring-приложение с помощью JUnit
http://samolisov.blogspot.com/2008/07/spring-junit.html Spring IoC Annotation-based configuration на примере JSF , часть 1
http://flashxl.habrahabr.ru/blog/48439/ Spring IoC Annotation-based configuration, часть 2
http://habrahabr.ru/blogs/java/48606/#habracut Spring Framework – первые шаги
http://www.lifein.com.ua/java/77 Spring security
http://nkoksharov.blogspot.com/search/label/spring%20security What's New in Spring 2.5
http://www.infoq.com/articles/spring-2.5-part-1 Большое руководство по Spring на английском языке
http://static.springframework.org/docs/Spring-MVC-step-by-step/ Блог: статьи по спрингу
http://nkoksharov.blogspot.com
AJAX
Перетаскивание. Перетаскивание с помощью ICEfaces - рус.
http://www.williamspublishing.com/PDF/978-5-8459-1327-2/part.pdf JSF AJAX Component Library Feature Matrix - сравнительная таблица по фреймворкам, предоставляющим Ajax
http://www.jsfmatrix.net Trinidad in Action - Part 1: An introduction (возможно эту ссылку надо перенести в другой раздел)
http://www.jsfcentral.com/articles/trinidad_1.html Вебинар IceFaces "Что нового в JSF 2.0" (EN) рассказывают в начале про чат.
http://www.icesoft.com/webinar/archive/whats-new-jsf2.html Ajax4jsf Developer Guide
https://ajax4jsf.dev.java.net/nonav/documentation/ajax-documentation/developerGuide.html
Ant
Create the WAR file from Eclipse Project and deploy it to tomcat
http://arkblog.wordpress.com/2008/01/08/creating-a-deployable-war-file-from-eclipse-project/ Настройка и использование Apache Ant для разработки Java приложений
http://www.simplecoding.org/nastrojka-i-ispolzovanie-apache-ant.html про Ant можно прочитать здесь
http://www.ibm.com/developerworks/ru/edu/j-apant/ Статья Ant за 10 шагов
http://forum.vingrad.ru/articles/topic-158800.html
Тестирование - JUnit
Введение в JUnit
http://www.kv.by/index2009441108.htm Переходим на JUnit 4
http://www.ibm.com/developerworks/ru/edu/j-junit4/?S_TACT=105AGX02&S_CMP=TUT Тестирование с точки зрения разработчика (статья Часть 10)
http://java-course.ru/
Сертификаты
Sun Certification: SCJP
http://kharkovconcurrencygroup.blogspot.com/2009/11/sun-certification-scjp.html
Log4j
Статья Логгирование с помощью Log4j
http://forum.vingrad.ru/articles/topic-215351/kw-log-%D0%BB%D0%BE%D0%B3%D0%B8.html Гибкое журналирование с помощью log4j
http://javatutor.net/articles/journalizing-with-log4j
UML
Хорошо написано про UML
http://www.ibm.com/developerworks/ru/edu/j-scea/section2.html
XML
Видео лекции университета Berkeley про XML
http://freevideolectures.com/ComputerScience/xml_foundations.php Руководство по Web-сервисам
http://ru.sun.com/pdf/j2ee/WST.pdf
HTML, CSS
On-line справочник по xhtml, html, css, ssi
http://htmlbook.ru CSS Validation Service
http://jigsaw.w3.org/css-validator/#validate_by_uri Markup Validation Service. Check the markup (HTML, XHTML, …) of Web documents
http://validator.w3.org
Библиотеки
Здесь различные библиотеки и многое другое
http://www.java2s.com/Code/Jar/CatalogJar.htm
Antlr
Документация по Antlr - En
http://jnb.ociweb.com/jnb/jnbJun2008.html Примеры по использованию antlr - официальный сайт - En
http://www.antlr.org/wiki/display/ANTLR3/Expression+evaluator Пример, нерабочий (у меня не сработал), устарел наверное - En
http://tech.puredanger.com/2007/01/13/implementing-a-scripting-language-with-antlr-part-1-lexer/ Пример на русском, тож не сработал:)
http://club.shelek.ru/viewart.php?id=39 Установка необходимых plug-ins для работы с библиотекой antlr в IDE Eclipse
http://unicorn.cmc.msu.ru/6sem/eclipse.shtml и еще одна ссылка
http://forum.auditory.ru/viewtopic.php?f=88&t=5909&st=0&sk=t&sd=a&sid=af30c87f02681b64aaa515df1474992a
Linux
Linux - Ubuntu 8.10, 9.04 для начинающих
http://fmmorpg.ru/forumtopic_1614_.html
Форумы
Форум по Java, Servlet, JSP и т.д. На сайте выбрать Big Moose Saloon
http://javaranch.com
Подкасты по программированию
Подкасты об ООП, паттернах и т.д. (для начинающих - java)
http://taop.rpod.ru/? Радио Бермудский Треугольник. Ведущий Будам, Даник и Леник. Очень интересные подкасты об IT и просто про жизнь
http://btradio.wordpress.com
Тесты
Здесь можно пройти бесплатные тесты на англ.языке на знание Java и т.д.
http://brainbench.com там я провалила тест на J2EE, вышло 2 балла, а надо минимум 2,75:))) это было давно, да пересдать руки не доходят:)
Тесты java и не только, у меня пока желтый пояс:)
http://www.javablackbelt.com/Home.wwa а здесь на рус.языке
http://www.quizful.net Подготовка к Sun Certified Java Programmer(SCJP) exam
http://rsdn.ru/article/java/scjp_article.xml
Блоги программистов
Блог программиста
http://www.skipy.ru Блог программиста
http://ekrs.blogspot.com/ Переводы статей о программировании и др.
http://www.maxkir.com
Разное
Инструменты инфраструктурной поддержки для Agile проекта на Java
http://habrahabr.ru/company/creativemedia/blog/58459/