16 在WebRoot下新建success.jsp文件,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>成功!</title> </head> <body> <% String username=(String)request.getAttribute("username"); String password=(String)request.getAttribute("password"); %> welcome :<br> your name is<%=username %> <br> your password is :<%=password %> </body> </html> |
17 至此,该编写的内容就编写完了,系统还有自动生成几个重要的配置文件,struts-config.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources /> <form-beans > <form-bean name="loginForm" type="yan.struts.form.LoginForm" /> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings > <action attribute="loginForm" input="/form/login.jsp" name="loginForm" path="/login" scope="request" type="yan.struts.action.LoginAction"> <set-property property="cancellable" value="true" /> <forward name="login-success" path="/success.jsp" /> </action> </action-mappings> <message-resources parameter="yan.struts.ApplicationResources" /> </struts-config> |
以上代码对该应用的loginForm、LoginAction和消息资源文件进行了配置,首先通过<form-bean>元素配置了一个ActionForm,名叫loginForm,它对应的类为
yan.struts.form.LoginForm, 接着通过<action>元素配置了一个Action组件,其中:
path属性:指定请求访问Action的路径;
type属性:指定Action的完整类名;
name属性:指定需要传递给Action的ActionForm,该ActionForm在上面的<form-bean>已经定义过;
scope属性:指定ActionForm的存放范围;
validate属性:指定是否执行表单验证;
input属性:指定当表单验证失败时的转发路径;
<action>元素还包含一个<forward>子元素,它定义了一个请求转发路径。
上面的配置文件配置了LoginAction组件,对应的类为yan.struts.action.LoginAction,请求
访问路径是/login。
ApplicationResources.propertirs内容如下:(该文档内容是由软件自动将中文转换为该表示形式,具体方面后面介绍)
login.error.username=\u8BF7\u8F93\u5165\u7528\u6237\u540D login.error.userpassword=\u8BF7\u8F93\u5165\u7528\u6237\u5BC6\u7801 login.error.badusername=\u7528\u6237\u540D\u4E0D\u80FD\u4E3Aadmin login.error.badpassword=\u5BC6\u7801\u4E0D\u80FD\u662F123456 login.hello=\u6B22\u8FCE\u3002\u3002\u3002 |
该文档是消息资源文件,,这些文本来自于Resource Bundle,每个Resource Bundle都对应一个或多个本地化的消息资源文件。以上文件以“消息key/消息文本”的格式存放在数据库,文件中“#”后面的为注释行,在JSP文件中可以用以下语句来调用这里面的信息:
<bean:message key=”login.error.username”/>这句话就把该key相应的值输出到页面上了。在Java中使用errors.add("username",new ActionMessage("login.
error.username"));这句话,就把login.error.username对应的值显示在
<html:errors property="username"/>处。
Web.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <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> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>form/logon.jsp</welcome-file> </welcome-file-list> </web-app> |
18 然后部署到Tomcat服务器上就可以运行了。
输入网址:http://localhost:8080/z-myfirststruts/,能显示如下界面。
输入正确的用户名和密码,就可以跳转到success的登录成功的界面,如果用户名和密码有错误,则提示错误。错误包括:用户名和密码都不能为空,而且用户名不能为admin,密码不能为123456。
工作流程:
1 服务器装载login.jsp的流程:
在Tomcat服务器上成功发布了login应用后,访问 http://localhost:8080/z-myfirststruts/form
/login.jsp,就会看到如上的页面。服务器装载login.jsp网页的流程如下
(1)<bean:message>标签从Resource Bundle中读取文本,把它输出到网页上。
(2)<html:form>标签在request范围中查找LoginForm,如果存在这样的实例,就把LoginForm对象中的username属性值赋值给HTML表单的username文本框。由于此时还不存在LoginForm对象,所有忽略这项操作。
(3)把login.jsp的视图呈现给客户。
2 表单验证的流程
在login.jsp网页上,不输入姓名,直接单击submit按钮,会提示“请输入用户名”的信息。
当用户提交LoginForm表单时,请求路径为/login.do,服务器执行表单验证流程如下:
(1)Servlet容器在web.xml文件中寻找<url-pattern>属性为”*.do”的<servlet-mapping>元素:
<servlet-mapping>
<servlet-name>action</servlet-name>
font-size: 1