一口一口吃掉Struts(三)——一个简单Struts实例 .
2014-03-24 16:08
549 查看
了解了Struts的基本流程,那么我们利用Struts来实现一个简单的登陆功能:
先用时序图来描述一下登录功能的处理流程:
核心操作:
1、配置struts
* 拷贝struts相关的jar到WEB-INF/lib下
* 在web.xml文件中配置ActionServlet
* 提供struts-config.xml文件,需要放到WEB-INF下
2、实现
*建立login.jsp/loginSuccess.jsp/loginFail.jsp
*建立了LoginAction.java/userActionForm.java
*将LoginAction/LoginActionForm/相关jsp配置到struts-config.xml文件中
代码:
配置文件
[html]
view plaincopyprint?
<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>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
JSP(View)
[html]
view plaincopyprint?
<form action="login.do" method="post">
<input type="text" name="name" />
<br />
<input type="password" name="password" />
<input type="submit" value="登录"/>
</form>
LoginSuccess.jsp
[html]
view plaincopyprint?
<body>
登录成功》》》》》》》》》》》》
</body>
LoginFail.jsp
[html]
view plaincopyprint?
<body>
登录失败》》》》》》》》》》》》
</body>
LoginAction
[java]
view plaincopyprint?
package com.jialin;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* 登录action
* @author jialin
*作用:取得表单数据,调用model层业务逻辑,返回转向信息
*/
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserActionForm userForm=(UserActionForm)form;
String userName=userForm.getName();
int password=userForm.getPassword(); //这里不用我们手动强转类型了。
UserManage userManage=new UserManage();//后面我们再改进
User user=new User();
user.setName(userName);
user.setPassword(password);
try {
userManage.ValidateUser(user);
return mapping.findForward("success");
} catch (UserNotFoundException e) {
e.printStackTrace();
request.setAttribute("message", e.getMessage());
}catch(PasswordErrorException e){
e.printStackTrace();
request.setAttribute("message", e.getMessage());
}
return mapping.findForward("fail"); }
}
struts-config.xml
[html]
view plaincopyprint?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<!-- set ActionForm info-->
<form-beans>
<form-bean name="userForm" type="com.jialin.UserActionForm" />
</form-beans>
<action-mappings>
<!-- Set path,action,actionform,scope,forward info -->
<action path="/login" type="com.jialin.LoginAction" name="userForm"
scope="request">
<forward name="success" path="/LoginSuccess.jsp" />
<forward name="fail" path="/LoginFail.jsp" />
</action>
</action-mappings>
</struts-config>
UserActionForm
[java]
view plaincopyprint?
package com.jialin;
import org.apache.struts.action.ActionForm;
/**
* 用户ActionForm ,负责收集表单数据
* @author jialin
*注:get和set后的字符串首字母变小写后,必须和表单中属性的名字一致
*/
public class UserActionForm extends ActionForm {
private String name;
private int password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
}
UserManage(Model)
[java]
view plaincopyprint?
package com.jialin;
/**
* MODEL层业务逻辑
* @author jialin
*判断用户是否合法
*/
public class UserManage {
public void ValidateUser(User user) {
// 判断用户名密码是否正确
if (!"jialin".equals(user.getName())) {
throw new UserNotFoundException("用户不存在!用户名为:" + user.getName());
} else if (user.getPassword() != 123456) {
throw new PasswordErrorException("密码错误");
}
}}
用户实体和异常类省略。
上述实现过程,其中ActionServlet的功能,被Struts封装了,所以我们的代码部分,并没有涉及到ActionServlet的部分。
分析代码可知道,Action不再需要我们手动创建,读取配置文件等基础服务已被Struts封装了,表单中数据类型也不需要我们手动转换了,页面转向可以进行配置,也不需要我们手动去配置文件中取了。
可以说,Struts把公共的服务为封装好了,我们只需要做很少的事,就可以获得很大的灵活性。
下篇继续!
先用时序图来描述一下登录功能的处理流程:
核心操作:
1、配置struts
* 拷贝struts相关的jar到WEB-INF/lib下
* 在web.xml文件中配置ActionServlet
* 提供struts-config.xml文件,需要放到WEB-INF下
2、实现
*建立login.jsp/loginSuccess.jsp/loginFail.jsp
*建立了LoginAction.java/userActionForm.java
*将LoginAction/LoginActionForm/相关jsp配置到struts-config.xml文件中
代码:
配置文件
[html]
view plaincopyprint?
<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>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<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> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
JSP(View)
[html]
view plaincopyprint?
<form action="login.do" method="post">
<input type="text" name="name" />
<br />
<input type="password" name="password" />
<input type="submit" value="登录"/>
</form>
<form action="login.do" method="post"> <input type="text" name="name" /> <br /> <input type="password" name="password" /> <input type="submit" value="登录"/> </form>
LoginSuccess.jsp
[html]
view plaincopyprint?
<body>
登录成功》》》》》》》》》》》》
</body>
<body> 登录成功》》》》》》》》》》》》 </body>
LoginFail.jsp
[html]
view plaincopyprint?
<body>
登录失败》》》》》》》》》》》》
</body>
<body> 登录失败》》》》》》》》》》》》 </body>
LoginAction
[java]
view plaincopyprint?
package com.jialin;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* 登录action
* @author jialin
*作用:取得表单数据,调用model层业务逻辑,返回转向信息
*/
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserActionForm userForm=(UserActionForm)form;
String userName=userForm.getName();
int password=userForm.getPassword(); //这里不用我们手动强转类型了。
UserManage userManage=new UserManage();//后面我们再改进
User user=new User();
user.setName(userName);
user.setPassword(password);
try {
userManage.ValidateUser(user);
return mapping.findForward("success");
} catch (UserNotFoundException e) {
e.printStackTrace();
request.setAttribute("message", e.getMessage());
}catch(PasswordErrorException e){
e.printStackTrace();
request.setAttribute("message", e.getMessage());
}
return mapping.findForward("fail"); }
}
package com.jialin; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * 登录action * @author jialin *作用:取得表单数据,调用model层业务逻辑,返回转向信息 */ public class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserActionForm userForm=(UserActionForm)form; String userName=userForm.getName(); int password=userForm.getPassword(); //这里不用我们手动强转类型了。 UserManage userManage=new UserManage();//后面我们再改进 User user=new User(); user.setName(userName); user.setPassword(password); try { userManage.ValidateUser(user); return mapping.findForward("success"); } catch (UserNotFoundException e) { e.printStackTrace(); request.setAttribute("message", e.getMessage()); }catch(PasswordErrorException e){ e.printStackTrace(); request.setAttribute("message", e.getMessage()); } return mapping.findForward("fail"); } }
struts-config.xml
[html]
view plaincopyprint?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<!-- set ActionForm info-->
<form-beans>
<form-bean name="userForm" type="com.jialin.UserActionForm" />
</form-beans>
<action-mappings>
<!-- Set path,action,actionform,scope,forward info -->
<action path="/login" type="com.jialin.LoginAction" name="userForm"
scope="request">
<forward name="success" path="/LoginSuccess.jsp" />
<forward name="fail" path="/LoginFail.jsp" />
</action>
</action-mappings>
</struts-config>
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <!-- set ActionForm info--> <form-beans> <form-bean name="userForm" type="com.jialin.UserActionForm" /> </form-beans> <action-mappings> <!-- Set path,action,actionform,scope,forward info --> <action path="/login" type="com.jialin.LoginAction" name="userForm" scope="request"> <forward name="success" path="/LoginSuccess.jsp" /> <forward name="fail" path="/LoginFail.jsp" /> </action> </action-mappings> </struts-config>
UserActionForm
[java]
view plaincopyprint?
package com.jialin;
import org.apache.struts.action.ActionForm;
/**
* 用户ActionForm ,负责收集表单数据
* @author jialin
*注:get和set后的字符串首字母变小写后,必须和表单中属性的名字一致
*/
public class UserActionForm extends ActionForm {
private String name;
private int password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
}
package com.jialin; import org.apache.struts.action.ActionForm; /** * 用户ActionForm ,负责收集表单数据 * @author jialin *注:get和set后的字符串首字母变小写后,必须和表单中属性的名字一致 */ public class UserActionForm extends ActionForm { private String name; private int password; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPassword() { return password; } public void setPassword(int password) { this.password = password; } }
UserManage(Model)
[java]
view plaincopyprint?
package com.jialin;
/**
* MODEL层业务逻辑
* @author jialin
*判断用户是否合法
*/
public class UserManage {
public void ValidateUser(User user) {
// 判断用户名密码是否正确
if (!"jialin".equals(user.getName())) {
throw new UserNotFoundException("用户不存在!用户名为:" + user.getName());
} else if (user.getPassword() != 123456) {
throw new PasswordErrorException("密码错误");
}
}}
package com.jialin; /** * MODEL层业务逻辑 * @author jialin *判断用户是否合法 */ public class UserManage { public void ValidateUser(User user) { // 判断用户名密码是否正确 if (!"jialin".equals(user.getName())) { throw new UserNotFoundException("用户不存在!用户名为:" + user.getName()); } else if (user.getPassword() != 123456) { throw new PasswordErrorException("密码错误"); } }}
用户实体和异常类省略。
上述实现过程,其中ActionServlet的功能,被Struts封装了,所以我们的代码部分,并没有涉及到ActionServlet的部分。
分析代码可知道,Action不再需要我们手动创建,读取配置文件等基础服务已被Struts封装了,表单中数据类型也不需要我们手动转换了,页面转向可以进行配置,也不需要我们手动去配置文件中取了。
可以说,Struts把公共的服务为封装好了,我们只需要做很少的事,就可以获得很大的灵活性。
下篇继续!
相关文章推荐
- 一口一口吃掉Struts(三)——一个简单Struts实例
- 一口一口吃掉Struts(三)——一个简单Struts实例
- struts2入门-第一个例子==》第一个struts2实例——HelloWorld==》Struts2.0搭建和简单实例==>写一个Steuts2的经典入门案例,做了一个登陆程序作为入门例子
- Struts(三)——一个简单Struts实例 .
- Struts学习总结(一个简单的struts实例)
- 一个简单Struts实例
- 一个简单的struts 2实例讲解
- 一个ant的简单实例
- 一个简单的ASP.NET Forms 身份认证的实例方法
- 一个简单的文件读写实例
- 一个光线跟踪的简单实例
- 一个非常的简单的图片copy实例,虽然简单却很实用
- python3使用pyqt5制作一个超简单浏览器的实例
- 一个简单ajax实例,初学者可以了解
- 【Qt5开发及实例】19、一个简单的画图程序
- Silverlight实用窍门系列:30.Silverlight中创建一个最简单的WCF RIA Services访问数据库实例【实例源码+数据库下载】
- tomcat配置及使用(环境变量设置及测试,一个简单的web应用实例)
- 一个简单的jsp+servlet实例,实现简单的登录
- cocos2d-x学习(4)---游戏实例开发:一个简单的射击游戏三
- C#调用webservice一个简单实例