刚開始学习的人非常有用:纯struts框架实现用户登陆
本人新手一枚。也在学习ssh。高手建议从struts2開始学起,所以我就先仅仅用struts2写了一个demo。能够有助于理解struts2在项目中的作用。
首先简单了解一下struts2 的MVC模式:
M:就是业务逻辑层,代码体现就是:service层
V:就是视图层,代码提现就是:jsp
C:就是控制层。代码提现就是:actionservlet
那么我们会讲代码贴上。并会加一些凝视
首先我们是创建一个动态webproject;
project展示:先依照我的包结构。建好包结构
项目依赖的包:点击此处下载jar包
上代码:
首先 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>struts2-5</display-name> <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> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
然后是struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="defalut" extends="struts-default"> <action name="user_*_*" class="com.sino.java.action.{1}Action" method="{2}"> <result name="success">/pages/success.jsp</result> <result name="error">/pages/error.jsp</result> <result name="tologin">/index.jsp</result> <result name="show">/pages/show.jsp</result> <result name="regsuccess">/pages/regsuccess.jsp</result> <result name="input">/pages/reg.jsp</result> <result name="showbook">/pages/showbook.jsp</result> </action> </package> </struts>
/* SQLyog Ultimate v11.24 (32 bit) MySQL - 5.5.24 : Database - struts2_4 ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`struts2_4` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `struts2_4`; /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `name` varchar(30) DEFAULT NULL, `username` varchar(30) NOT NULL, `password` varchar(30) DEFAULT NULL, PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `user` */ insert into `user`(`name`,`username`,`password`) values ('DLK','admin','admin'); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
config.properties:
#请改动以下的数据库username与password,并导入上面的数据库文件 userDaoFactory=com.sino.java.dao.UserDao url=jdbc:mysql://localhost:3306/struts2_4?useUnicode=true&characterEncoding=UTF-8 user=root password=root
log4j.properties
#private static final Logger log = Logger.getLogger(LoginAction.class); log4j.rootLogger=INFO,A1,R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.Target=System.out log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%c]%m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=sshe.log log4j.appender.R.MaxFileSize=10MB log4j.appender.R.Threshold=ALL log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
然后就是
java文件:
我依照上面的项目展示的文件夹来贴代码:
----------------------------------------------------------------------------------------
package com.sino.java.action; import java.util.Iterator; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.sino.java.been.User; import com.sino.java.dao.UserDao; import com.sino.java.dao.impl.UserDaoImpl; import com.sino.java.service.UserService; import com.sino.java.service.impl.UserServiceImpl; public class LoginAction extends ActionSupport implements ModelDriven<User> { private static final Logger log = Logger.getLogger(LoginAction.class); private User user; private UserService userservice; private UserDao userdao; public UserDao getUserdao() { return userdao; } public void setUserdao(UserDao userdao) { this.userdao = userdao; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } // 用户登录 public String login() { // 是否已经登陆 ActionContext action = ActionContext.getContext(); if (action.getSession().get("username") == "" || action.getSession().get("username") == null) { userservice = new UserServiceImpl(); userdao = new UserDaoImpl(); log.info("登陆页面传来的数据:用户名:" + user.getUsername() + "+密码:" + user.getPassword()); log.info("userservice:" + userservice.toString()); log.info("user:" + user.toString()); log.info("userdao:" + userdao.toString()); User users = userservice.login(user.getUsername(),user.getPassword()); log.info("数据库查询的数据:" + users.getName()); log.info("数据库查询的数据:" + users.getUsername()); log.info("数据库查询的数据:" + users.getPassword()); log.info(users); if (!"".equals(users.getName()) && users.getName() != null) { action.getSession().put("username", users.getUsername()); action.getSession().put("name", users.getName()); msg = "恭喜登陆成功!" + users.getName(); return SUCCESS; } else { msg = "用户名或密码错误!"; return "tologin"; } } else { msg = "已经登陆" + user.getUsername(); return SUCCESS; } } // 注冊用户 public String reg() { userservice = new UserServiceImpl(); log.info("userservice:" + userservice.toString()); int a = userservice.reg(user.getName(), user.getUsername(), user.getPassword(), user.getAge(), user.getSex()); log.info("结果:" + a); log.info("传人的数据为:" + user.toString()); if (a != 0) { return "regsuccess"; } else { return "regerror"; } } public String show() { userdao = new UserDaoImpl(); ActionContext action = ActionContext.getContext(); String name = (String) action.getSession().get("name"); List<User> userlist = userdao.getAllUser(name); log.info("数据库查到数据长度>>" + userlist.size()); Iterator it = userlist.iterator(); while (it.hasNext()) { User user = new User(); user = (User) it.next(); log.info("数据库查询出来的用户名:" + user.getUsername()); log.info("数据库查询出来的密码:" + user.getPassword()); } HttpServletRequest hsr = ServletActionContext.getRequest(); hsr.setAttribute("userlist", userlist); return "show"; } public String logout() { ActionContext action = ActionContext.getContext(); log.info("将session设置为空!并退出登陆。"); action.getSession().put("username", null); return "tologin"; } @Override public User getModel() { // TODO Auto-generated method stub if (user == null) { user = new User(); } return user; } }
-------------------------------------------------------------
package com.sino.java.been; public class User { private String name; private String username; private String age; private String sex; private String password; public User() { // TODO Auto-generated constructor stub } public User(String name, String username, String age, String sex, String password) { super(); this.name = name; this.username = username; this.age = age; this.sex = sex; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
----------------------------------------------------------------------------------------
package com.sino.java.dao; import java.util.List; import com.sino.java.been.User; public interface UserDao { public List<User> getAllUser(String name); public User getUser(String username, String password); public int insert(User user); }
------------------------------------------------------------------------------------------
package com.sino.java.dao.factory; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import com.sino.java.dao.UserDao; public class DaoFactory { // 注意 对象的 创建顺序 private static UserDao userDao = null; private static DaoFactory instance = new DaoFactory(); private DaoFactory() { try { Properties prop = new Properties(); // InputStream inStream = new FileInputStream(new // File("src/daoconfig.properties")); // 长处:文件不一定要和路径绑定,仅仅要文件从在于 ClassPath 中 就能够找得到 InputStream inStream = DaoFactory.class.getClassLoader() .getResourceAsStream("config.properties"); prop.load(inStream); // 从配置文件里获得的 value 值 都是字符串(String) String userDaoClzz = prop.getProperty("userDaoFactory"); System.out.println("userdao-"+userDaoClzz); // 通过反射方式 创建对象 Class clazz = Class.forName(userDaoClzz); userDao = (UserDao) clazz.newInstance(); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static DaoFactory getInstance() { return instance; } public static UserDao getUserDao() { return userDao; } }--------------------------------------------------------------------------------------------------
package com.sino.java.dao.impl; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.sino.java.been.User; import com.sino.java.dao.UserDao; import com.sino.java.service.impl.UserServiceImpl; import com.sino.java.utils.JdbcUtils; public class UserDaoImpl implements UserDao { private static final Logger log = Logger.getLogger(UserDaoImpl.class); public int insert(User user) { Connection con = null; PreparedStatement ps = null; int i = 0; ResultSet rs = null; try { con = JdbcUtils.getConn(); String sql = "insert into user(name,username,password) values(?,?,?) "; ps = con.prepareStatement(sql); ps.setString(1, user.getName()); ps.setString(2, user.getUsername()); ps.setString(3, user.getPassword()); i = ps.executeUpdate(); } catch (Exception e) { // TODO: handle exception }finally { JdbcUtils.free(rs, ps, con); } return i; } @Override public List<User> getAllUser(String name) { // TODO Auto-generated method stub Connection con = null; List<User> userlist = new ArrayList<User>(); PreparedStatement ps = null; ResultSet rs = null; try { String sql = "select * from user where name= ? "; con = JdbcUtils.getConn(); ps = con.prepareStatement(sql); ps.setString(1, name); rs = ps.executeQuery(); while (rs.next()) { User user = new User(); user.setUsername(rs.getString(2)); user.setPassword(rs.getString(3)); userlist.add(user); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return userlist; } public User getUser(String username, String password) { User user = new User(); ResultSet rs = null; PreparedStatement ps = null; Connection conn = null; try { conn = JdbcUtils.getConn(); String sql = "select * from user where username=?and password=? "; /* * String url = * "jdbc:mysql://localhost:3306/struts2_4?
useUnicode=true&characterEncoding=UTF-8" * ; * * Class.forName("com.mysql.jdbc.Driver"); con = * DriverManager.getConnection(url,"root","root"); */ ps = conn.prepareStatement(sql); ps.setString(1, username); ps.setString(2, password); rs = ps.executeQuery(); while (rs.next()) { user.setName(rs.getString(1)); user.setUsername(rs.getString(2)); user.setPassword(rs.getString(3)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JdbcUtils.free(rs, ps, conn); } return user; } }
-----------------------------------------------------------------------------------------------------------
package com.sino.java.service; import com.sino.java.been.User; /** * @author Administrator * */ public interface UserService { public User login(String username,String password); public int reg(String name,String username,String password,String age,String sex); public void save(User user) throws Exception; //public DataGrid datagrid(User user); public void delete(String ids); public void update(User user) throws Exception; public void roleEdit(User user); public void editUserInfo(User user); }
-----------------------------------------------------------------------------------------------
package com.sino.java.service.impl; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.opensymphony.xwork2.inject.Factory; import com.sino.java.action.LoginAction; import com.sino.java.been.User; import com.sino.java.dao.UserDao; import com.sino.java.dao.factory.DaoFactory; import com.sino.java.dao.impl.UserDaoImpl; import com.sino.java.service.UserService; public class UserServiceImpl implements UserService{ private static final Logger log = Logger.getLogger(UserServiceImpl.class); UserDao userDao = new UserDaoImpl(); @Override public User login(String username,String password) { // TODO Auto-generated method stub User user = userDao.getUser(username,password); return user; } @Override public int reg(String name, String username, String password, String age, String sex) { User user = new User(); user.setName(name); user.setUsername(username); user.setPassword(password); user.setAge(age); user.setSex(sex); return userDao.insert(user); } @Override public void save(User user) throws Exception { // TODO Auto-generated method stub } @Override public void delete(String ids) { // TODO Auto-generated method stub } @Override public void update(User user) throws Exception { // TODO Auto-generated method stub } @Override public void roleEdit(User user) { // TODO Auto-generated method stub } @Override public void editUserInfo(User user) { // TODO Auto-generated method stub } }
---------------------------------------------------------------------------------------------------------
package com.sino.java.utils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import org.apache.log4j.Logger; import com.sino.java.dao.factory.DaoFactory; import com.sino.java.dao.impl.UserDaoImpl; // 该工具类不须要被继承 public final class JdbcUtils { private static String url = ""; private static String user = ""; private static String password = ""; private static final Logger log = Logger.getLogger(UserDaoImpl.class); // 不同意被创建 private JdbcUtils() { } static { try { Class.forName("com.mysql.jdbc.Driver"); Properties prop = new Properties(); // InputStream inStream = new FileInputStream(new // File("src/daoconfig.properties")); // 长处:文件不一定要和路径绑定。仅仅要文件从在于 ClassPath 中 就能够找得到 InputStream inStream = DaoFactory.class.getClassLoader() .getResourceAsStream("config.properties"); try { prop.load(inStream); } catch (IOException e) { // TODO Auto-generated catch block log.info("load error"); e.printStackTrace(); } // 从配置文件里获得的 value 值 都是字符串(String) url = prop.getProperty("url"); user = prop.getProperty("user"); password = prop.getProperty("password"); Class.forName("com.mysql.jdbc.Driver"); log.info("------------------url user password ------------"); log.info(url); log.info(user); log.info(password); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } public static Connection getConn() throws SQLException { return DriverManager.getConnection(url, user, password); } public static void free(ResultSet rs, Statement st, Connection conn) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (st != null) st.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } public static void main(String[] args) { log.info("test"); } }
项目源代码下载连接:点击下载
本人新手,假设发现问题也请留言不吝赐教,一起进步。