<!--[if !supportLists]-->l <!--[endif]-->Struts框架简介<?xml:namespace prefix = o />
框架:就是对需要重复开发的代码进行封装,可以提高开发的效率,设置开发的规范
在使用 Struts 之前的开发 JSP àServletàDAOàServletàJSP
JSP中要显示传递数据时需要使用<%getAttribute()%> 而且需要穿插HTML 代码 Servlet中接收参数和跳转历经的配置 都会给维护带来问题
Struts可以对上述内容进行处理
Struts是 MVC设计模式的具体实现
Struts是Apach组织的开源框架. JSF是Sun官方推出的
<!--[if !supportLists]-->l <!--[endif]-->Struts框架开发
使用Struts完成登陆程序
<!--[if !supportLists]-->1. <!--[endif]-->建立一个Web项目
<!--[if !supportLists]-->2. <!--[endif]-->在MyEclipse中为项目添加Struts支持(项目—>鼠标右键àMyEclipseàAdd Struts capabilites)

3.
->Struts confi path:Struts核心配置文件路径, 所有关于Struts的配置都保存在该文件中
->ActionServlet name:可以自定义
->ActionServlet 的作用:为了使提交的路径可以跳转到Struts编写的类中 需要通过一个Servlet来统一管理跳转的路径,这里当提交的路径包含.do 的时候表示该提交会提交到Struts 中
4.项目在加入了Struts支持后
(1).多了一个资源文件ApplicationResources.properties
Jar包
(2).项目中加入了 Struts1.2Libraries 即加入了多个Struts支持所需的jar包
WEB-INF下
(2).WEB-INF下加入了Struts核心配置文件 struts-config.xml
(3).WEB-INF下加入了*.tld即标签文件的支持 bean,html,logic,nested,titles
(4).WEN-INF下加入了动态验证规则文件validator-rules.xml
(5).WEB-INF下的 Web.xml中新加入了一个ActionServlet的配置
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<!-- struts-config.xml文件名称可以根据需求更改-->
<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>
<!--启动时0秒加载 启动时servlet便初始化 即启动时struts便可以使用-->
<load-on-startup>0</load-on-startup>
</servlet>
<!--通过提交到*.do而找到此servlet 从而找到核心配置文件struts-config.xml-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<!--*.do可以根据需要修改 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>


<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<!-- struts-config.xml文件名称可以根据需求更改-->
<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>
<!--启动时0秒加载 启动时servlet便初始化 即启动时struts便可以使用-->
<load-on-startup>0</load-on-startup>
</servlet>
<!--通过提交到*.do而找到此servlet 从而找到核心配置文件struts-config.xml-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<!--*.do可以根据需要修改 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
5.建立一个JSP页面

建立好的JSP与不使用struts的JSP有以下区别
<%@ page language="java" pageEncoding="GB18030"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
(1).这里没有导入java.util.*包 表示使用struts后可以在页面上不需要导入java.util.*就可以显示列表内容
(2).<%@ taglib uri="" prefix="" %>添加标签语法
Uri为标签的唯一标识 prefix 表示该标签使用时的前缀可以修改 <bean:xxx></bean>
如果使用struts2.0开发可以按此格式添加标签
6.编写登陆页面
<html:html>
<head>
<title>login.jsp</title>
</head>
<body>
<center>
<!--显示全部错误信息: <font color="red"><html:errors /></font> -->
<font color="red"><html:errors property="loginErrors" /></font>
<html:form action="login.do" method="post">
<table border="0">
<tr>
<td>Username:</td>
<td><html:text property="username"/></td>
<td><font color="red"><html:errors property="unameErrors"/></font></td>
</tr>
<tr>
<td>Password:</td>
<td><html:password property="password" /></td>
<td><font color="red"><html:errors property="passwordErrors"/></font></td>
</tr>
<tr>
<td></td>
<td align="left">
<html:submit value="提交"/>
<html:reset value="重置"/>
</td>
</tr>
</table>
</html:form>
</center>
</body>
</html:html>
<head>
<title>login.jsp</title>
</head>
<body>
<center>
<!--显示全部错误信息: <font color="red"><html:errors /></font> -->
<font color="red"><html:errors property="loginErrors" /></font>
<html:form action="login.do" method="post">
<table border="0">
<tr>
<td>Username:</td>
<td><html:text property="username"/></td>
<td><font color="red"><html:errors property="unameErrors"/></font></td>
</tr>
<tr>
<td>Password:</td>
<td><html:password property="password" /></td>
<td><font color="red"><html:errors property="passwordErrors"/></font></td>
</tr>
<tr>
<td></td>
<td align="left">
<html:submit value="提交"/>
<html:reset value="重置"/>
</td>
</tr>
</table>
</html:form>
</center>
</body>
</html:html>
7.在开发完成页面后 要创建替代servlet功能的Struts的Action和ActionForm
New ->Other ->MyEclipse ->Struts1.2 ->Strurs1.2 Form Action&JSP
Struts1.2 ->Strurs1.2 Form Action&JSP完成Servlet的功能
Form:接收参数与验证 完成Servlet前半部分内容
Action:调用参数操作并进行跳转完成Servlet后半部分内容


(1).配置ActionForm 用来代替Servlet接收参数和验证的功能(FormBean)
此处的Use case必须与提交页面的action路径的名称的 *.do 的 *一样
然后add提交页面中的属性 属性必须与页面中提交的页面元素的名称一致
8.可以看到在struts-config中配置好了Action和 ActionForm 且在项目中建立好了action 和 form 的包类
由于要先接受参数 因此先完成ActionForm 中的处理
<!--[if !supportLists]-->1 <!--[endif]-->配置ActionForm. ActionForm 是用来替代Servlet中接收参数和验证的功能 Use case 这里必须填写之前表单提交的路径的名称,
注意去掉 .do 还可以通过ADD按钮添加提交的属性,注意属性名称必须与页面上提交的页面元素名称一致.
<!--[if !supportLists]-->2 <!--[endif]-->配置Action. Action是用来处理 Servlet中其他的功能的 比如: 调用DAO 处理业务逻辑或进行跳转
可以看到在Struts-config.xml中已经配置好了 Action和ActionForm 且在项目中已经建立好了 Action和
ActionForm 的包.类
由于需要先接受参数,所以先完成ActionForm中的处理
private String password;
private String username;
//一般用来验证非空和数据格式
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
//建立一个ActionErrors对象 该对象用来保存所有出现的错误 ActionErrors是一个集合类
ActionErrors aErrors = new ActionErrors();
//验证非空 trim()方法用于去除首尾的空格 只是首尾的空格
if(this.username == null || this.username.trim().equals("")) {
//加入错误信息
aErrors.add("unameErrors", new ActionMessage("username.null"));
}
//判断密码
if(this.password == null || this.password.trim().equals("")) {
//加入错误信息
aErrors.add("passwordErrors", new ActionMessage("password.null"));
}
return aErrors;
}
private String username;
//一般用来验证非空和数据格式
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
//建立一个ActionErrors对象 该对象用来保存所有出现的错误 ActionErrors是一个集合类
ActionErrors aErrors = new ActionErrors();
//验证非空 trim()方法用于去除首尾的空格 只是首尾的空格
if(this.username == null || this.username.trim().equals("")) {
//加入错误信息
aErrors.add("unameErrors", new ActionMessage("username.null"));
}
//判断密码
if(this.password == null || this.password.trim().equals("")) {
//加入错误信息
aErrors.add("passwordErrors", new ActionMessage("password.null"));
}
return aErrors;
}
(1.2) 由于错误信息必须在资源文件中进行保存 因此 需要在资源文件中加入错误信息的配置
在jdk安装目录中的bin中找到native2ascii.exe 在其中输入中文 即可转化为需要的编码
username.null=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a!<br>
password.null=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01<br>
login.error=\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef\uff01
password.null=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01<br>
login.error=\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef\uff01
(1.3) 测试后 发现可以完成验证功能 但无法显示错误信息可以修改login.jsp 在其中加入错误信息
<!--显示全部错误信息: <font color="red"><html:errors /></font> -->
显示指定的错误信息<font color="red"><html:errors property="loginErrors" /></font>
(2.1) 编写 Action 完成用户名和密码的验证
public class LoginAction extends Action {
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
//可以直接调用form中的getter方法获取提交的参数
LoginForm loginForm = (LoginForm) form;
if(loginForm.getUsername().equals("cgz")&&loginForm.getPassword().equals("5982285")) {
//登陆成功 将用户名保存在session中
request.getSession().setAttribute("username", loginForm.getUsername());
//跳转 在Action中 跳转是通过返回值来处理的
//return new ActionForward("/success.jsp");
return mapping.findForward("success");
}else {
//登录失败 返回登陆页面 同时显示错误信息 Input Source里面设置的内容
//注意是ActionMessages而不是ActionMessage
ActionMessages aMessages = new ActionMessages();
aMessages.add("loginErrors", new ActionMessage("login.error"));
//this.addErrors()不是this.addMessages()
this.addErrors(request, aMessages);
return mapping.getInputForward();
}
}
}
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
//可以直接调用form中的getter方法获取提交的参数
LoginForm loginForm = (LoginForm) form;
if(loginForm.getUsername().equals("cgz")&&loginForm.getPassword().equals("5982285")) {
//登陆成功 将用户名保存在session中
request.getSession().setAttribute("username", loginForm.getUsername());
//跳转 在Action中 跳转是通过返回值来处理的
//return new ActionForward("/success.jsp");
return mapping.findForward("success");
}else {
//登录失败 返回登陆页面 同时显示错误信息 Input Source里面设置的内容
//注意是ActionMessages而不是ActionMessage
ActionMessages aMessages = new ActionMessages();
aMessages.add("loginErrors", new ActionMessage("login.error"));
//this.addErrors()不是this.addMessages()
this.addErrors(request, aMessages);
return mapping.getInputForward();
}
}
}
(2.2) 返回登陆页面 显示错误信息
<html:html>
<head>
<title>login.jsp</title>
</head>
<body>
<center>
<!--显示全部错误信息: <font color="red"><html:errors /></font> -->
<font color="red"><html:errors property="loginErrors" /></font>
<html:form action="login.do" method="post">
<table border="0">
<tr>
<td>Username:</td>
<td><html:text property="username"/></td>
<td><font color="red"><html:errors property="unameErrors"/></font></td>
</tr>
<tr>
<td>Password:</td>
<td><html:password property="password" /></td>
<td><font color="red"><html:errors property="passwordErrors"/></font></td>
</tr>
<tr>
<td></td>
<td align="left">
<html:submit value="提交"/>
<html:reset value="重置"/>
</td>
</tr>
</table>
</html:form>
</center>
</body>
</html:html>
<head>
<title>login.jsp</title>
</head>
<body>
<center>
<!--显示全部错误信息: <font color="red"><html:errors /></font> -->
<font color="red"><html:errors property="loginErrors" /></font>
<html:form action="login.do" method="post">
<table border="0">
<tr>
<td>Username:</td>
<td><html:text property="username"/></td>
<td><font color="red"><html:errors property="unameErrors"/></font></td>
</tr>
<tr>
<td>Password:</td>
<td><html:password property="password" /></td>
<td><font color="red"><html:errors property="passwordErrors"/></font></td>
</tr>
<tr>
<td></td>
<td align="left">
<html:submit value="提交"/>
<html:reset value="重置"/>
</td>
</tr>
</table>
</html:form>
</center>
</body>
</html:html>
转载于:https://blog.51cto.com/subwarhead/198218