一个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>

以上代码对该应用的loginFormLoginAction和消息资源文件进行了配置,首先通过<form-bean>元素配置了一个ActionForm,名叫loginForm,它对应的类为

yan.struts.form.LoginForm 接着通过<action>元素配置了一个Action组件,其中:

path属性:指定请求访问Action的路径;

type属性:指定Action的完整类名;

name属性:指定需要传递给ActionActionForm,该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,服务器执行表单验证流程如下:

1Servlet容器在web.xml文件中寻找<url-pattern>属性为”*.do”<servlet-mapping>元素:

<servlet-mapping>

    <servlet-name>action</servlet-name>

    font-size: 1

你可能感兴趣的:(jsp,bean,xml,struts,servlet)