本人新手一枚。也在学习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>
我把sql也贴出来吧,后面我会提供下载的连接
/*
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");
}
}
项目源代码下载连接:点击下载
本人新手,假设发现问题也请留言不吝赐教,一起进步。