我的第一个Struts实例

Having spent a whole day to begin the study of Struts, I finally successfully to work out the first struts example in Ch2 of the book 《Struts与Hibernate使用教程》。I am so happy that I decide to record it in my blog.

My Develop Enviroment:Lomboz3.2+Eclipse3.2+Struts1.2.9。
1.new project:Struts, NOTICE to select "Struts project" in Configuration.-> Click Next -> Click Next -> choose Where sturct located in your hard disk.(D:/path/struts-1.2.9-bin/) -> finished.
Using this lomboz wizard to develop struts projects, lomboz copy files of struts-blank.war in folder path/struts-1.2.9-bin/webapps/ into the project for you such as all the needed .jar files in /lib. But it does not copy the .tld files into you project, so you have to copy it by hand.
2.In folder WEB-INF, new folder:tlds, and then copy the five .tld files of struts tags into tlds. The file files can be directly used in .jsp files like this: <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>. You need not declare them in web.xml. (It seems have to declare them in web.xml in previous version of web.xml) Of course, you have the rights not to copy them in the folder tlds in WEB-INF, then you have to use: <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> in .jsp files instead of: <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>.
3.In folder WebContent, new folder: login.
4.In folder login, new file: login.jsp, main.jsp, register,jsp.
their source is listed below:
------------------------------------------------
login.jsp
-------------------

<% @ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html"  %>
<% @ page contentType="text/html; charset=UTF-8"  %>
< html:html >
< head >
 
< title > Login page </ title >
</ head >
< body >
 
< html:form  action ="LoginAction"  method ="post" >
  Username: 
< html:text  property ="username"  size ="15"   />   < br />< br />
  Password: 
< html:password  property ="password"  size ="15"   />   < br />< br />
  
< html:submit  property ="submit"  value ="Login"   />
 
</ html:form >
</ body >
</ html:html >

------------------------------------------------
main.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" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=ISO-8859-1" >
< title > Success to login </ title >
</ head >
< body >
<% = session.getAttribute( " username " %> , You have login.
</ body >
</ html >

------------------------------------------------
register.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" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=ISO-8859-1" >
< title > Failed login </ title >
</ head >
< body >
<% = session.getAttribute( " username " %> , you failed to login.
</ body >
</ html >

------------------------------------------------
5.in folder /src, create LoginHanlder.java that is used to handler whether the user and password are legal. In order to simple this example, I decide not to use database and assume the username is "myname" and the related password is "mypassword".
Source file is listed below:
------------------------------------------------
LoginHandler.java
-----------------------

package  login;

import  java.util. * ;

public   class  LoginHandler  {
 
public LoginHandler()
 
{
 }


 
 
public boolean checkLogin(ArrayList al){

  String name 
= (String)al.get(0);
  String password 
= (String)al.get(1);
  
if(name.equals("myname"&& password.equals("mypassword")){
   
return true;
  }
 else {
   
return false;
  }

 }

}

------------------------------------------------
6. in folder src, create the ActionForm: LoginActionForm.java.
 New ->choose "other" -> choose "Lomboz-Struts.Struts Form Bean, Next -> Choose "Add New Action Form", Next -> Java Package="login"; Class name="LoginActionForm.java", Next -> Add two properties: username and password, Finish.
------------------------------------------------
LoginActionForm.java.
------------------------

package  login;

import  javax.servlet.http.HttpServletRequest;
import  org.apache.struts.action.ActionErrors;
import  org.apache.struts.action.ActionForm;
import  org.apache.struts.action.ActionMapping;

public   class  LoginActionForm  extends  ActionForm  {
 
 
private java.lang.String username;
 
private java.lang.String password;

 
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
  ActionErrors errors 
= new ActionErrors();
  
// Validate an attribute named "xxx"
  
//if( getXXX() == null || getXXX().length() == 0 )
  
// errors.add("xxx",new ActionMessage("errors.required","xxx"));
  return errors;
 }

  
 
public void reset(ActionMapping mapping, HttpServletRequest request) {
  
  
super.reset(mapping, request);
 }

  
 
 
public java.lang.String getUsername(){
  
return username;
 }


 
public void setUsername(java.lang.String username) {
  
this.username = username;
 }

 
 
public java.lang.String getPassword(){
  
return password;
 }


 
public void setPassword(java.lang.String password) {
  
this.password = password;
 }

 
}

------------------------------------------------
7. in folder src, create an Action: LoginAction.java.
 New ->choose "other" -> choose "Lomboz-Struts.Struts Action, Next -> Choose "Create a new action", Next -> Java Package="login"; Class name="LoginAction.java", Next -> Action Form: select "LoginActionForm"; scope: select "request"; Validate: false; Input: choose "/login/login.jsp", Finish.
Then change the exxcute() method.
Source file is listed below:
------------------------------------------------

LoginAction.java
----------------
package  login;

import  java.io.IOException;
import  java.util.ArrayList;

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

import  org.apache.struts.action.Action;
import  org.apache.struts.action.ActionForm;
import  org.apache.struts.action.ActionForward;
import  org.apache.struts.action.ActionMapping;

public   class  LoginAction  extends  Action  {

 
public ActionForward execute(ActionMapping mapping,
         ActionForm form, 
         HttpServletRequest request, 
         HttpServletResponse response)
         
throws IOException, ServletException {
  
  LoginActionForm loginForm 
= (LoginActionForm)form;
  String username 
= loginForm.getUsername();
  String password 
= loginForm.getPassword();
  
  HttpSession session 
= request.getSession(true);
  session.removeAttribute(
"username");
  session.setAttribute(
"username", username);
  
  ArrayList al 
= new ArrayList();
  al.add(username);
  al.add(password);
  
  String prompt;
  LoginHandler login 
= new LoginHandler();
  
if(login.checkLogin(al)){
   prompt 
= "Success";
  }
 else {
   prompt 
= "Fail";
  }

  
  
return mapping.findForward(prompt);
 }

 

}

------------------------------------------------
8. change the sturts-config.xml.
when the username and password are legal, we should lead the guest to main.jsp, and when thery are illegal, we ask them to register.
add

      < forward  name ="Success"  path ="/login/main.jsp"   />
     
< forward  name ="Fail"  path ="/login/register.jsp"   />

below

< action  input ="/login/login.jsp"  name ="loginActionForm"  path ="/loginAction"  scope ="request"  type ="login.loginAction"  validate ="false" >

OK, all are done. let's have a look at the result.
right click login.jsp and choose to Run on server.
The browser leads us to http://localhost:8080/Struts/login/login.do and tells us that:
------------------
type Status report

message Invalid path was requested

description The requested resource (Invalid path was requested) is not available.
--------------------
I was fooled by this for hours and could not sovle the problem. I do not know why it go to login.do. In a time, I changed the login.do to login.jsp and happy to find that it worked. so the whole address should be:http://localhost:8080/Struts/login/login.jsp. Fill you name and password in the form, you can see it works. 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值