struts2:第一个struts2程序

 在本系列教程中我们将学习到Struts2的各种技术。在本教程中使用的工具和程序库的版本如下:

 

需要的包:
commons-fileupload-1.2.1.jar
commons-logging-1.0.4.jar    
freemarker-2.3.13.jar     Sturts2的所有UI标记
ognl-2.6.11.jar      OGNL表达式相关
struts2-core-2.1.6.jar  Struts2的核心包
xwork-2.1.2.jar   XWork2 库。Struts2核心包,做为底层存在

 

1,引入类库
2,配置文件
配置 Action的struts.xml 文件
配置Struts 2全局属性的struts.properties文件
3,web.xml的部署配置
4,写普通java类。(execute方法)
5,.action的视图访问

 

1.        安装Struts。由于Struts的入口点是ActionServlet,所以得在web.xml中配置一下这个Servlet

 

2.        编写Action类(一般从org.apache.struts.action.Action类继承)。

 

3.        编写ActionForm类(一般从org.apache.struts.action.ActionForm类继承),这一步不是必须的,如果要接收客户端提交的数据,需要执行这一步。

 

4.        在struts-config.xml文件中配置Action和ActionForm

 

5.        如果要采集用户录入的数据,一般需要编写若干JSP页面,并通过这些JSP页面中的form将数据提交给Action

 

第一步:安装Struts2

    这一步对于Struts1.x和Struts2都是必须的,只是安装的方法不同。Struts1的入口点是一个Servlet,而Struts2的入口点是一个过滤器(Filter)。因此,Struts2要按过滤器的方式配置。下面是在web.xml中配置Struts2的代码:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

 

第二步:编写Action   

这一步和Struts1.x也必须进行。只是Struts1.x中的动作类必须从Action类中继承,而Struts2.x的动作类需要从com.opensymphony.xwork2.ActionSupport类继承。下面是登录验证的Action类,代码如下:

 

package com.demo.action;

import com.demo.service.IUserService;
import com.demo.service.UserServiceImpl;
import com.demo.vo.User;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

	/**
	 * 两个属性
	 */
	private String username;
	private String userpwd;
	
	/**
	 * 获取两个属性的get set方法
	 * @return
	 */
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUserpwd() {
		return userpwd;
	}
	public void setUserpwd(String userpwd) {
		this.userpwd = userpwd;
	}
	
	public String execute() throws Exception{
		//初始化对象
		User user = new User();
		user.setUsername(username);
		user.setUserpwd(userpwd);
		
		//与service层连接
		IUserService ius = new UserServiceImpl();
		if (ius.login(user)) {
			System.out.println(username);
			return SUCCESS;
		} else {
			this.addFieldError("usererror", "登录失败,用户名或者密码错误!");
			return ERROR;
		}
	}
	
}

 

 第三步:配置Action

    这一步struts1.xstruts2.x都是必须的,只是在struts1.x中的配置文件一般叫struts-config.xml(当然也可以是其他的文件名),而且一般放到WEB-INF目录中。而在struts2.x中的配置文件一般为struts.xml,放到WEB-INF"classes目录中。下面是在struts.xml中配置动作类的代码:

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 <struts>
 6     <package name="struts" extends="struts-default">
 7         <action name="login" class="com.demo.action.UserAction">
 8             <result >success.jsp</result>
 9             <result name="error">login.jsp</result>
10         </action>
11     </package>
12 </struts>

 

第四步:

编写用户录入接口(JSP页面)

1.       主界面(login.jsp

在Web根目录建立一个login.jsp,代码如下:

 

 1  <body>
 2   <center>
 3       >>>>===>>>><s:fielderror/>
 4     <form action="login.action" method="post">
 5         用户名:<input type="text" name="username"><br>
 6         密    码:<input type="password" name="userpwd"><br>
 7         <input type="submit" value="提    交">
 8     </form>
 9    </center>
10   </body>

 

第五步:编写MVC的dao层、servlet层

  dao层:

 1 package com.demo.dao;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 
 8 import com.demo.util.DBUtil;
 9 import com.demo.vo.User;
10 
11 public class UserDaoImpl implements IUserDao{
12 
13     @Override
14     public boolean login(User user) {
15         
16         Connection conn = DBUtil.getConnection();
17         
18         PreparedStatement pstmt = null;
19         ResultSet rs = null;
20         
21         String sql = "select * from user where userName=? and passWord=?";
22         
23         try {
24             pstmt = conn.prepareStatement(sql);
25             
26             pstmt.setString(1, user.getUsername());
27             pstmt.setString(2, user.getUserpwd());
28             
29             rs = pstmt.executeQuery();
30             
31             while (rs.next()) {
32                 return true;
33             }
34             
35         } catch (SQLException e) {
36             e.printStackTrace();
37         } finally {
38             DBUtil.close(conn, pstmt, rs);
39         }
40         
41         return false;
42     }
43 
44 }

   service层:

 1 package com.demo.service;
 2 
 3 import com.demo.dao.IUserDao;
 4 import com.demo.dao.UserDaoImpl;
 5 import com.demo.vo.User;
 6 
 7 public class UserServiceImpl implements IUserService {
 8 
 9     private IUserDao userDao = new UserDaoImpl();
10     
11     @Override
12     public boolean login(User user) {
13         return userDao.login(user);
14     }
15 
16 }

第六步:编写Util类

 1 package com.demo.util;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 
 9 public class DBUtil {
10 
11     /**
12      * 获取连接的对象
13      * @return
14      */
15     public static Connection getConnection(){
16         Connection conn = null;
17         
18         try {
19             Class.forName("com.mysql.jdbc.Driver");
20             conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user", "root", "1");
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24         
25         return conn;
26     }
27     
28     public static void close(Connection conn,Statement stmt,ResultSet rs){
29         try {
30             if (rs != null) {
31                 rs.close();
32                 rs = null;
33             }
34             if (stmt != null) {
35                 stmt.close();
36                 stmt = null;
37             }
38             if (conn != null) {
39                 conn.close();
40                 conn = null;
41             }
42         } catch (SQLException e) {
43             e.printStackTrace();
44         }
45     }
46     
47     public static void main(String[] args) {
48         getConnection();
49         System.out.println("连接成功");
50     }
51 }

第七步:编写实体类:

  注意:与action中的属性要一样

  

 1 package com.demo.vo;
 2 
 3 public class User{
 4 
 5     /**
 6      * 两个属性
 7      */
 8     private String username;
 9     private String userpwd;
10     
11     /**
12      * 获取两个属性的get set方法
13      * @return
14      */
15     public String getUsername() {
16         return username;
17     }
18     public void setUsername(String username) {
19         this.username = username;
20     }
21     public String getUserpwd() {
22         return userpwd;
23     }
24     public void setUserpwd(String userpwd) {
25         this.userpwd = userpwd;
26     }
27     @Override
28     public String toString() {
29         return "User [username=" + username + ", userpwd=" + userpwd + "]";
30     }
34 }
完成,提交给服务器。

 

 

 

 

 

 

posted @ 2017-01-12 13:05  鬼男  阅读(222)  评论(0编辑  收藏  举报