2. Java Portlet Specification (JSR-168)

The Java platform provides an standard referred to as JSR-168 that standarizes how portlets interact with portlet containers and ensures compatibility across different portal products as long as portlet adheres to the standard. Liferay Portal provides a 100% compatible portlet container that guarantees that any portlet that adheres to the standard specification will be able to run within Liferay.

In JSR-168 a portlet application may aggregate several different portlets and is packed in a WAR file just as a standard Java web application. The portlets of the application are defined in a file called portlet.xml that is placed in the WEB-INF directory inside the WAR file. This file can be seen as an extension to the web.xml defined in the Java Servlet Specification. The Java Portlet specification allows portlet containers

For more information related to JSR-168 it is recommended to read the specification itself. Also several articles introducing development of JSR-168 portlets and explaining how to use several portlet frameworks are available online.