最近要用到SSH做项目,之前没有完整的用过SSH,现在写下怎么在eclipse中怎么用SSH。
第一步:将SSH要用到的jar包拷贝到lib目录下。
链接在这里:
http://pan.baidu.com/s/1qWxyrDy
第二步:搭建struts2:
新建一堆一堆的的包和类,以登录为例,截图:
首先来编写action类,lognAction
package com.ssh.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.ssh.forms.UserForm;
import com.ssh.service.UserManger;
public class LoginAction extends ActionSupport {
private UserForm user;
private UserManger userManager;
public UserForm getUser() {
return user;
}
public void setUser(UserForm user) {
this.user = user;
}
public UserManger getUserManager() {
return userManager;
}
public void setUserManager(UserManger userManager) {
this.userManager = userManager;
}
public String login() {
int userId = userManager.login(user);
if (userId > 0 ) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
session.setAttribute("username", user.getUsername());
System.out.println("login success");
return SUCCESS;
}
return ERROR;
}
}
这一步UserManager可以是空的,我是打算全部搭建完毕后才运行的,因此先搁着不写。
表单类如下:
package com.ssh.forms;
public class UserForm {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
配置struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf8"/>
<package name="default" extends="struts-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
<action name="register" class="regAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/Register.jsp</result>
</action>
<action name="check" class="checkBean">
<result type="json"></result>
</action>
<action name="login" class="loginBean" method="login">
<result name="success">/index.jsp</result>
<result name="error">/index.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
由于这里有注册的信息,注册的时候要检查用户,用ajax异步提交的,返回json数据。
ok,到这里struts配置完毕
差点忘了,在这里在web.xml加入拦截
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
因为我是配置完成的,所以这里有spring的信息。
整合Hibernate
编写POJO类User.java的Hibernate映射文件User.hbm.xml的内容。代码<generator class="native"></generator>说明将根据本地数据库的设置来创建userId,如MySQL中将表user的userId设置为自动增长,则在保存记录是,userId将自动增长。对于需要在程序中指定主键的值,则将generator的class属性设置为assigned。
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.ssh.beans">
<class name="User" table="user">
<id name="userId" column="userId">
<generator class="native"></generator>
</id>
<property name="username" column="userName" type="java.lang.String"
not-null="true" length="16"></property>
<property name="password" column="password" type="java.lang.String"
not-null="true" length="16" />
</class>
</hibernate-mapping>
package com.ssh.beans;
public class User {
private String username;
private String password;
private int userId;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
整合Spring
编写Spring的配置文件applicationContext.xml。路径:src目录下,需要在web.xml配置context-param指定路径,或者把该文件放在WEB-INF下,跟web.xml同目录。我是放在了和web.xml同目录下了
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 定义数据源的信息 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://localhost/caba</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
<property name="maxPoolSize">
<value>80</value>
</property>
<property name="minPoolSize">
<value>1</value>
</property>
<property name="initialPoolSize">
<value>1</value>
</property>
<property name="maxIdleTime">
<value>20</value>
</property>
</bean>
<!--定义Hibernate的SessionFactory -->
<!-- SessionFactory使用的数据源为上面的数据源 -->
<!-- 指定了Hibernate的映射文件和配置信息 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>com/ssh/beans/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="baseDao" class="com.ssh.daoImpl.UserDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!--用户注册业务逻辑类 -->
<bean id="userManager" class="com.ssh.serviceImpl.UserMangerImpl">
<property name="dao">
<ref bean="baseDao" />
</property>
</bean>
<!-- 用户注册的Action -->
<bean id="regAction" class="com.ssh.action.RegisterAction">
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>
<bean id="checkBean" class="com.ssh.action.CheckUserAction">
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>
<bean id="loginBean" class="com.ssh.action.LoginAction">
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>
<!-- more bean definitions go here -->
</beans>
完成的接口类Dao和实现类UserDao的内容
package com.ssh.dao;
import java.util.List;
public interface BaseDao {
public void saveObject(Object obj);
public List findByProperty(String propertyName, Object value);
public List findByUsername(Object username);
public int findUserByNameAndPass(String username,String password);
}
package com.ssh.daoImpl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.ssh.beans.User;
import com.ssh.dao.BaseDao;
public class UserDao extends HibernateDaoSupport implements BaseDao{
@Override
public void saveObject(Object obj) {
// TODO Auto-generated method stub
getHibernateTemplate().save(obj);
}
@Override
public List findByProperty(String propertyName, Object value) {
// TODO Auto-generated method stub
try
{
String queryString = "from User as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
} catch (RuntimeException re)
{
throw re;
}
}
@Override
public List findByUsername(Object username) {
// TODO Auto-generated method stub
return findByProperty("username",username);
}
@Override
public int findUserByNameAndPass(String username, String password) {
// TODO Auto-generated method stub
String[] args = {username,password};
String querString = "from User as user where user.username =? and user.password=?";
List result = getHibernateTemplate().find(querString,args);
if (result.size()>0){
User user = (User)result.get(0);
return user.getUserId();
}
return -1;
}
}
完成业务逻辑类
业务逻辑接口:
package com.ssh.service;
import com.ssh.forms.UserForm;
public interface UserManger {
public void regUser(UserForm user);
public boolean checkUser(UserForm user);
public int login(UserForm user);
}
实现类:
package com.ssh.serviceImpl;
import java.util.List;
import org.springframework.beans.BeanUtils;
import com.ssh.beans.User;
import com.ssh.dao.BaseDao;
import com.ssh.forms.UserForm;
import com.ssh.service.UserManger;
public class UserMangerImpl implements UserManger {
private BaseDao dao;
@Override
public void regUser(UserForm user) {
// TODO Auto-generated method stub
User u = new User();
BeanUtils.copyProperties(user, u);
dao.saveObject(u);
}
public void setDao(BaseDao dao) {
this.dao = dao;
}
@Override
public boolean checkUser(UserForm user) {
// TODO Auto-generated method stub
User u = new User();
BeanUtils.copyProperties(user, u);
List l = dao.findByUsername(u.getUsername());
if( l.size() > 0)
return false;
else
return true;
}
@Override
public int login(UserForm user) {
// TODO Auto-generated method stub
User u = new User();
BeanUtils.copyProperties(user, u);
return dao.findUserByNameAndPass(u.getUsername(), u.getPassword());
}
}
login.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
<link rel="stylesheet" type="text/css" href="dist/css/bootstrap.min.css">
<style type="text/css">
body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
}
.form-signin {
max-width: 500px;
height:350px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
background-color: #fff;
border: 1px solid #e5e5e5;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin input[type="text"],
.form-signin input[type="password"] {
font-size: 16px;
height: auto;
width:300px;
margin-bottom: 25px;
padding: 7px 9px;
}
</style>
</head>
<body>
<div class="container">
<form class="form-signin" action="login.action" method="post">
<h2 class="form-signin-heading">请登录</h2>
<input type="text" class="input-block-level" placeholder="用户名" name="user.username">
<input type="password" class="input-block-level" placeholder="密码" name="user.password">
<button class="btn btn-large btn-primary" style="width:200px" type="submit">登录</button>
</form>
</div> <!-- /container -->
</body>
</html>
效果如下: