手动编码搭建ssh框架的步骤
本文介绍如何手动编码搭建此框架。我的环境为jdk1.7.0,Java EE 6 Libraries,myeclipse 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">
- filter>
- filter-name>sshfilter-name>
- filter-class>
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- filter-class>
- filter>
- filter-mapping>
- filter-name>sshfilter-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
session; - public void setSession(Map
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;
- }
- }
5.编写测试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";
- }
- }
6.配置struts。
在src下新建struts.xml,这个是struts的配置文件,只能用这个名字。记得要创建包,继承struts-default,之后再内部创建action。
- xml version="1.0" encoding="UTF-8"?>
- nbsp;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>
7.建立jsp页面。
在/WEB-INF下建立jsp文件夹,在其中建立welcome.jsp。
- %@ page language="java" pageEncoding="UTF-8"%>
- nbsp;HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- html>
- head>
- title>Welcometitle>
- head>
- body>
- Welcome!
- body>
- html>
8.配置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>
9.配置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">
- context-param>
- param-name>contextConfigLocationparam-name>
- param-value>classpath:spring.xmlparam-value>
- context-param>
- listener>
- listener-class>
- org.springframework.web.context.ContextLoaderListener
- listener-class>
- listener>
- filter>
- filter-name>sshfilter-name>
- filter-class>
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- filter-class>
- filter>
- filter-mapping>
- filter-name>sshfilter-name>
- url-pattern>/*url-pattern>
- filter-mapping>
- web-app>
在浏览器中输入http://localhost/SSH/login,则会显示welcome网页。
10.建立数据库和数据表。
这里采用mysql,其他数据库也可以,不同的数据库连接驱动和url不同,jar包也可能不同。
在mysql中建立test数据库,创建t_user表,包括t_id,t_name和t_password三个属性列。插入一条数据。
11.创建持久层实体类。
创建包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;
- }
- }
12.添加映射文件。
在 com.dj.ssh.pojo包下新建User.hbm.xml,作为User与数据表的映射文件。
- xml version="1.0" encoding="UTF-8"?>
- nbsp;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类型。
13.配置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.xmlvalue>
- list>
- property>
- property name="hibernateProperties">
- props>
- prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialectprop>
- prop key="hibernate.show_sql">trueprop>
- prop key="hibernate.format_sql">trueprop>
- props>
- property>
- bean>
- bean id="loginAction" class="com.dj.ssh.action.LoginAction"/>
- beans>
14.重新写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
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;
- }
- }
15.添加loginform.jsp页面,供用户登录。
- %@ page language="java" pageEncoding="UTF-8"%>
- nbsp;HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- html>
- head>
- title>Login_Formtitle>
- 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进行处理。
16.重写struts配置文件
- xml version="1.0" encoding="UTF-8"?>
- nbsp;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为重定向。
17.重写welcome.jsp页面,使用struts标签显示后天数据。
-
%@ page language="java" pageEncoding="UTF-8"%>
- %@ taglib uri="/struts-tags" prefix="s" %>
- nbsp;HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- html>
- head>
- title>Welcometitle>
- head>
- body>
- Welcome!s:property value="username"/>
- body>
- html>
在浏览器中输入相关链接会显示登录页面,如果成功会显示welcome+UserName。失败则会继续要求登录。
至此,一个基本的ssh架构已经搭建完成,这个架构的强大功能还需要自己去不断发现。
上述手动编码搭建ssh框架的步骤知识点,爱站技术频道小编给大家说到这里就结束了,看完后有哪些地方需要小编详细解答的,可以来私聊处理,本站里面有各种技术文章供大家翻阅。
上一篇:安装CentOS有哪些需要注意
下一篇:vsftpd服务器安装