照着书《STRUTS 开发入门与项目实践》的光盘里的Chapter2的S01_Begin 做了一下,其实是copy, debug。界面是可以跳转了,但还是有问题,日志还是写不了的。现在分析一下代码:
login.jsp:
<%@ page contentType="text/html;charset=GBK" language="java" %>
<body vLink="#006666" link="#003366" bgColor="#E0F0F8">
<img height="33" src="enter.gif" width="148">
<form action="login.do" method="post">
用户名: <input size="15" name="name"><p>
密码: <input type="password" size="15" name="psw"><p>
<input type="submit" value="登录">
</form>
其中红色部分会根据struts-config.xml里面的配置内容来调用相应的Action。
<form-beans>
<form-bean name="formBean1" type="classmate.UserForm"/>
</form-beans>
<global-exceptions />
<global-forwards>
<forward name="failed" path="/error.jsp"/>
<forward name="successed" path="/right.jsp"/>
</global-forwards>
<action-mappings>
<action path="/login" type="classmate.LoginAction" name="formBean1" scope="request" />
<action path="/regist" forward="/regist.jsp"/>
</action-mappings>
其中:type="classmate.LoginAction" name="formBean1" 再根据蓝色部分来找到相应的ActionForm(这里是UserForm)。 ActionForm就是从表单里提取信息。
有个问题就是:若表单是下面的形式,从浏览器里怎么看不到上边的<html:text../> & <html:submit>,真是奇怪,刚开始看,现在对这些STRUTS和HTML标签也不了解。下面的对话from: http://www.mysdn.cn/Java/Webkaifa/20061102/58854.html
问题解决:要在这个JSP文件头加上:<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
structs中是不是表单必须用<html:form>??
如果你用的普通form ,form里面的表单元素却用struts 标签的话,是会报错的,除非都改为html标签,不过你用struts form 里面是可以用html表单元素的
<p><html:form action="/register.do">
用户名:<html:text property="username"/><br/>
密码1: <html:text property="password1"/><br/>
密码2:<html:text property="password2"/><br/>
<html:submit value="Register"/>
</html:form></b>
<form action="/register.do">
<input type="text" name="username" value="" /><br/>
<input type="text" name="password1" value="" /><br/>
<input type="text" name="password2" value="" /><br/>
<input type="submit" value="ok" />
</form>
//
点第一个按钮,没问题,但是第二个按钮提示:
type Status report
message /register.do
description The requested resource (/register.do) is not available.
Form的action,如果用struts标签的话"/"表示当前web应用的根目录,如果用html标记的话"/"表示localhost的根目录。第二种把/register.do改成register.do试试。