Structs(一)

1.首先在Project里右键Myeclipse,选择add structs capabilities.

Structs-config.xml核心配置文件,名字可以改动。

之后在src下多了一个类包,里面有一个资源文件。多了structs和依赖包,多了标签和xml配置文件。

//PS:(个人理解:action可以改,而且随着配制的改变,xml里面也会相应的改动,当jsp提交到.do文件时,会找到action这个servlet,然后再去找form..java和action.java)。

注意在web.xml里面的变化

<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>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

2.新建一个jsp

Taglib标签:

url是唯一标识符,在导入标签里面有一个structs-bean.tld里面有一句话

<uri>http://struts.apache.org/tags-bean</uri>是对应的。

后面prefix是你应用标签时需要写的关键字。

3.开发完页面之后,不需要创建servlet,需要创建一个代替他的东西。

在你src新添加的类包中,点击new-other下面的myeclipse->web-Structs->1.2->structs1.2 form,action &jsp.

Form是管前半部分的,用于接收参数,而action是管后半部分的用于验证,跳转等功能。

配置Form

其中NAME那个选项:

Jsp里面提交到login.do,这里就把do前面那个填进去。

配置Action

注意:最后Input Source是输入页面。

发现在类包中多了Form和Action包。

4.先进入到form包中。

在LoginForm.java中多了一个方法

public ActionErrors validate(ActionMapping mapping,

HttpServletRequest request) {

ActionErrors errors=new ActionErrors();

if(this.username==null||this.username.trim().equals(""))

{

errors.add("username", new ActionMessage("username.null"));

}

if(this.password==null||this.password.trim().equals(""))

{

errors.add("password" , new ActionMessage("password.null"));

}

return errors;

}//用来完成验证信息,一般用来验证非空和数据格式。

5.src下新生成的ApplicationResources.properties这个文件下配置错误信息。

username.null=/u7528/u6237/u540d/u4e0d/u80fd/u4e3a/u7a7a/uff01

password.null=/u5bc6/u7801/u4e0d/u80fd/u4e3a/u7a7a/uff01

(第一个编码为:用户名不能为空!,第二个为:密码不能为空!因为不识别汉字,所以需要编码,编码转换过程如下1,先将所需转换文字复制,然后找到你的Java/jdk1.6.0_10/bin目录,然后找到native2ascii这个文件,2,打开3,粘贴,回车即得编码)

6.login.jsp这个页面里的表单中加入错误提示信息。

<table border="0">

<tr>

<td>用户名:</td>

<td><html:text property="username" /></td>

  <td><html:errors property="username"/></td>

</tr>

<tr>

<td>密码:</td>

<td><html:password property="password" /></td>

          <td><html:errors property="password"/></td>

</tr>

<tr>

<td colspan="2" align="center"><html:submit value="提交" /></td>

</tr>

</table>

7.再进入到action包中,在LogonAction.java中修改execute方法。

 

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

LoginForm loginForm = (LoginForm) form;       if(loginForm.getUsername().equals("robin")&&loginForm.getPassword().equals("123"))

{

request.getSession().setAttribute("uname", loginForm.getUsername());

//跳转是通过返回值跳转。

return mapping.findForward("suc");

}

else {

ActionErrors errors=new ActionErrors();

errors.add("loginerror", new ActionMessage("login.error"));

this.addErrors(request, errors);

return mapping.getInputForward();

}

}

 

8.ApplicationResources.properties文件下加入错误信息

login.error=/u7528/u6237/u540d/u6216/u8005/u5bc6/u7801/u9519/u8bef/uff01

9.新建跳转页suc.jsp

<%@page import="java.util.*" %>

<%@ page contentType="text/html;charset=GBK"%>

<html>

<head>

<title>success</title>

</head>

<body>

${uname } 登陆成功!

</body>

</html>

10.配置跳转路径,在struts-config.xml中加入路径配置

<action-mappings >

<action

attribute="loginForm"

input="/jsp/login.jsp"

name="loginForm"

path="/login"

scope="request"

type="com.proper.struts.action.LoginAction">

<set-property property="cancellable" value="true" />

   <forward name="suc" path="/jsp/suc.jsp"/>   

</action>

</action-mappings>

11Login.jsp页面中加入显示错误信息

<body>

<center>

    <font color="red"><html:errors property="loginerror"/></font>

<html:form action="login.do">

<table border="0">

<tr>

<td>用户名:</td>

<td><html:text property="username" /></td>

<td><html:errors property="username"/></td>

</tr>

。。。

显示页面如下:

-----------------------------------工作原理与核心配置

在使用Jsp/Servlet时的原理为

Jsp跳到web.xml中的servlet和servlet-mapping,找到对应的servlet类来接收参数,验证,调用dao等操作。再跳转到其他页面。

使用structs时的原理为

Jsp->web.xml(通过url-pattern: *.do)-> ActionServlet->structs.cfg.xml

(根据path路径找到对应的actionForm和action)->首先是ActionFrom->validate发放验证(正确跳到action,否则跳回input错误页)->action->调用DAO进行逻辑判断->成功时跳转某个页(structs.cfg.xml:forward),失败时返回某个错误页面(input).

Structs.cfg.xml中的配置组成

<form-beans >

<form-bean name="loginForm" type="com.proper.struts.form.LoginForm" />

</form-beans>

这个配置的是ActionForm

Form-beans包含了多个form-bean

Form-bean包含两个属性。一个name为bean的唯一标识,type为包.类名。

<action-mappings >

<action

attribute="loginForm"

input="/jsp/login.jsp"

name="loginForm"

path="/login"

scope="request"

type="com.proper.struts.action.LoginAction">

<set-property property="cancellable" value="true" />

<forward name="suc" path="/jsp/suc.jsp"/>

</action>

</action-mappings>

这个是针对Action的配置

Action-mappings中包含多个action

Action所包含的属性:

Name,attribute:表示该action所对应的actionform属性。

一个action只能对应一个form,一个form能对应多个action。

Input:用来作为错误页的,当validate方法有错误时,则跳到这个页面。

所有的Structs.cfg.xml下配制的路径前面必须加“/”表示在WebRoot路径下的。

Path:表示action的虚拟路径,而且不需要加.do的后缀

scope="request":表示action所保存的属性范围,request表示每次请求建立新的action.

Type:表示action的包,类名。

在action中可以包含多个不同的forward路径。

<forward name="suc" path="/jsp/suc.jsp"/>

<message-resources parameter="com.proper.struts.ApplicationResources" />表示资源文件的配置。

转载于:https://www.cnblogs.com/lowerCaseK/archive/2013/04/23/struts.html

Struts详细用法相关推荐

  1. Android命令行工具logcat详细用法!

    logcat是Android中一个命令行工具,可以用于得到程序的log信息. 见板凳详细说明!      本贴内容来自网络,引用网址为:http://hi.baidu.com/%C9%C1%D2%AB ...

  2. __declspec关键字详细用法

    __declspec关键字详细用法 2009-01-21 16:23 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与ext ...

  3. mysql left/right join算法效率分析_mysql left join,right join,inner join超详细用法分析

    MySQL left join,right join,inner join超详细用法分析 下面是例子分析 表A记录如下: aID        aNum 1           a20050111 2 ...

  4. python sort怎么用,Linux Sort命令详细用法(有实例)

    Linux Sort命令详细用法(有实例) sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! Linux sort命令进阶: 1 sort的工作原理 so ...

  5. vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn

    vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn 原创ChrisWang_ 最后发布于2019-05-24 10:25:58 阅读数 1332  收藏 展开 vue性 ...

  6. oracle rtrim(),Oracle ltrim() rtrim() 函数详细用法

    嘿嘿,今天在论坛里看了一篇帖子,讨论ltrim() 函数的详细用法,下面我借几个高手的回答总结一下: 先看几个实例: SQL> select ltrim('109224323','109') f ...

  7. pythonrange函数用法_python range()函数详细用法

    python range()函数详细用法 函数原型:range(start, end, scan): 参数含义:start:计数从start开始.默认是从0开始.例如range(5)等价于range( ...

  8. python中3 and not 5_python中not、and和or的优先级与详细用法介绍

    前言 (小白专用)本次所分享的是Python中的not.and.or的执行时的优先级,以及他们的具体用法.本文比较详细,不喜勿喷. 一.not.and.or的含义以及优先级 对象 返回结果 优先顺序 ...

  9. Word查找替换详细用法及通配符一览表

    转载自:https://www.cnblogs.com/whchensir/p/5768030.html Word查找替换详细用法及通配符一览表 使用通配符 要查找"?"或者&qu ...

最新文章

  1. oracle XE解决端口占用等问题
  2. dataTables中文文档API和样例
  3. KafkaManager中Group下不显示对应Topic的解决方案
  4. vue2.0中文网站2.0
  5. 云计算之路-阿里云上:2013年4月7日14:15~18:35服务器故障经过
  6. Drupal8 社区文档之在Drupal中,查看网页的编辑一个页面的几乎是相同的
  7. 使用shell脚本对Linux系统和进程资源进行监控
  8. Gym 100090D Insomnia
  9. BoW(词袋Bag of words)
  10. win10 Python开发环境搭建 PyCharm IDE安装
  11. GPUImage实现水印
  12. allego如何输出pdf_[LaTeX 尝试] 利用 PDF 附件和终端输出,从 Overleaf 里获得更多信息...
  13. 7-8 mmh学长的Excel表格 (20分)
  14. 示波器的使用和二极管充放电过程
  15. 使用同源建模预测蛋白质结构
  16. python 0xa什么意思_python 专业术语有哪些?不用找了,术语大全都在这了
  17. Excel数值、文本相互转换
  18. 如何创新地解决光缆运维痛点?
  19. 教您正确理解时钟器件的抖动性能
  20. Win32:一个全新的、被忽视的桌面互联网内容平台

热门文章

  1. 业界丨几张图带你看懂人工智能产业
  2. pycharm如何设置快捷键
  3. 物联网通信协议全解析
  4. 研究揭示大脑在工作记忆中存储信息的神经机制
  5. 《日本制造业白皮书2018》深度解读:非连续创新、现场力、互联工业
  6. 专家观点 | 李德仁:基于云计算的智慧城市运营脑
  7. “头移植模型”论文称换头术可行 业内疑两大问题未解
  8. 果蝇大脑研究能够改进计算机相似性搜索算法
  9. 22 岁专访库克、B 站 3 天涨粉百万,他将毕设树莓派扫描仪升级,繁星散落在校空!...
  10. 程序员弃码投中医?还做成了不错的生意! | 极客视频