<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- The Basics --> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <<b>properties</b>>...</properties> <!-- Build Settings --> <build>...</build> <reporting>...</reporting> <!-- More Project Information --> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- Environment Settings --> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>scope:
Saturday, May 15, 2010
maven pom, scope
maven release plugin
mvn release:prepare
Cleaning
mvn release:clean - for cleaning resourced created by prepare
mvn release:rollback - for half done
Additional goals and release goals
update version of all projects

Preparing a release goes through the following release phases:
- Check that there are no uncommitted changes in the sources
- Check that there are no SNAPSHOT dependencies
- Change the version in the POMs from x-SNAPSHOT to a new version (you will be prompted for the versions to use)
- Transform the SCM information in the POM to include the final destination of the tag
- Run the project tests against the modified POMs to confirm everything is in working order
- Commit the modified POMs
- Tag the code in the SCM with a version name (this will be prompted for)
- Bump the version in the POMs to a new value y-SNAPSHOT (these values will also be prompted for)
- Commit the modified POMs
scm URL will be taken from <scm> or <meta http-equiv="content-type" content="text/html; charset=utf-8">-DconnectionUrl<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span class="Apple-style-span" style="font-family: Verdana,Helvetica,Arial,sans-serif; font-size: 16px;"></span></span> <b>mvn release:</b><b>perform</b>
Performing a release runs the following release phases:
- Checkout from an SCM URL with optional tag
- Run the predefined Maven goals to release the project (by default, deploy site-deploy
mvn --batch-mode -<i>Dtag</i>=my-proj-1.2 <b>release:prepare</b> \<br /> -<i>DreleaseVersion</i>=1.2 \<br /> -<i>DdevelopmentVersion</i>=2.0-SNAPSHOT** There properties can be inside release.properties file
Cleaning
mvn release:clean - for cleaning resourced created by prepare
mvn release:rollback - for half done
Additional goals and release goals
<configuration> <preparationGoals>clean install verify</preparationGoals> <goals>deploy</goals><br /></configuration>
update version of all projects
mvn release:<i><b>update-versions</b></i> -DautoVersionSubmodules=true
Wednesday, April 21, 2010
release sequence policy and deprecation
Major
Upgrading between major versions will most likely require some data migration and is to be regarded as a major event.
Minor
Will contain feature enhancements. A bigger test cycle of custom code and templates will be required.
Maintenance
Upgrading between maintenance releases should not require a big test cycle. A maintenance release should only contain bug fixes and no changed or added functionality.
As long as you have not used a bug or an undocumented feature as a significant feature in custom extensions, you should be fine in upgrading between maintenance releases.
Deprecation
A maintenance release might deprecate some API features. Deprecated features will not actually be removed until the next major release.
A major release will never remove API features that have not been deprecated in a previous maintenance release.
Upgrading between major versions will most likely require some data migration and is to be regarded as a major event.
Minor
Will contain feature enhancements. A bigger test cycle of custom code and templates will be required.
Maintenance
Upgrading between maintenance releases should not require a big test cycle. A maintenance release should only contain bug fixes and no changed or added functionality.
As long as you have not used a bug or an undocumented feature as a significant feature in custom extensions, you should be fine in upgrading between maintenance releases.
Deprecation
A maintenance release might deprecate some API features. Deprecated features will not actually be removed until the next major release.
A major release will never remove API features that have not been deprecated in a previous maintenance release.
Monday, April 19, 2010
A look at apache commons lang
ArrayUtils.reverse(starr);
CharUtils.isAsciiAlphaLower('s')
CharUtils.unicodeEscaped('&')
NumberUtils.min(intarr)
NumberUtils.max(intarr)
RandomStringUtils.randomAscii(8) + "\t" +
RandomStringUtils.randomAlphabetic(8) + "\t" +
RandomStringUtils.randomAlphanumeric(8) + "\t" +
RandomStringUtils.randomNumeric(8) + "\t"
RandomStringUtils.random(8, "0123456789ABCDEF")
StringEscapeUtils.escapeHtml("<html><html/>")
StringEscapeUtils.escapeXml("<xml/>")
"name='" + StringEscapeUtils.escapeSql("Peter's store") +"'"
StringEscapeUtils.unescapeHtml("<html><html/>")
StringUtils.isNumeric("nto")
StringUtils.abbreviate("Apache Commons Lang", 10)
StringUtils.getLevenshteinDistance("Nahian", "nahin")
StringUtils.left("Nahian", 3)
StringUtils.right("Nahian", 3)
StringUtils.leftPad("Nahian", 10)
SystemUtils.IS_OS_UNIX
SystemUtils.getJavaHome()
SystemUtils.getUserDir()
SystemUtils.getUserHome()
SystemUtils.JAVA_VERSION
SystemUtils.JAVA_RUNTIME_NAME
SystemUtils.OS_ARCH + " : " + SystemUtils.OS_NAME + " : " + SystemUtils.OS_VERSION
SystemUtils.USER_COUNTRY + " : " + SystemUtils.USER_LANGUAGE
WordUtils.initials("Apache Commons Lang.Co", new char[] {' ', '.'})
WordUtils.capitalize("This is the title of the sectionn")
Need a closer look at ArrayUtils, DateUtils, DateFormatUtils
CharUtils.isAsciiAlphaLower('s')
CharUtils.unicodeEscaped('&')
NumberUtils.min(intarr)
NumberUtils.max(intarr)
RandomStringUtils.randomAscii(8) + "\t" +
RandomStringUtils.randomAlphabetic(8) + "\t" +
RandomStringUtils.randomAlphanumeric(8) + "\t" +
RandomStringUtils.randomNumeric(8) + "\t"
RandomStringUtils.random(8, "0123456789ABCDEF")
StringEscapeUtils.escapeHtml("<html><html/>")
StringEscapeUtils.escapeXml("<xml/>")
"name='" + StringEscapeUtils.escapeSql("Peter's store") +"'"
StringEscapeUtils.unescapeHtml("<html><html/>")
StringUtils.isNumeric("nto")
StringUtils.abbreviate("Apache Commons Lang", 10)
StringUtils.getLevenshteinDistance("Nahian", "nahin")
StringUtils.left("Nahian", 3)
StringUtils.right("Nahian", 3)
StringUtils.leftPad("Nahian", 10)
SystemUtils.IS_OS_UNIX
SystemUtils.getJavaHome()
SystemUtils.getUserDir()
SystemUtils.getUserHome()
SystemUtils.JAVA_VERSION
SystemUtils.JAVA_RUNTIME_NAME
SystemUtils.OS_ARCH + " : " + SystemUtils.OS_NAME + " : " + SystemUtils.OS_VERSION
SystemUtils.USER_COUNTRY + " : " + SystemUtils.USER_LANGUAGE
WordUtils.initials("Apache Commons Lang.Co", new char[] {' ', '.'})
WordUtils.capitalize("This is the title of the sectionn")
Need a closer look at ArrayUtils, DateUtils, DateFormatUtils
Saturday, April 17, 2010
maven pmd plugin and cpd
$ mvn jxr:jxr pmd:pmd pmd:cpd
configuration:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.3</version>
<configuration>
<!-- to link to the output of jxr -->
<linkXref>true</linkXref>
<!-- if this is the root project -->
<aggregate>true</aggregate>
<!-- minimum token to detect duplicate -->
<minimumTokens>100</minimumTokens>
<targetJdk>1.5</targetJdk>
<excludes>
<exclude>**/*Bean.java</exclude>
</excludes>
<excludeRoots>
<excludeRoot>the_source_dir_to_exclude</excludeRoot>
</excludeRoots>
</configuration>
</plugin>
</plugins>
</reporting>
configuration:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.3</version>
<configuration>
<!-- to link to the output of jxr -->
<linkXref>true</linkXref>
<!-- if this is the root project -->
<aggregate>true</aggregate>
<!-- minimum token to detect duplicate -->
<minimumTokens>100</minimumTokens>
<targetJdk>1.5</targetJdk>
<excludes>
<exclude>**/*Bean.java</exclude>
</excludes>
<excludeRoots>
<excludeRoot>the_source_dir_to_exclude</excludeRoot>
</excludeRoots>
</configuration>
</plugin>
</plugins>
</reporting>
Jtidy
- DOM parser
: Node node = tidy.parser(IS/reader, OS/writer);
- pretty printer
: tidy.pprint(dom_Doc/node, OS)
- HTML cleaner, makes well formed HTML
CONFIGURATION
// make well formed
tidy.setXHTML(true);
tidy.setHideComments(true);
tidy.setIndentContent(true);
// space for indentation
tidy.setSpaces(4);
// whether to add tidy meta content tag
tidy.setTidyMark(false);
if (ERROR_PRINT_MODE)
tidy.setOnlyErrors(true);
else
tidy.setQuiet(true);
Other config
// tidy.setShowWarnings(false);
// tidy.setErrout(new PrintWriter(new StringWriter()));
// shows only <body> tag
// tidy.setPrintBodyOnly(true);
: Node node = tidy.parser(IS/reader, OS/writer);
- pretty printer
: tidy.pprint(dom_Doc/node, OS)
- HTML cleaner, makes well formed HTML
CONFIGURATION
// make well formed
tidy.setXHTML(true);
tidy.setHideComments(true);
tidy.setIndentContent(true);
// space for indentation
tidy.setSpaces(4);
// whether to add tidy meta content tag
tidy.setTidyMark(false);
if (ERROR_PRINT_MODE)
tidy.setOnlyErrors(true);
else
tidy.setQuiet(true);
Other config
// tidy.setShowWarnings(false);
// tidy.setErrout(new PrintWriter(new StringWriter()));
// shows only <body> tag
// tidy.setPrintBodyOnly(true);
Friday, April 16, 2010
substring using awk
$ echo "jtidy-r938-sources.jar" | awk '{i=index($0,".jar");print substr($0,1,i-1)}'
> jtidy-r938-sources
> jtidy-r938-sources
Tuesday, March 23, 2010
AWK basics
command: awk 'pattern {expression} [; ptrn {exp}]'
default-pattern: 1
default expression: print
hence,
'1' ~ '{print}' ~ '{print $0}' ~ '1 {print $0}
patterns:
BEGIN at file begin
END at file end
/match-pattern/ for string matching
Default vars:
NF: nOf fields
NR: nOf record so far
FNR: file's nOf record so far
length(): nOf letters
FS & OFS: field separator
RS & ORS: record separator
FILENAME
c-like code:
default-pattern: 1
default expression: print
hence,
'1' ~ '{print}' ~ '{print $0}' ~ '1 {print $0}
patterns:
BEGIN at file begin
END at file end
/match-pattern/ for string matching
Default vars:
NF: nOf fields
NR: nOf record so far
FNR: file's nOf record so far
length(): nOf letters
FS & OFS: field separator
RS & ORS: record separator
FILENAME
c-like code:
'{ s = 0; for (i = 1; i <= NF; i++) s = s+$i; print s }''{ printf("%5d : %s\n", NR, $0) }' for(i=1;i<=NF;i++) if($i~/[0-9]+/) $i="";
String utility:
substitute: '{ sub(/pattern/, "replacement'); print }'
or gsub for substitute all
shell $ variable
# ./getlyrics dhur valo "lage na"
$1: dhur
$3: lage na
$#: 3
$0: ./getlyrics
$@: dhur valo lage na
$*: dhur valo lage na
$1: dhur
$3: lage na
$#: 3
$0: ./getlyrics
$@: dhur valo lage na
$*: dhur valo lage na
maven-jxr-plugin
- can generate HTML pages with project source
mvn jxr:jxr
- can generate HTML pages with project test source
mvn jxr:test-jxr
- can link the source HTML file with Javadoc if configured
mvn jxr:jxr
- can generate HTML pages with project test source
mvn jxr:test-jxr
- can link the source HTML file with Javadoc if configured
Monday, March 22, 2010
How Pingback work
First = receptor
Second = originator<br><br />Pingback:
-> First blog exposes a ping back server
X-Pingback header or,
<link rel="pingback" href="([^"]+)" ?/?>
-> Second blog put a <a href> to First blog
-> Second pingback client will discover First pingback server from HTTP header or <link>
-> Second pingback client sends a xml-rpc request to First server with:
method: pingback.ping
param: sourceURI, targetURI
-> First pingback server now can do anything
. check whether targetURI exits?
. check whether srouceURI exits and has the link
. record the pingback
. change model so site page contains a link to source URI
Refback:
Nothing special required at Second end.
When browser loads url from First blog URL, it sends 'Referer' header with value Second blog URL
Trackback:
-> Trackback URI is RESTful .
Second = originator<br><br />Pingback:
-> First blog exposes a ping back server
X-Pingback header or,
<link rel="pingback" href="([^"]+)" ?/?>
-> Second blog put a <a href> to First blog
-> Second pingback client will discover First pingback server from HTTP header or <link>
-> Second pingback client sends a xml-rpc request to First server with:
method: pingback.ping
param: sourceURI, targetURI
-> First pingback server now can do anything
. check whether targetURI exits?
. check whether srouceURI exits and has the link
. record the pingback
. change model so site page contains a link to source URI
Refback:
Nothing special required at Second end.
When browser loads url from First blog URL, it sends 'Referer' header with value Second blog URL
Trackback:
-> Trackback URI is RESTful .
-> service discovery with RDF xmlSunday, March 21, 2010
System boot and linux boot
System boot
BIOS - checks memory and runs MBR
MBR - checks partition table and loads BootLoader(grub)
BootLoader - on OS selection, loads kernel
kernel starts the init process
// now booting is done
RUN LEVEL
0 - system halt(shutdown)
1 - single user
2-5 - multi-user
6 - restart
S - transitional run level
$ runlevel
Typical sysvinit startup
$ /etc/init.d/rc RL
runs the srcitsp in /etc/rc$RL.d
this is how sysvinit init worked
How upstart works
upstart jobs are defined in /etc/init/*.conf
hence, /etc/init/rc.conf loads /etc/init.d/rc $RL this way sysvinit functionality served.
Technorati Tags: linux
BIOS - checks memory and runs MBR
MBR - checks partition table and loads BootLoader(grub)
BootLoader - on OS selection, loads kernel
kernel starts the init process
// now booting is done
RUN LEVEL
0 - system halt(shutdown)
1 - single user
2-5 - multi-user
6 - restart
S - transitional run level
$ runlevel
Typical sysvinit startup
$ /etc/init.d/rc RL
runs the srcitsp in /etc/rc$RL.d
this is how sysvinit init worked
How upstart works
upstart jobs are defined in /etc/init/*.conf
hence, /etc/init/rc.conf loads /etc/init.d/rc $RL this way sysvinit functionality served.
Technorati Tags: linux
Create a upstart Task(9.10)
JOB
-> Task ( ends by themeselves)
-> Services (supervised by init)
http://www.linux.com/archive/feature/125977
$vim /etc/init/fun.conf
start on dofun
#stop on runlevel 016[]
script
echo "i am having fine now:" >> /tmp/funny.txt
echo `date` >> /tmp/funnyt.txt
end script
$ initctl emit dofun
other use of initctl for upstart init daemon
$initctl list
$initctl start/stop/status/restart/reload
Technorati Tags: linux, ubuntu, daemon
-> Task ( ends by themeselves)
-> Services (supervised by init)
http://www.linux.com/archive/feature/125977
$vim /etc/init/fun.conf
start on dofun
#stop on runlevel 016[]
script
echo "i am having fine now:" >> /tmp/funny.txt
echo `date` >> /tmp/funnyt.txt
end script
$ initctl emit dofun
other use of initctl for upstart init daemon
$initctl list
$initctl start/stop/status/restart/reload
Technorati Tags: linux, ubuntu, daemon
using xmms2
run xmms2 server
$ xmms2-launcher
play songs
$ xmms2 add FILE
$ xmms2 radd DIR
$ xmms2 play/stop/pause/list/status
media library
$ xmms2 mlib addpath PATH
$ xmms2 mlib search artist:"SDFSDFSF"
$ xmms2 mlib searchadd
$ xmms2 mlib loadall
$ xmms2-launcher
play songs
$ xmms2 add FILE
$ xmms2 radd DIR
$ xmms2 play/stop/pause/list/status
media library
$ xmms2 mlib addpath PATH
$ xmms2 mlib search artist:"SDFSDFSF"
$ xmms2 mlib searchadd
$ xmms2 mlib loadall
Thursday, March 18, 2010
maven enforcer plugin
Checking a system property

<executions>more rules
<execution>
<id>enforce-property</id>
<goals>
<goal>enforce</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
<configuration>
<rules>
<<b>requireProperty</b>>
<property>java7.home</property>
<message>"You must set a property java7.home!"</message>
</requireProperty>
</rules>
</configuration>
- bannedDependencies - enforces that excluded dependencies aren't included.
- evaluateBeanshell - evaluates a beanshell script.
- requireReleaseDeps - enforces that no snapshots are included as dependencies.
- requireMavenVersion - enforces the Maven version.
- requireJavaVersion - enforces the JDK version.
- requireProperty - enforces the existence and values of properties.
- requireFilesExist - enforces that the list of files do exist.
Wednesday, March 17, 2010
maven create mojo
- Create mojo class with inheritance and annotation
/**
* @goal release
* @aggregator
*/
public class ReleaseMojo extends AbstractReleaseMojo {
- annotation for defining mojotype: @aggregator
- annotated configuration parameters: @parameter
- parameters can be: single valued, multi-valued(array), collection of items, collection of objects, map, Object
- getLog() gives maven logging functions.
- maven project and its configuration from pom.xml can be used by annotation
/**
* @parameter default-value="${project}"
* @required
*/
protected MavenProject mExecutionProject;
http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
http://maven.apache.org/developers/mojo-api-specification.html#The_Descriptor_and_Annotations
http://maven.apache.org/ref/2.2.1/maven-plugin-api/apidocs/org/apache/maven/plugin/AbstractMojo.html

/**
* @goal release
* @aggregator
*/
public class ReleaseMojo extends AbstractReleaseMojo {
- annotation for defining mojotype: @aggregator
- annotated configuration parameters: @parameter
- parameters can be: single valued, multi-valued(array), collection of items, collection of objects, map, Object
- getLog() gives maven logging functions.
- maven project and its configuration from pom.xml can be used by annotation
/**
* @parameter default-value="${project}"
* @required
*/
protected MavenProject mExecutionProject;
http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
http://maven.apache.org/developers/mojo-api-specification.html#The_Descriptor_and_Annotations
http://maven.apache.org/ref/2.2.1/maven-plugin-api/apidocs/org/apache/maven/plugin/AbstractMojo.html
maven inheritence, aggregator project
Aggregation

<project ..>Inhertence
<...>
<modules>
<module>my-project</module>
<module>another-project</module>
</modules>
</project>
<project ...><br /> <...><br /> <parent><br /> <groupId>org.codehaus.mojo</groupId><br /> <artifactId>my-parent</artifactId><br /> <version>2.0</version><br /> <relativePath>../my-parent</relativePath><br /> </parent><br /><br /> <artifactId>my-project</artifactId><br /></project><br />
A POM project may be inherited from - but does not necessarily have - any modules that it aggregates. Conversely, a POM project may aggregate projects that do not inherit from it.
Sunday, March 14, 2010
Tuesday, February 23, 2010
Yahoo openID discovery
Yadis Location
http://yahoo.com
XRDS Location
http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds

http://yahoo.com
XRDS Location
http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds
Monday, February 22, 2010
OpenId provider server/endpoint discovery
OpenID 2.0 discovery
- XRI disovery -> resolve XRDS doc from XRI
- Yadis discovery
> "X-XRDS-Location" header or meta-attibute
> return XRDS document when "Get" with a header "Accept:application/xrds+xml"
- HTML based discovery
> link to endpoint with rel="openid.server" or rel="openid.provider "

- XRI disovery -> resolve XRDS doc from XRI
- Yadis discovery
> "X-XRDS-Location" header or meta-attibute
> return XRDS document when "Get" with a header "Accept:application/xrds+xml"
- HTML based discovery
> link to endpoint with rel="openid.server" or rel="openid.provider "
xrds document from google OpenID
- says which protocol are supported. Bolds are openId and openId attribute extension
- points to the OP endpoint
http://specs.openid.net/auth/2.0/server
http://openid.net/srv/ax/1.0
http://specs.openid.net/extensions/ui/1.0/mode/popup
http://specs.openid.net/extensions/ui/1.0/icon
http://specs.openid.net/extensions/pape/1.0
https://www.google.com/accounts/o8/ud
And for livejournal (openID 1.0)
http://openid.net/signon/1.0
http://www.livejournal.com/openid/server.bml

-
And for livejournal (openID 1.0)
Saturday, February 20, 2010
Servlet and Filter pluggability from servlet 3.0
public class MyListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
sc.addServlet("myServlet", "Sample servlet", "foo.bar.MyServlet",
null, -1);
sc.addServletMapping("myServlet", new String[] {"/urlpattern/*"});
sc.addFilter("myFilter", "Sample Filter", "foo.bar.MyFilter",
null);
sc.addFilterMapping("myFilter", new String[] {"/urlpattern/*"},
“myServlet”, DispatcherType.REQUEST, false);
}
}
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
sc.addServlet("myServlet", "Sample servlet", "foo.bar.MyServlet",
null, -1);
sc.addServletMapping("myServlet", new String[] {"/urlpattern/*"});
sc.addFilter("myFilter", "Sample Filter", "foo.bar.MyFilter",
null);
sc.addFilterMapping("myFilter", new String[] {"/urlpattern/*"},
“myServlet”, DispatcherType.REQUEST, false);
}
}
Whats new in Servlet 2.4 & 2.5
Servlet 2.4
-- ServletRequest -> get Local/Remote host port ()
- <dispatcher> inside <filter-mapping>, so it helps decide when apply filter? Whether in case of direct request or forward or both?
- ServletRequestListener, ServletRequestAttibuteListener added with other listner clases for Session and Context(2.3)
-- servlet welcome files
Servlet 2.5
-- wildcard(*) matching for <servlet-name> in <filter-mapping>. So can apply a filter for all servlets.
-- multiple <servlet-name> in <filter-mapping>
-- multiple <url-patter> in <filter-mapping> and <servlet-mapping>
- annotation?? whatever
Listed in detail:
http://www.roseindia.net/servlets/DifferenceBetweenServlet2.5AndServlet2.4.shtml
http://www.javaworld.com/javaworld/jw-03-2003/jw-0328-servlet.html
http://www.javaworld.com/javaworld/jw-01-2006/jw-0102-servlet.html
-- ServletRequest -> get Local/Remote host port ()
- <dispatcher> inside <filter-mapping>, so it helps decide when apply filter? Whether in case of direct request or forward or both?
- ServletRequestListener, ServletRequestAttibuteListener added with other listner clases for Session and Context(2.3)
-- servlet welcome files
Servlet 2.5
-- wildcard(*) matching for <servlet-name> in <filter-mapping>. So can apply a filter for all servlets.
-- multiple <servlet-name> in <filter-mapping>
-- multiple <url-patter> in <filter-mapping> and <servlet-mapping>
- annotation?? whatever
Listed in detail:
http://www.roseindia.net/servlets/DifferenceBetweenServlet2.5AndServlet2.4.shtml
http://www.javaworld.com/javaworld/jw-03-2003/jw-0328-servlet.html
http://www.javaworld.com/javaworld/jw-01-2006/jw-0102-servlet.html
Enable utf-8 for all JSP's
Don't have to put pageEncoding="utf-8" in all JSP pages
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>utf-8</page-encoding>
<!-- This works only on Servlet 2.5+ compatible servlet containers
(like Tomcat 6.x, Resin 3.1+) -->
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>utf-8</page-encoding>
<!-- This works only on Servlet 2.5+ compatible servlet containers
(like Tomcat 6.x, Resin 3.1+) -->
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
Subscribe to:
Comments (Atom)