Java Web开发中包的冲突,版本问题对于开发有着很大的影响。终于把SSH组合打架完成并且能够成功的跑起来了。
这一部分是Struts和Spring的组合。
1.先创建一个form表单
页面代码:
- <%@ page language="java" pageEncoding="GB2312"%>
- <%@ 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" %>
- <html>
- <head>
- <title>欢迎登录</title>
- </head>
- <body>
- <html:form action="/login">
- 编号 : <html:text property="empId"/><html:errors property="empId"/><br/>
- 姓名 : <html:text property="empName"/><html:errors property="empName"/><br/>
- 年龄 : <html:text property="empAge"/><html:errors property="empAge"/><br/>
- <html:submit value="登录"/><html:cancel value="取消"/>
- </html:form>
- <logic:present name="message">
- ${message }
- <br>
- </logic:present>
- </body>
- </html>
2.页面提交后,成功转向成功页面,失败转向登录页面
创建一个Action该Action继承一个BaseAction类,BaseAction类是对Spring注入对象的封装。
代码如下:
- import org.springframework.web.context.WebApplicationContext;
- import org.springframework.web.context.support.WebApplicationContextUtils;
- import org.springframework.web.struts.ActionSupport;
- /**
- *
- *
- * Struts 与 Spring 结合的基本的Action类
- *
- *
- * Struts 将Action类交给Spring来托管
- *
- * @author aiilive
- *
- */
- public class BaseAction extends ActionSupport {
- protected Object getBean(String id) {
- WebApplicationContext ctx = WebApplicationContextUtils
- .getWebApplicationContext(this.servlet.getServletContext());
- return ctx.getBean(id);
- }
- }
对提交页面的处理的Action代码如下:
- package xiao.zhang.struts.action;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import xiao.zhang.bean.Emps;
- import xiao.zhang.service.ImpEmpsService;
- import xiao.zhang.struts.form.LoginForm;
- import xiao.zhang.struts.action.BaseAction;
- /**
- * MyEclipse Struts Creation date: 07-28-2012
- *
- * XDoclet definition:
- *
- * @struts.action path="/login" name="loginForm" input="/login.jsp"
- * scope="request" validate="true"
- */
- public class LoginAction extends BaseAction {
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- LoginForm loginForm = (LoginForm) form;
- String empName = loginForm.getEmpName();
- int empAge = loginForm.getEmpAge();
- System.out.println("empName:"+empName+" empAge:"+empAge+" empId:"+loginForm.getEmpId());
- * ImpEmpsService empService = (ImpEmpsService) getBean("EmpsService");
- Emps emp = empService.getEmpsById(loginForm.getEmpId());
- if (emp.getEmpName().equals(empName) && emp.getEmpAge().equals(empAge)) {
- request.setAttribute("message", "登录成功");
- request.setAttribute("emp", emp);
- return mapping.findForward("succeed");
- }else{
- request.setAttribute("message", "登录失败");
- return mapping.findForward("error");
- }
- }
- }
在struts-config.xml配置文件中的配置信息如下:
- <struts-config>
- <data-sources />
- <form-beans >
- <form-bean name="loginForm" type="xiao.zhang.struts.form.LoginForm" />
- </form-beans>
- <global-exceptions />
- <global-forwards />
- <action-mappings >
- <action
- attribute="loginForm"
- input="/login.jsp"
- name="loginForm"
- path="/login"
- scope="request"
- type="xiao.zhang.struts.action.LoginAction">
- <forward name="error" path="/login.jsp" />
- <forward name="succeed" path="/index.jsp" />
- </action>
- </action-mappings>
- <message-resources parameter="xiao.zhang.struts.ApplicationResources" />
- </struts-config>
3.说明
如上面的LoginAction类中的带星号行红色代码所示,Action处理登录的业务直接功过BaseAction提供的getBean方法通过传入业务逻辑处理类,根据Spring的依赖注入原理获得处理的对象实例,从而不用将Action类配置到Spring中去。
在Spring配置将主要配置业务逻辑处理类。
4.Struts将主要用户视图层和业务逻辑层之间的数据显示和获取的控制。
Struts配置文件图:
通过Struts的配置文件图可以看到页面的请求,控制,回复的处理逻辑。
例如:页面提交查询所有信息,则Action中进行处理
- public class QueryAction extends BaseAction {
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- ImpEmpsService empService = (ImpEmpsService) getBean("EmpsService");
- List empsList=empService.findAll();
- request.setAttribute("empsList", empsList);
- return mapping.findForward("succeed");
- }
- }
可以看出Action只做页面的流程之间的控制和业务层逻辑处理完成后的数据回复到显示层的处理工作。