分类: Java
2008-05-07 07:30:04
在项目中我们不止一次接触到这样的场景。
用户进入系统首页,如果用户没有登录,提示用户可以登录或者注册。如果用户已经登录,打印欢迎词,提供登出系统功能......
我们将一起完成以下几步。
开始之前,请安装以下软件。
NetBeans 5.5 +Enterprise Pack(建议下载Sun Java EE SDK 5 tools bundle) |
|
Sun JDK 6.0 update 1 |
|
MySQL 5.0.x+MySQL JDBC Driver 5.0.x |
|
NetBeans内置了对Struts的支持,下面我们使用NetBeans来创建一个Struts项目。
1.启动NetBeans 5.5,准备创建一个Web项目。
2.从NetBeans 主菜单中选择File->New Project。
3.在New Project对话框中,从Categories列表中选择Web,从Project列表中选择Web Application,点击Next,进入下一步。
4.在Project Name输入项目名称MyApp,点击Next,进入下一步。
5.从Frameworks中选择Struts 1.2.9支持,在Application Resource一栏中输入messages,选中Add Struts TLDS,这样会在web.xml中添加Struts最基本的taglib支持,点击Finished。
现在我们已经创建一个Struts项目,接下来一起创建所需的jsp页面文件和java文件。
1.从Projects窗口,展开MyApp项目。右键点击Web Pages,选择New->JSP。
2.在New JSP File窗口中的JSP File Name一栏输入文件名称login。点击Finish完成新建login.jsp文件。
3.在打开的login.jsp文件开关添加taglib引用。
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
登录页面要求输入username,password两个字段,把文件body标签之间的部分修改成如下:
Login Page
:
:
1.从IDE主菜单选择File->New File。
2.在弹出的New File对话框中,从Categories列表中选择Web,从File Types列表中选择Struts ActionForm Bean,点击Next,进入下一步。
3.在New Struts ActionForm Bean窗口中,在Class Name中输入LoginForm,Package一栏输入com.myapp.web,点击Finish。
4.清除打开的LoginForm的文件内容。
public class LoginForm extends org.apache.struts.action.ActionForm {}
5.输入两种属性username,password,属性名称要login.jsp文件中定义一致。
下面利用IDE的重构功能,生成getter和setter方法。
public class LoginForm extends org.apache.struts.action.ActionForm {
String username,password;
}
在类中间空白区域点击右键,从弹出菜单中选择Refactor->Encapsulate Fields。在弹出的Refactor窗口,保留默认,直接点击Next,预览重构效果。
在重构窗口中,点击Do Refactoring完成重构。
我们可以看到,IDE已经自动在username,password字段上添加了private关键字。
public class LoginForm extends org.apache.struts.action.ActionForm {
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;
}
}
展开Configuration Files,打开Struts配置文件struts-config.xml,可以看到,IDE已经自动注册了一个名为LoginForm的ActionForm。
1.从IDE主菜单中选择File->New File。
2.从New File对话框的左边Categories列表中选择Web,从右边File Types列表中选择Struts Action,点击Next,进入下一步。
3.在New Struts Action 对话框中,Class Name一栏中输入类名LoginAction,Package直接从下拉列表中选择com.myapp.web,Paht一栏中输入/login,点击Next。
4.接下来,Input Source中选择/login.jsp,Scope选择Request,点击Finish。
5.在execute方法中添加以下内容。
LoginForm loginForm=(LoginForm)form;
String username=loginForm.getUsername();
String password=loginForm.getPassword();
System.out.println("user loginned as #"+username+"->"+password);
request.getSession().setAttribute("username",username);
request.setAttribute("username",username);
return mapping.findForward(SUCCESS);
这里主要演示一下请求过程,暂时我们不考虑代码的逻辑实现,这些到后面会逐步完善。
6.修改Struts定义文件struts-config.xml中Path为/login的Action,添加一个forward定义,指向成功页面/index.jsp。
7.修改index.jsp内容,添加用户登录检测,如果用户没有登录跳转到登录页面(login.jsp),已经登录用户,提供一个登出链接(/logout)。
这个过程与Login类似,只不过这里不需要使用ActionForm了。
1.从IDE主菜单中选择File->New File。
2.从Categories中选择Web,从File Types中选择Struts Action。
3.接下来Class Name中输入LogoutAction,Package中选择com.myapp.web,Path中输入/logout,点击Next,进入下一步。
4.登出功能不需要使用ActionForm,去掉Use ActionForm Bean,直接点击Finish完成。
5.将execute方法内容修改成如下。
request.getSession().invalidate();
return mapping.findForward(SUCCESS);
6.修改Struts配置文件内容中名为/logout的Action定义。
现在可以体验一下运行效果了。
1.右键点击项目结点,从菜单中选择Run Project。
2.服务器启动后,会自动打开浏览器主页。
2.点击login now链接,进入登录页面。
3.输入test/test进行测试,从服务器控制台中可以看到在LoginAction中打印的信息。
现在我们回顾一下Struts项目创建过程。
使用NetBeans时创建Struts项目时,IDE自动完成了Struts的配置。
打开Projects窗口,选择刚刚创建的MyApp项目,点击Configuration Files,打开web.xml文件,可以看到以下Struts配置。
org.apache.struts.action.ActionServlet
(1)首先定义一个名为action的Servlet,所有符合.do结尾的URL都由ActionServlet进行处理。
(2)action初始化参数config指定了Struts配置文件。
IDE还为你生成初始的Struts配置文件struts-config.xml文件等,并将Struts所要用的lib加入了项目。
对于一个带有输入表单的请求,需要创建输入面页面,如本例中login.jsp,相应的ActionForm类,如本例中的LoginForm,及处理请求的Action类,如本例中的LoginAction。