本文仅有的目的:1,使你的第一个struts能运行起来(不讲关于struts原理方面的)
(if this is not your aim,please don't waste your time)
1,j2ee中最头痛的就是什么都是以环境配置开始,还好,配多了,熟悉了,也就无所谓了,其实没什么困难的
(1)下载struts包 [url]http://struts.apache.org/download.cgi[/url]
(2)在你的tomcat中的webapps下建个application,假设为userRegister(用户注册的例子)
其中的目录结构为
userRegister
|__WEB_INF
|____classes //此文件夹中存放java原文件(action,form等)及其对应的class文件
|____web.xml
|____struts-config.xml
|____*.java
|____userRegister
|_______*.class
|____lib //把struts包下的lib中的.jar包都copy过来
|____tld //把struts包下的lib中的struts标签.tld文件copy过来
2,来看看我们的java文件是怎样实现客户注册的
(1)User.java
package userRegister;
/**
*表示用户信息,它是一个值对象,被From使用
*这个对象必须提供对应的getter和setter方法
*/
public class User
{
public String userName;
public String password;
public int id ;
public void setUserName(String name)
{
this.userName=name;
}
public void setPassword(String password)
{
this.password=password;
}
public String getUserName()
{
return this.userName;
}
public String getPassword()
{
return password;
}
public int getId()
{
return this.id;
}
public void setId(int id)
{
this.id=id;
}
}
(2)UserForm.java
package userRegister;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
//Form,包含一个user属性。
public class UserForm extends ActionForm
{
private User user=new User();
public void setUserName(String userName)
{
user.setUserName(userName);
}
public String getUserName()
{
return user.getUserName();
}
public void setUser(User user)
{
this.user=user;
}
public User getUser()
{
return this.user;
}
//重新设置form
public void reset(ActionMapping mapping, HttpServletRequest request)
{
this.user = new User();
}
//form有效性判断,这里做简化处理。我们不熟悉,也可不要这段代码
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if ((user.getUserName() == null) || (user.getPassword().length() < 3))
{
errors.add( "password" , new ActionError( "error.user.password" ));
}
return errors;
}
}
(3)UserAction.java
package userRegister;
import org.apache.struts.action.*;
import javax.servlet.http.*;
//Action类。
public class UserAction extends Action
{
public ActionForward perform(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
{
UserForm f=(UserForm)form;
try
{
UserBean bean=new UserBean(); //UserBean连接数据库,执行具体的业务逻辑。
bean.addUser(f.getUser());
}
catch(Exception e)
{
e.printStackTrace();
}
request.setAttribute( "User" ,f.getUser()); //把从form中user的属性保存供client调用
return (mapping.findForward( "userCreated" )); /*实现struts中的映射,其中userCreated为struts-config.xml代码中的片段<global-forwards>
<forward name="userCreated" path="/viewUser.jsp"/>
</global-forwards>,实现页面映射*/
}
}
(4)UserAction.java
package userRegister;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
/**
*实现具体的业务逻辑,它被Action类调用
*并且和HttpRequset等无关,这样增加了重用性。
*/
public class UserBean
{
private Connection conn ;
public UserBean()throws Exception
{
String CLASSFORNAME= "com.mysql.jdbc.Driver" ;
String URL= "jdbc:mysql://localhost/jspdev?user=heyf&password=19830824&useUnicode=true&characterEncoding=8859_1" ;
try
{
Class.forName(CLASSFORNAME);
conn = DriverManager.getConnection(URL);
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
*在数据库中添加一个用户
*/
public void addUser(User user)throws Exception
{
Statement stmt=conn.createStatement();
stmt.executeUpdate( "insert into User values('" +user.getUserName()+ "','" +user.getPassword()+ "'," +user.getId()+ ")" );
}
}
3,实现代码的可重用的中间成本往往是一种语言(xml)对重用代码的配置,这里两个需要的两个配置文件
(1)web.xml,运行struts的总体配置,包括对tld文件的路径等
<?xml version= "1.0" encoding= "ISO-8859-1" ?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd" >
<web-app>
<display-name>Struts Blank Application</display-name>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-html</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-nested</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-template</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/jstl/c</taglib-uri>
<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
</taglib>
</web-app>
(2)struts-config.xml
<?xml version= "1.0" encoding= "ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" >
<struts-config>
<form-beans>
<form-bean name= "userForm" type= "userRegister.UserForm" />
</form-beans>
<global-forwards>
<forward name= "userCreated" path= "/viewUser.jsp" />
</global-forwards>
<action-mappings>
<action path= "/createUser"
type= "userRegister.UserAction"
name= "userForm"
scope= "request"
validate= "true"
input= "/createUser.jsp" >
</action>
</action-mappings>
<message-resources parameter= "ApplicationResources" />
</struts-config>
4实现struts功能的jsp代码
(1)creatUser.jsp
<%@page contentType= "text/html;charset=8859_1" %>
<%@ taglib uri= "/struts-logic" prefix= "logic" %>
<%@ taglib uri= "/struts-bean" prefix= "bean" %>
<%@ taglib uri= "/struts-html" prefix= "html" %>
<html:html locale= "true" >
<head>
<html:base/>
</head>
<body>
<h2>创建一个用户</h2>
<html:errors/>
<html:form action= "createUser.do" method= "GET" > /*其中action中的值对应于struts-config.xml中的<action path="/createUser" */
userName:<html:text property= "user.userName" /> <br/>
password:<html:password property= "user.password" /> <br/>
<html:submit property= "submit" />
</html:form>
</body>
</html:html>
(2)viewUser.jsp
<%@page contentType= "text/html;charset=8859_1" import= "userRegister.User" %>
<%@ taglib uri= "/struts-logic" prefix= "logic" %>
<%@ taglib uri= "/struts-bean" prefix= "bean" %>
<%@ taglib uri= "/struts-html" prefix= "html" %>
<html:html locale= "true" >
<head>
<html:base/>
</head>
<body>
<%
request.setCharacterEncoding( "8859_1" );
User user=(User)request.getAttribute( "User" );
%>
已经创建了用户:
Name:<%=user.getUserName()%><br>
password:xxxxx<br>
Id:<%=user.getId()%><br>
</body>
</html:html>
问题:
也许你比较郁闷的是怎么编译那些java文件
因为调用了这些java包,
import org.apache.struts.action.*;
import javax.servlet.http.*;
import javax.sql.*;
import javax.servlet.http.HttpServletRequest;
而我们的jdk中不带这些包,tomcat5.0中没带javax.*包(老版本的tomcat4.0中又带了)可以从j2sdk中获得。
只有用功能强大的ant来编译了
怎样编译,请看[url]http://www.zhuoda.org/blog3/idiot_archive_2005_05_11_17883.html [/url]
referred:JSP应用开发详解
(if this is not your aim,please don't waste your time)
1,j2ee中最头痛的就是什么都是以环境配置开始,还好,配多了,熟悉了,也就无所谓了,其实没什么困难的
(1)下载struts包 [url]http://struts.apache.org/download.cgi[/url]
(2)在你的tomcat中的webapps下建个application,假设为userRegister(用户注册的例子)
其中的目录结构为
userRegister
|__WEB_INF
|____classes //此文件夹中存放java原文件(action,form等)及其对应的class文件
|____web.xml
|____struts-config.xml
|____*.java
|____userRegister
|_______*.class
|____lib //把struts包下的lib中的.jar包都copy过来
|____tld //把struts包下的lib中的struts标签.tld文件copy过来
2,来看看我们的java文件是怎样实现客户注册的
(1)User.java
package userRegister;
/**
*表示用户信息,它是一个值对象,被From使用
*这个对象必须提供对应的getter和setter方法
*/
public class User
{
public String userName;
public String password;
public int id ;
public void setUserName(String name)
{
this.userName=name;
}
public void setPassword(String password)
{
this.password=password;
}
public String getUserName()
{
return this.userName;
}
public String getPassword()
{
return password;
}
public int getId()
{
return this.id;
}
public void setId(int id)
{
this.id=id;
}
}
(2)UserForm.java
package userRegister;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
//Form,包含一个user属性。
public class UserForm extends ActionForm
{
private User user=new User();
public void setUserName(String userName)
{
user.setUserName(userName);
}
public String getUserName()
{
return user.getUserName();
}
public void setUser(User user)
{
this.user=user;
}
public User getUser()
{
return this.user;
}
//重新设置form
public void reset(ActionMapping mapping, HttpServletRequest request)
{
this.user = new User();
}
//form有效性判断,这里做简化处理。我们不熟悉,也可不要这段代码
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if ((user.getUserName() == null) || (user.getPassword().length() < 3))
{
errors.add( "password" , new ActionError( "error.user.password" ));
}
return errors;
}
}
(3)UserAction.java
package userRegister;
import org.apache.struts.action.*;
import javax.servlet.http.*;
//Action类。
public class UserAction extends Action
{
public ActionForward perform(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
{
UserForm f=(UserForm)form;
try
{
UserBean bean=new UserBean(); //UserBean连接数据库,执行具体的业务逻辑。
bean.addUser(f.getUser());
}
catch(Exception e)
{
e.printStackTrace();
}
request.setAttribute( "User" ,f.getUser()); //把从form中user的属性保存供client调用
return (mapping.findForward( "userCreated" )); /*实现struts中的映射,其中userCreated为struts-config.xml代码中的片段<global-forwards>
<forward name="userCreated" path="/viewUser.jsp"/>
</global-forwards>,实现页面映射*/
}
}
(4)UserAction.java
package userRegister;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
/**
*实现具体的业务逻辑,它被Action类调用
*并且和HttpRequset等无关,这样增加了重用性。
*/
public class UserBean
{
private Connection conn ;
public UserBean()throws Exception
{
String CLASSFORNAME= "com.mysql.jdbc.Driver" ;
String URL= "jdbc:mysql://localhost/jspdev?user=heyf&password=19830824&useUnicode=true&characterEncoding=8859_1" ;
try
{
Class.forName(CLASSFORNAME);
conn = DriverManager.getConnection(URL);
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
*在数据库中添加一个用户
*/
public void addUser(User user)throws Exception
{
Statement stmt=conn.createStatement();
stmt.executeUpdate( "insert into User values('" +user.getUserName()+ "','" +user.getPassword()+ "'," +user.getId()+ ")" );
}
}
3,实现代码的可重用的中间成本往往是一种语言(xml)对重用代码的配置,这里两个需要的两个配置文件
(1)web.xml,运行struts的总体配置,包括对tld文件的路径等
<?xml version= "1.0" encoding= "ISO-8859-1" ?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd" >
<web-app>
<display-name>Struts Blank Application</display-name>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-html</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-nested</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-template</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/jstl/c</taglib-uri>
<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
</taglib>
</web-app>
(2)struts-config.xml
<?xml version= "1.0" encoding= "ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" >
<struts-config>
<form-beans>
<form-bean name= "userForm" type= "userRegister.UserForm" />
</form-beans>
<global-forwards>
<forward name= "userCreated" path= "/viewUser.jsp" />
</global-forwards>
<action-mappings>
<action path= "/createUser"
type= "userRegister.UserAction"
name= "userForm"
scope= "request"
validate= "true"
input= "/createUser.jsp" >
</action>
</action-mappings>
<message-resources parameter= "ApplicationResources" />
</struts-config>
4实现struts功能的jsp代码
(1)creatUser.jsp
<%@page contentType= "text/html;charset=8859_1" %>
<%@ taglib uri= "/struts-logic" prefix= "logic" %>
<%@ taglib uri= "/struts-bean" prefix= "bean" %>
<%@ taglib uri= "/struts-html" prefix= "html" %>
<html:html locale= "true" >
<head>
<html:base/>
</head>
<body>
<h2>创建一个用户</h2>
<html:errors/>
<html:form action= "createUser.do" method= "GET" > /*其中action中的值对应于struts-config.xml中的<action path="/createUser" */
userName:<html:text property= "user.userName" /> <br/>
password:<html:password property= "user.password" /> <br/>
<html:submit property= "submit" />
</html:form>
</body>
</html:html>
(2)viewUser.jsp
<%@page contentType= "text/html;charset=8859_1" import= "userRegister.User" %>
<%@ taglib uri= "/struts-logic" prefix= "logic" %>
<%@ taglib uri= "/struts-bean" prefix= "bean" %>
<%@ taglib uri= "/struts-html" prefix= "html" %>
<html:html locale= "true" >
<head>
<html:base/>
</head>
<body>
<%
request.setCharacterEncoding( "8859_1" );
User user=(User)request.getAttribute( "User" );
%>
已经创建了用户:
Name:<%=user.getUserName()%><br>
password:xxxxx<br>
Id:<%=user.getId()%><br>
</body>
</html:html>
问题:
也许你比较郁闷的是怎么编译那些java文件
因为调用了这些java包,
import org.apache.struts.action.*;
import javax.servlet.http.*;
import javax.sql.*;
import javax.servlet.http.HttpServletRequest;
而我们的jdk中不带这些包,tomcat5.0中没带javax.*包(老版本的tomcat4.0中又带了)可以从j2sdk中获得。
只有用功能强大的ant来编译了
怎样编译,请看[url]http://www.zhuoda.org/blog3/idiot_archive_2005_05_11_17883.html [/url]
referred:JSP应用开发详解