手工安装、配置、编译和运行struts应用(struts1)

原文时间:2007-10-11


昨天拿起副班长的一本JSP书,复习了一下Struts基础才发现自己把东西忘记得很干净,同时也发现那本<JSP网络编程技术与实例>有关Struts那部分存在不少问题(实际上是很多问题,包括配置和编译问题,语法错误问题等等,我相当怀疑书上的例子是闭上眼乱敲上去的,CD里的另论),如果从空白跟着那章书一步一步地做我想写个helloworld也是相当困难。为让副班长以后少走弯路挤出更多时间为逃课的同学服务,我将该书有关Struts那部分的例子修正了一下并写下来。

使用IDE很方便没错,但那是生产时的事情,学习始终从细节开始比较好,在遇上问题而不知原因的时候再花时间去研究投资可能更大。

往下阅读之前,确定你的tomcat已能正常运行使用,这就是说,你的JDK没有问题,TOMCAT也没有问题。

一、下载Struts和建立编译运行Struts的环境
下载页面:http://struts.apache.org/downloads.html
选择你需要的版本,我使用的是Struts 1.3.8,不建议下载较旧的版本,因为有些特性已改动较大或者废除。

解压下载完的ZIP文件,得到一堆.jar文件,将他们复制到你运行JSP/Servlet的TOMCAT目录的WEB-INF/lib(注意大小写)目录下,如果没有WEB-INF/lib目录请新建一个并把Struts的.jar文件复制到该目录。请确保你的WEB-INF/目录下存在lib和classes目录,如果不存在请建立相应的目录。

至此,编译和运行Struts的准备工作其实已经做好了。

二、编写、编译一个最简单的Struts例子
我希望你能将MVC想像成一部电视机,你按下频道按钮(控制器),屏幕(视图)就会显示你想看的频道信号(模型)的图像。屏幕(视图)能将频道的视频信号(模型)转化成我们喜欢的图像,我们想看哪个频道(模型)要通过按钮(控制器)选择,然后就可以从屏幕(视图)上看到了。

本例是一个验证输入用户名和密码的程序,模型是代表一个账号(含有用户名和密码)的JavaBean,控制器本质上是一个Servlet,负责验证用户名和密码并转向有关页面,视图是3个JSP文件和一个代表输入表单的JavaBean,负责提供输入界面、验证成功和验证失败时要显示的页面和封装表单数据(什么是封装表单数据不用理会,只要知道点击了提交按钮后我们可以从这个代表输入表单的JavaBean中拿到表单的数据就行了),还有一个简单的消息资源文件,用于提供一些文字信息,例如网页的标题,用户名输入框前面的“用户名”之类的文字。

1、模型
在WEB-INF/classes下建立目录login,再在login下建立目录model,在model目录中新建一个名为AccountBean.java的文件,内容如下:

package login.model;

public class AccountBean
{
private String userName;
private String password;

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

public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}


}




假设AccountBean.java位于e:\struts\WEB-INF\classes\login\model下,打开windows的命令行模式,键入:javac e:\struts\WEB-INF\classes\login\model\AccountBean.java 然后回车,如无意外编译完成后model目录中会增加一个AccountBean.class文件。

2、视图
a、输入页面 login.jsp
在主目录(如果刚才模型位于e:\struts\WEB-INF\classes\login\model下,那么.jsp文件就放在e:\struts下,其实放在classes下也没所谓,不过不能直接请求)新建一个名为login.jsp的文件,内容如下:
<%@ page language="java"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<html>
<head>
<title>
<bean:message key="login.jsp.title" />
</title>
</head>
<body>
<html:form action="/login">
<bean:message key="login.jsp.username" />
<html:text property="userName" />
<html:errors property="userName" /> <br />
<bean:message key="login.jsp.password" />
<html:password property="password" />
<html:errors property="password" /> <br />
<html:submit /> <html:cancel />
</html:form>
</body>

</html>





b、验证成功页面 success.jsp

在login.jsp相同的目录中新建success.jsp,内容如下:

验证成功的页面



c、验证失败页面 fail.jsp

在login.jsp相同的目录中新建fail.jsp,内容如下:

验证失败的页面



d、代表输入表单的JavaBean LoginForm.java

在WEB-INF/classes/login目录下建立目录form,再在form目录下建立名为LoginForm.java的文件,内容如下:

package login.form;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class LoginForm extends ActionForm
{
private String userName;
private String password;

public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if(userName==null||userName.length()<1)
errors.add("userName",new ActionMessage("login.jsp.no.name.error"));
if(password==null||password.length()<1)
errors.add("password",new ActionMessage("login.jsp.no.password.error"));

return errors;
}

public void reset(ActionMapping mapping,HttpServletRequest request)
{
userName=null;
password=null;
}

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

public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password=password;
}



}





手工编译这个文件有点麻烦,需要指定classpath,当然如果你成功将Servlet和Struts加入系统环境变量中可以省去classpath。

假设TOMCAT的主目录是e:\tomcat,LoginForm.java位于e:\struts\WEB-INF\classes\login\form下,打开windows的命令行模式,键入:javac -classpath e:\tomcat\lib\servlet-api.jar;e:\struts\WEB-INF\lib\struts-core-1.3.8.jar e:\struts\WEB-INF\classes\login\form\LoginForm.java 然后回车,如无意外编译完成后form目录中会增加一个LoginForm.class文件。



3、控制器

在WEB-INF/classes/login目录下建立目录action,再在action目录下建立名为LoginAction.java的文件,内容如下:

package login.action;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import login.form.LoginForm;
import login.model.AccountBean;


public class LoginAction extends Action
{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
{
LoginForm loginForm = (LoginForm)form;

AccountBean ab=new AccountBean();
String userName=(String)loginForm.getUserName();
String password=(String)loginForm.getPassword();
ab.setUserName(userName);
ab.setPassword(password);

if(userName.equals("admin")&&password.equals("admin"))
return mapping.findForward("success");
else
return mapping.findForward("fail");
}
}





假设路径信息如上例,打开windows的命令行模式,键入:javac -classpath e:\tomcat\lib\servlet-api.jar;e:\struts\WEB-INF\lib\struts-core-1.3.8.jar;e:\struts\WEB-INF\classes e:\struts\WEB-INF\classes\login\action\LoginAction.java 然后回车



4、消息资源文件

在WEB-INF/classes/login下建立一个名为ApplicationResources.properties的文件,内容如下:

login.jsp.error.no.name = no name
login.jsp.error.no.password = no password
login.jsp.error.wrong.account = wrong account input

login.jsp.title = struts test
login.jsp.username = UserName:
login.jsp.password = Password:




三、运行这个最简单的Struts例子

在WEB-INF目录下新建一个名为web.xml文件(如果存在则修改),内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>www.badboy.net.cn</display-name>
<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>


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

</web-app>






再在WEB-INF目录下新建一个名为struts-config.xml的文件(如果存在则修改),内容如下:

[quote]<?xml version="1.0" encoding="ISO-8859-1" ?>


<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>




<form-beans>

<form-bean name="loginForm" type="login.form.LoginForm"/>


</form-beans>



<global-exceptions />




<global-forwards />



<action-mappings>

<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="login.action.LoginAction" >

<forward name="success" path="/welcome.jsp" />
<forward name="fail" path="/fail.jsp" />

</action>



</action-mappings>



<message-resources parameter="login.ApplicationResources" />


</struts-config>[/quote]








一切都准备好了,现在重启你的TOMCAT,输入相应的路径访问 /login.jsp .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值