Thursday, February 23, 2012

Struts2 example with Annotation. Struts 2 with annotation. First Struts 2 with annotation.


Struts2 First Example.


1. Create one Dynamic Project in Eclipse Say StrutsAnno
2. Put all these below jar file inside WEB-INF\lib folder
struts2-core-2.1.6.jar
xwork-2.1.2.jar
commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-convention-plugin-2.1.6.jar

3. Change your web.xml (WEB-INF\web.xml) file as below:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts2 First Example </display-name>
<filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>


There is no use of struts.xml if you use Annotation. :)

4. Create one package inside src folder say binod.suman
UserAction.java (StrutsAnno\src\binod\suman\UserAction.java)

package binod.suman;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

public class WelcomeUserAction {
private String userName;
private String message;

@Action(value="/welcome",results={@Result(name="success",location="/successPage.jsp"),@Result(name="error",location="/error.jsp")})
public String execute() {
message = "Welcome " + userName + " !";
System.out.println("Message : "+message);
if(userName.equals("Binod")){
 return "success";
}else{return "error";}
}

public void setUserName(String userName) {
this.userName = userName;
}

public void setMessage(String message) {
this.message = message;
}

public String getUserName() {
return userName;
}

public String getMessage() {
return message;
}
}


5. These below JSP page inside the WebContent
index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello World</title>
    </head>
    <body>
        <s:form action="welcome" >
            <s:textfield name="userName" label="User Name" />
            <s:submit />
        </s:form>
    </body>
</html>


error.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
  <title>Some Error</title>
  <link rel="stylesheet" href="mystyle.css" type="text/css" />
</head>
<body>
<h1>Error!</h1>
This error page is being shown because any of following reasons:
<ul class="boldred">
<li>Field(s) left blank.</li>
<li>Invalid Data Entered.(For example: String in place of Integer.)</li>
</ul>

<h1> You have entered <font color="red"> <b><s:property value="userName"/></b> </font> but you should suppose to enter <b>Binod</b> </h1>
</body>
</html>


successPage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome User</title>
</head>
<body>
<b><s:property value="message"/></b>.
</body>
</html>


Only one web.xml, one java class and some jsp pages.

http://localhost:8080/StrutsAnno/

Put UserName Binod
Output:
Welcome Binod !.

That's it ............... :)

Thanks,

Binod Suman






First Example on Struts2, Struts2 Tutorial, Struts2 Easy Example


Why Struts2.


First Example on Struts2:

1. Create one Dynamic Project in Eclipse Say Struts2
2. Put all these below jar file inside WEB-INF\lib folder
struts2-core-2.0.6.jar
xwork-2.0.1.jar
commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar

3. Change your web.xml (WEB-INF\web.xml) file as below:
web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts2 First Example </display-name>
<filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>



4. In Struts2/src folder, put these two file:
ClientAction.java

import com.opensymphony.xwork2.ActionSupport;

public class ClientAction extends ActionSupport{

String name;

public String getName(){
return name;
}

public void setName(String name){
this.name = name;
}

public String execute() throws Exception{
if(getName().equals("")){
      return ERROR;
        }
else{
return SUCCESS;
}
}

}



struts.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <include file="struts-default.xml"/>
  <package name="default" extends="struts-default">

<action name="clientAction" class="ClientAction">
<result name="success">/client.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/error.jsp</result>
</action>


   </package>
</struts>


5. Write some jsp file inside Struts2\WebContent
index.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
  <s:form action="clientAction" method="post">
      <s:textfield label="Name" name="name"/>
    <s:submit/>
  </s:form>
 
  </body>
</html>


client.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
Thank you! <b><s:property value="name"/></b>.
<br><br>
</body>
</html>


error.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
  <title>Some Error</title>
  <link rel="stylesheet" href="mystyle.css" type="text/css" />
</head>
<body>
<h1>Error!</h1>
This error page is being shown because any of following reasons:
<ul class="boldred">
<li>Field(s) left blank.</li>
<li>Invalid Data Entered.(For example: String in place of Integer.)</li>
</ul>
</body>
</html>


That's it .........

Add any application Server inside the Eclipse and run .....
If you are getting some error that might be for update code.
So, In Eclipse bottom tab one Server tab is there -> locate your application server -> then right click on Struts1 (Project) -> click on "Clean Module Work Directory".


Now go to internet explorer and type URL:

http://localhost:8080/Struts2

and type your name in text box, you should suppose to get output like this

Thank you! Your Name.

Thanks,

Binod Suman





Struts2 why more powerful than Struts1. Struts2 Vs Struts1 . Compare between Struts1 and Struts2


STRUTS2 = STRUTS1 + Interceptor (=XWork) + OGNL - FormBean

1. Easy web.xml

STRUTS1:


<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
 
STRUTS2:

<filter>
<filter-name>webwork</filter-name>
<filter-class>
   org.apache.struts.action2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


No struts-config.xml inside WEB-INF folder.

2. Easy Action Class.

STRUTS1:
public class MyAction extends Action {
    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
            throws Exception {
        // do the work
        return (mapping.findForward("success"));
    }
}

All actions have to be thread-safe, as only a single action instance is created.
Struts 1 Actions are singletons and must be thread-safe since there will only be one instance of a class to handle all requests for that Action.
Because the actions have to be thread-safe, all the objects that may be needed in the processing of the action are passed in the method signature.

STRUTS2:
Struts 2 Action objects are instantiated for each request, so there are no thread-safety issues.
public class MyAction {
   public String execute() throws Exception {
        // do the work
        return "success";
   }
}

Here no need to extends other class and no need to pass every thing in execute method.

If you want to use any session or request ro response object then use xxxxAware, example:
public class MyAction implements ServletRequestAware {
   private HttpServletRequest request;
   public void setServletRequest(HttpServletRequest request) {
        this.request = request;
   }
   public String execute() throws Exception {
        // do the work using the request
        return Action.SUCCESS;
   }
}

3. No Action From

STRUTS1:
Struts 1 uses an ActionForm object to capture input. Like Actions, all ActionForms must extend a base class. Since  other JavaBeans cannot be used as ActionForms, developers often create redundant classes to capture input. DynaBeans can used as an alternative to creating conventional ActionForm classes, but, here too, developers may be redescribing existing JavaBeans.

STRUTS2:
All data of ActionForm will do here in action class, so need to create one more class.The Action properties can be accessed from the web page via the taglibs.

4. Advanced Expression Language:

STRUTS1:
Struts 1 integrates with JSTL, so it uses the JSTL EL. The EL has basic object graph traversal, but relatively weak collection and indexed property support.

STRUTS2:
Struts 2 can use JSTL, but the framework also supports a more powerful and flexible expression language called "Object Graph Notation Language" (OGNL).

5. Easy Validation

STRUTS1:
Struts 1 supports manual validation via a validate method on the ActionForm, or through an extension to the Commons Validator.

STRUTS2:
Struts 2 supports manual validation via the validate method and the XWork Validation framework. The Xwork Validation Framework supports chaining validation into sub-properties using the validations defined for the properties class type and the validation context.

Content Source.
Another Source.

Thanks,

Binod Suman




Wednesday, February 22, 2012

Java Random number generation of 4 digits



import java.util.Random;

System.out.println("***** Generating Random Number of 4 digit *****");
Random random = new Random();
for(int i=0;i<100;i++){
    long fraction = (long)(1000 * random.nextDouble());
    int PIN= (int)(fraction + 1000);
    System.out.println(PIN);
 }