手动搭建ssh框架

之前的一篇博文说明了如何用myeclipse提供的方法搭建ssh框架,本文介绍如何手动编码搭建此框架。我的环境为jdk1.7.0,Java EE 6 Librariesmyeclipse 10(其他版本也可)。

1.新建web project。工程名为SSH,将index.jsp删掉(没有用到)。

2.引入ssh核定jar包。共27个。

antlr-2.7.6.jar                       asm-attrs.jar
asm.jar                               c3p0-0.9.1.jar
cglib-2.1.3.jar                       commons-collections-3.1.jar
commons-dbcp-1.4.jar                  commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar                  commons-lang3-3.1.jar
commons-logging-1.1.1.jar             commons-pool-1.6.jar
dom4j-1.6.1.jar                       freemarker-2.3.19.jar
hibernate-tools.jar                   hibernate3.jar
javassist-3.11.0.GA.jar               jta.jar
junit-4.4.jar                         log4j-1.2.11.jar
mysql-connector-java-5.1.20-bin.jar   ognl-3.0.5.jar
spring.jar                            struts2-core-2.3.3.jar
struts2-json-plugin-2.3.3.jar         struts2-spring-plugin-2.3.3.jar
xwork-core-2.3.3.jar

下载全部jar包,复制到工程下webroot/WEB-INF/lib下。不要用编译路径引入,否则会导致不能添加到web中。

3.配置struts2核心过滤器。

打开web.xml,添加过滤器和过滤器映射

<?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">

<!-- 配置struts2核心过滤器 -->
<filter>
	<filter-name>ssh</filter-name>
	<filter-class>
		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	</filter-class>
</filter>
<!-- 过滤器映射 -->
<filter-mapping>
	<filter-name>ssh</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

4.建立BaseAction。

新建包com.dj.ssh.action.base,在其中建立BaseAction,继承ActionSupport,并实现ServletRequestAware,ServletResponseAware,ServletContextAware,SessionAware四个接口,作为基本的Action供其他Action继承。

package com.dj.ssh.action.base;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class BaseAction extends ActionSupport 
							implements ServletRequestAware,ServletResponseAware,
							ServletContextAware,SessionAware{

	private static final long serialVersionUID = 471790417376168550L;
	
	protected HttpServletRequest request;
	protected HttpServletResponse response;
	protected ServletContext context;
	protected Map<String, Object> session;

	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

	public void setServletContext(ServletContext context) {
		this.context = context;
	}

	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}

	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

}

4.编写测试struts的Action。

在包com.dj.ssh.action中建立LoginAction,继承BaseAction,作为简单的struts测试,由于默认执行execute方法,在此直接返回“success”。

package com.dj.ssh.action;

import com.dj.ssh.action.base.BaseAction;

public class LoginAction extends BaseAction {

	private static final long serialVersionUID = 7803370514585593518L;
	
	public String execute() throws Exception {
		return "success";
	}

}

5.配置struts。

在src下新建struts.xml,这个是struts的配置文件,只能用这个名字。记得要创建包,继承struts-default,之后再内部创建action。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="login" extends="struts-default">
		<action name="login" class="loginAction">
			<result name="success">
				/WEB-INF/jsp/welcome.jsp
			</result>
		</action>
	</package>
</struts>

6.建立jsp页面。

在/WEB-INF下建立jsp文件夹,在其中建立welcome.jsp。

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  	<head>
    	<title>Welcome</title>
  	</head>
  	<body>
  		Welcome!
  	</body>
</html>

7.配置spring_context。

在src下新建spring.xml作为spring的配置,这里的名字可以自己取。

<?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-2.5.xsd">
	<bean id="loginAction" class="com.dj.ssh.action.LoginAction"/>
		
</beans>

8.配置spring监听器

打开web.xml,添加spring的配置和listener。

<?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">
<!-- spring 配置文件的位置 -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:spring.xml</param-value>
</context-param>
<!-- spring监听器 -->
<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>

<!-- 配置struts2核心过滤器 -->
<filter>
	<filter-name>ssh</filter-name>
	<filter-class>
		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	</filter-class>
</filter>
<!-- 过滤器映射 -->
<filter-mapping>
	<filter-name>ssh</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

在浏览器中输入http://localhost/SSH/login,则会显示welcome网页。

9.建立数据库和数据表。

这里采用mysql,其他数据库也可以,不同的数据库连接驱动和url不同,jar包也可能不同。

在mysql中建立test数据库,创建t_user表,包括t_id,t_name和t_password三个属性列。插入一条数据。

10.创建持久层实体类。

创建包com.dj.ssh.pojo,创建User类,添加3个私有成员,对应数据表中3个属性,并一定要添加set和get方法。

package com.dj.ssh.pojo;

import java.io.Serializable;

public class User implements Serializable{

	private static final long serialVersionUID = 6120793500259112385L;
	private Integer id;
	private String username;
	private String password;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	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;
	}
	
}

11.添加映射文件。

在 com.dj.ssh.pojo包下新建User.hbm.xml,作为User与数据表的映射文件。

<?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.dj.ssh.pojo">
	<class name="User" table="t_user">
		<id name="id" type="integer">
			<column name="t_id"/>
			<generator class="identity"/>			
		</id>
		<property name="username" type="string">
			<column name="t_name"/>
		</property>
		<property name="password" type="string">
			<column name="t_password"/>
		</property>
	</class>
</hibernate-mapping>

添加包名是为了下面class的name属性可以直接使用类名,不用带着包名。generator属性为主键生成机制,常用的有3种(native,identity和sequence忘了),mysql使用identity,oracle只用sequence,如果不知道,可以使用native(根据数据库的默认设定而定)。

注意类型为小写,是hibernate类型。

12.配置spring,添加hibernate支持。

   

<?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-2.5.xsd">
	
	<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://localhost:3306/test"/>
		<property name="username" value="root" />
		<property name="password" value="root"/>
	</bean>
	<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="myDataSource"/>
		<property name="mappingResources">
			<list>
				<value>com/dj/ssh/pojo/User.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
			</props>
		</property>
	</bean>
	
	<bean id="loginAction" class="com.dj.ssh.action.LoginAction"/>
		
</beans>

13.重新写LoginAction,加入数据库信息验证。这里采用分层机制,pojo为持久层,dao为模型层,service控制业务。

采用逆序的写法,即从action开始写,需要什么业务就定义出来,然后生成service接口,接着实现接口,用相同的方法生成DAO层。

LoginAction如下:


 

package com.dj.ssh.action;

import com.dj.ssh.action.base.BaseAction;
import com.dj.ssh.service.UserService;

public class LoginAction extends BaseAction {

	private static final long serialVersionUID = 7803370514585593518L;
	private UserService userService;
	private String username;
	private String password;
	
	public String execute() throws Exception {
		if(userService.login(username,password))
			return "success";
		return "error";
	}

	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;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

}

这里有两个私有成员是为了接收用户的输入进而验证,一定要定义get和set方法,还有一个service成员,只有set方法,是需要建立的,其中有一个login方法,用来判断用户名和密码是否正确。生成UserService接口:

package com.dj.ssh.service;

public interface UserService {

	public boolean login(String username, String password);

}


实现接口:

package com.dj.ssh.service.impl;

import com.dj.ssh.dao.UserDAO;
import com.dj.ssh.pojo.User;
import com.dj.ssh.service.UserService;

public class UserServiceImpl implements UserService {

	private UserDAO userDAO;
	public boolean login(String username, String password) {
		User user =userDAO.findUserByName(username);
		if(user!=null)
			if(password.equals(user.getPassword()))
				return true;
		return false;
	}
	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}

}


同理,生成UserDAO接口:

package com.dj.ssh.dao;

import com.dj.ssh.pojo.User;

public interface UserDAO {

	public User findUserByName(String username);

}

实现接口:

注意这里要结成hibernate的DAO支持,即HibernateDaoSupport类。

package com.dj.ssh.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.dj.ssh.dao.UserDAO;
import com.dj.ssh.pojo.User;

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {

	public User findUserByName(String username) {
		List<User> list;
		String hql="from User u where u.username=?";
		list=this.getHibernateTemplate().find(hql, username);
		if(list!=null&&list.size()>0)
			return list.get(0);
		return null;
	}

}

14.添加loginform.jsp页面,供用户登录。

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  	<head>
    	<title>Login_Form</title>
  	</head>
  	<body>
  		<form action="login" method="post">
  			Username:<input type="text" name="username"/><br/>
  			Password:<input type="password" name="password"/><br/>
  			<input type="submit" value="Submit"/> 
  		</form>
  	</body>
</html>

表单提交数据,使用login这个action进行处理。

15.重写struts配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<constant name="struts.objectFactory" value="spring" />
	<package name="login" extends="struts-default">
		<action name="loginform">
			<result name="success">
				/WEB-INF/jsp/login_form.jsp
			</result>
		</action>
		<action name="login" class="loginAction">
			<result name="success">
				/WEB-INF/jsp/welcome.jsp
			</result>
			<result name="error" type="redirect">
				loginform
			</result>
		</action>
	</package>
</struts>

用户调用loginform进入登录页面,如果登录成功则进入welcome页面,如果失败返回登录页面。redirect为重定向。

16重写welcome.jsp页面,使用struts标签显示后天数据。

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  	<head>
    	<title>Welcome</title>
  	</head>
  	<body>
  		Welcome!<s:property value="username"/>
  	</body>
</html>

在浏览器中输入http://localhost/SSH/loginform会显示登录页面,如果成功会显示welcome+UserName。失败则会继续要求登录。

 

至此,一个基本的ssh架构已经搭建完成,这个架构的强大功能还需要自己去不断发现。

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值