在本系列教程中我们将学习到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.x和struts2.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 }
完成,提交给服务器。