zoukankan      html  css  js  c++  java
  • 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 }
    完成,提交给服务器。

     

     

  • 相关阅读:
    Redis为什么要自己实现一个SDS
    Redis中的数据结构
    编程题
    设计模式-代理模式
    设计模式-原型模式
    设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
    Redis基础
    Windows提高_1.4进程通信
    Windows提高_1.3文件操作
    Windows提高_1.2遍历进程、遍历模块
  • 原文地址:https://www.cnblogs.com/lixiaopan/p/6277764.html
Copyright © 2011-2022 走看看