shukuiyan 发表于 2013-2-6 09:29:42

一个struts工程的创建过程及运行原理(续)

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>

    <span style="">font-size: 1
页: [1]
查看完整版本: 一个struts工程的创建过程及运行原理(续)