Struts+Spring的简单应用

作者在 2008-01-03 10:13:10 发布以下内容

        今天写一个简单的Struts+Spring例子。目前来说,很少有项目单独用一个框架的,Struts+Spring,这个应该是做Web开发的人都要学的。这段时间学了不少框架的知识,来写一个简单的先。

        环境:jdk1.5, Eclipse3.2, Tomcat5.5, struts1.0, spring1.2。所有struts的tld文件放在WEB-INF\tld下。

        这个例子还是简单的登录,如果用户名为"Jim"而且密码为"111"的话就显示出一些消息,否则就跳转到登录错误页面。这个例子我没有写关于验证的东西,有兴趣的朋友可以参照我以前写的验证例子。

        首先,我们来配置WEB-INF下的web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

<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>0</param-value>

</init-param>

<init-param>

<param-name>detail</param-name>

<param-value>2</param-value>

</init-param>

<load-on-startup>1</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>

<taglib>

<taglib-uri>/tags/struts-html</taglib-uri>

<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>

</taglib>

<taglib>

<taglib-uri>/tags/struts-logic</taglib-uri>

<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>

</taglib>

<taglib>

<taglib-uri>/tags/struts-bean</taglib-uri>

<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>

</taglib>

</web-app>

        这个跟以前的web.xml并没有什么不同。然后我们来写struts-config.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<data-sources />

<form-beans>

<form-bean name="loginForm" type="src.LoginForm" />

</form-beans>

<global-exceptions />

<global-forwards />

<action-mappings>

<action path="/login"

name="loginForm"

input="/login.jsp"

type="org.springframework.web.struts.DelegatingActionProxy">

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

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

</action>

</action-mappings>

<message-resources parameter="src.ApplicationResource" />

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />

</plug-in>

</struts-config>

        注意,最后的plug-in里面说明了我们要用到spring的ContextLoaderPlugin,这个是用来分配不同的请求给不同的struts的action的,配置文件在value里面设置。我们这里就用到了一个ActionForm和一个Action,同时要注意,action-mapping里面,type改为了org.springframework.web.struts.DelegatingActionProxy,就是action的分发交由spring的DelegatingActionProxy代管。

        然后写一个login.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<%@ taglib uri="/tags/struts-html" prefix="html" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Login Page</title>

</head>

<body>

<center>

<b>Login if you want to see your information</b><br/>

<html:form. action="/login.do" method="post">

<table>

<tr>

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

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

</tr>

<tr>

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

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

<tr>

<tr>

<td align="center"><html:submit value="Login" /></td>

</tr>

</table>

</html:form>

</center>

</body>

</html>

        这里只需要输入username和password两个内容就可以了。

        然后写LoginForm.java:

package src;

import org.apache.struts.action.ActionForm;

public class LoginForm. extends ActionForm{

private String username;

private String password;

 

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

}

        这里就只有刚刚login.jsp里面的username和password两个属性。

        在这个例子里面,如果登录成功要显示一些个人信息,我们先写一个User.java:

package src;

public class User {

private String name;

private int age;

private String status;

public User(){

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getStatus() {

return status;

}

public void setStatus(String status) {

this.status = status;

}

}

        只有name, age, status三个属性。

        接着我们来写WEB-INF下的applicationContext.xml,这个就是你要配置的spring的分发管理文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean name="/login" class="src.LoginAction" >

<property name="user">

<ref local="user" />

</property>

</bean>

<bean id="user" class="src.User">

<property name="name">

<value>Jim Allen Green</value>

</property>

<property name="age">

<value>19</value>

</property>

<property name="status">

<value>Good</value>

</property>

</bean>

</beans>

        这里的第一个bean,就相当于在struts-config.xml里面action-mapping中,我们将path="/login"的请求对应到了这里的name="/login",然后由哪个Action处理则由后面的class来指定。我们先看看LoginAction.java:

package src;

import javax.servlet.http.*;

import org.apache.struts.action.*;

public class LoginAction extends Action{

User user;

public ActionForward execute(ActionMapping mapping,

ActionForm. form,

HttpServletRequest request,

HttpServletResponse response){

LoginForm. lf = (LoginForm)form;

HttpSession session = request.getSession();

String username = lf.getUsername();

String password = lf.getPassword();

ActionForward forward;

if(username.equals("Jim")&& password.equals("111")){

session.setAttribute("User", user);

forward = mapping.findForward("success");

}else{

forward = mapping.findForward("failure");

}

return forward;

}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

}

        在这个Action里面,我们写了一个User类的user实例,就是说如果登录通过,那么会把该user放到一个名为User的session里面而后显示user的相关信息,也就是name, age, status三个属性。那么,这三个属性是怎么得到的呢?回过头来看applicationContext,第二个bean就写了这个user的相关信息。同时第一个bean里面有一个property属性,该属性里面的user就是指Action里面的这个user实例,并且将它参考到了第二个bean。这就是spring的IoC了。

        然后写一个success.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Success Page</title>

</head>

<body>

<center>

<logic:present name="User">

Name:&nbsp;<bean:write name="User" property="name" /><br/>

Age:&nbsp;<bean:write name="User" property="age" /><br/>

Status:&nbsp;<bean:write name="User" property="status" /><br/>

</logic:present>

<a href="login.jsp">Back to Index</a>

</center>

</body>

</html>

        这里用struts的标签显示出了相关信息。

        再写一个failure.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Failure Page</title>

</head>

<body>

<center>

Failed to login!<br/>

<a href="login.jsp">Login again</a>

</center>

</body>

</html>

        如此,这个简单的例子就完成了。当然,这个例子不够规范,太简单了,像验证username和password是否为正确的用户名和密码的过程是不应该放在LoginAction里面做的。这里只是尽可能写得简单一点。Struts+Spring能够使你的WEB开放简单、轻松。还有很多东西要学,大家有兴趣一起交流。

默认分类 | 阅读 1798 次
文章评论,共0条
游客请输入验证码