在做SSH整合之前,首先看下struts单独使用的情况:
部署描述符 web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- struts的ActionServlet配置 --> <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> <!-- 配置struts的ActionServlet的请求路径,以.do结尾的请求 --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>
在启动项目后,根据web.xml中的配置,首先会登录到欢迎页面 login.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<form action="login.do" method="post">
<table>
<tr><td>用户名:</td><td><input type="text" name="username"></td></tr>
<tr><td>密 码:</td><td><input type="password" name="password"></td></tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
点击提交按钮后,会把"login.do"提交到struts的action中。在struts的配置文件中查找路径为"/login"的action
struts配置文件struts-config.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config SYSTEM "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <!-- Form表单 --> <form-beans> <form-bean name="userForm" type="com.cos.form.UserForm"></form-bean> </form-beans> <!-- Struts Action --> <action-mappings> <action path="/login" type="com.cos.action.LoginAction" scope="request" name="userForm"> <forward name="success" path="/success.jsp"/> </action> </action-mappings> </struts-config>
LoginAction.java:
package com.cos.action;
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;
import com.cos.form.UserForm;
import com.cos.manager.UserManager;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm actionfrom,
HttpServletRequest request, HttpServletResponse response) {
UserForm loginForm = (UserForm)actionfrom;
//需要new业务逻辑对象UserManager,代码耦合
UserManager userManager = new UserManager();
userManager.createUser(loginForm.getUsername(), loginForm.getPassword());
return mapping.findForward("success");
}
}
UserForm.java:
package com.cos.form;
import org.apache.struts.action.ActionForm;
public class UserForm extends ActionForm {
private static final long serialVersionUID = 1L;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
业务逻辑处理类 UserManager.java:
package com.cos.manager;
//业务逻辑处理
public class UserManager {
public void createUser(String username, String password) {
System.out.println("业务逻辑处理:用户名:" + username + ",密码:" + password);
}
}
成功页面 success.jsp :
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
登录成功。<a href="login.jsp">返回</a>
</body>
</html>
运行结果:跳转到成功页面success.jsp 并且控制台打印出:"业务逻辑处理:用户名:xxx,密码:xxx"
缺点:
在LoginAction中,new了一个业务逻辑对象UserManager。这样LoginAction和UserManager代码耦合。