Eclipse基于注解方式搭建ssh框架
来源:互联网 发布:域名在哪里续费 编辑:程序博客网 时间:2024/05/16 07:39
第一次使用博客,不知道怎么样。之前想到上班两年多但是框架一直使用的是别人的。从来没有自己搭建一个实现增删改查。自己搭建一个测试下。
里面一些配置有的我也只知道怎么用,什么作用,不太清楚其原理(等下会把写的小例子放在csdn下可以下载看看)
目录结构:
注:使用的是mysql数据库,先新建一张用户表
DROP TABLE IF EXISTS `wxq_user`;CREATE TABLE `wxq_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(16) NOT NULL, `password` varchar(16) NOT NULL, `gender` varchar(16) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
第一步:在Eclipse中创建一个Dynamic WebProject,本文项目名称为SSHwxq。
第二步: 把以前项目的lib下的jar包都考到这个项目中
第三步:在WEB-INF下新建一个web.xml(放着后面在说内容具体怎么写)
第四步:新建实体类,因为每张表都有ID,所以我们单独新建一个实体类只放ID字段,其他实体类继承这个ID实体
package com.wxq.ssh.entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.MappedSuperclass;/** * 含int型主键的实体标记接口 * @author wxq */@SuppressWarnings("serial")@MappedSuperclasspublic class IDEntity implements java.io.Serializable{@Id @GeneratedValue private Integer id;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}}
第五步:新建用户实体类
package com.wxq.ssh.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Table;import com.wxq.ssh.entity.IDEntity;@SuppressWarnings("serial")@Entity@Table(name = "wxq_user")public class Users extends IDEntity {@Column(name = "userName")private String userName;//用户名 @Column(name = "password")private String password;//密码@Column(name = "gender")private String gender;//性别//get set 方法。。。此处省略}
@Entity 是实体
@Table(name = "wxq_user") 对应数据库中的哪张表
@Column(name = "userName")对应这张表中的哪个字段
第六步:新建数据库访问层,接口及实现类
1、dao接口中目前只有一个方法
package com.wxq.ssh.dao;import com.wxq.ssh.entity.Users;/** * 用户接口 * @author wxq */public interface UserDao { public Users regUser(Users user); }2、接口的实现类
package com.wxq.ssh.dao.impl;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;import com.wxq.ssh.dao.UserDao;import com.wxq.ssh.entity.Users;/** * 用户接口实现类 * @author wxq */@Repository@Transactionalpublic class UserDaoImpl implements UserDao{@PersistenceContextprivate EntityManager em; @Overridepublic Users regUser(Users o) {try {o = em.merge(o);} catch (Exception e) {e.printStackTrace();}return o;}}
@Repository标注是数据库访问层
@Transactional标注事务管理器
@PersistenceContext
private EntityManagerem;
是注入实体类管理器,执行持久化操作的。相当于hibernate中的session可以进行merge、createQuery、createNativeQuery、等其他操作。
第七步:新建业务层,接口及实现类1、新建biz接口
package com.wxq.ssh.biz;import com.wxq.ssh.entity.Users;/** * 用户业务层接口 * @author wxq */public interface UserBiz { public Users regUser(Users user); }2、接口的实现类
package com.wxq.ssh.biz.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.wxq.ssh.biz.UserBiz;import com.wxq.ssh.dao.UserDao;import com.wxq.ssh.entity.Users;/** * 用户业务层接口实现类 * @author wxq */@Service@Transactionalpublic class UserBizImpl implements UserBiz {@Autowiredprivate UserDao userDaoimpl;@Overridepublic Users regUser(Users user) {return userDaoimpl.regUser(user);}}
@Service用于标注业务层组件
@Transactional标注事务管理器
@Autowired
private UserDaouserDaoimpl;
不需要再写setDao方法就可以通过接口调用Dao了,至于配置文件会在下面展示第八步:新建action类
package com.wxq.ssh.action;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import org.json.JSONException;import org.json.JSONObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.opensymphony.xwork2.ActionSupport;import com.wxq.ssh.biz.UserBiz;import com.wxq.ssh.entity.Users;import com.wxq.ssh.util.ResponseUtil;@SuppressWarnings("serial")@Component("registerAction")public class RegisterAction extends ActionSupport {@Autowiredprivate UserBiz userBizImpl;private Users user; public Users getUser() {return user;}public void setUser(Users user) {this.user = user;}/** * 添加用户方法 */public void adduser() { JSONObject object = new JSONObject();HttpServletResponse response = ServletActionContext.getResponse();try{user = userBizImpl.regUser(user);if(user.getId() != null){if(user.getId() > 0){object.put("state", "success");}else{object.put("state", "error");}}else{object.put("state", "error");}}catch(Exception ex){try {object.put("state", "error");} catch (JSONException e) {e.printStackTrace();}ex.printStackTrace();}ResponseUtil.renderJson(response, object.toString()); }}
@Component("registerAction")注解,在struts.xml中原本<action>的class不再写类的全名,而写@Component("registerAction")的registerAction。
@Autowired<pre name="code" class="java">private UserBiz userBizImpl;就像之前的dao一样用注解可以不用写getset 方法一样可一调到数据
到现在java文件都写完了,就剩下配置文件了
第一步:新建resources文件夹(跟src文件同级目录)
第二步:新建一个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><!-- spring 托管 --> <constant name="struts.objectFactory" value="spring" /> <!-- 表示指定了资源文件的放置在classes目录下,基本名是ApplicationResources, --> <constant name="struts.custom.i18n.resources" value="ApplicationResources"/> <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <!-- 设置url请求后缀 --> <constant name="struts.action.extension" value="do" /> <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --><constant name="struts.devMode" value="true"/><!-- 将一个配置文件分解成多个配置文件,那么我们必须在struts.xml中包含其他配置文件。 --> <include file="struts/struts-user.xml"/> <package name="/users" extends="struts-default" namespace="/users"> <action name="adduser" class="registerAction" method="adduser"> <result name="success">/WEB-INF/pages/common.jsp</result> </action> </package> <package name="base-default" extends="struts-default" abstract="true"><interceptors><interceptor-stack name="defaultStack"><interceptor-ref name="exception"/><interceptor-ref name="alias"/><interceptor-ref name="servletConfig"/><interceptor-ref name="prepare"/><interceptor-ref name="i18n"/><interceptor-ref name="chain"/><interceptor-ref name="debugging"/><interceptor-ref name="profiling"/><interceptor-ref name="scopedModelDriven"/><interceptor-ref name="modelDriven"/><interceptor-ref name="fileUpload"/><interceptor-ref name="checkbox"/><interceptor-ref name="staticParams"/><interceptor-ref name="params"><param name="excludeParams">dojo\..*</param></interceptor-ref><interceptor-ref name="conversionError"/><interceptor-ref name="validation"><param name="excludeMethods">input,back,cancel,browse</param><param name="validateAnnotatedMethodOnly">true</param></interceptor-ref><interceptor-ref name="workflow"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="defaultStack"/></package></struts>
Constant用来配置常量
而图片部分则是配置进入哪个action中的哪个方法红色标注的地方class即是上面写action中@Component("registerAction")注解里的名字 而method则是上面action中方法的名字
注:如果因为项目大可以把struts.xml分开写 用include导入即可例如:
把上面图片内容写在新建一个struts文件夹,在新建一个struts-user.xml即可第三步:在resources的文件夹下面新建一个数据库连接的文件jdbc-mysql.properties:
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProviderhibernate.connection.autocommit=falsehibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.generate_statistics=falsehibernate.show_sql=falsejdbc.driverClassName=com.mysql.jdbc.Driverjdbc.password=rootwxqjdbc.url=jdbc:mysql://localhost:3306/wxqcs?useUnicode=true&characterEncoding=utf8jdbc.username=rootjpa.database=MYSQLjpa.databasePlatform=oracle.toplink.essentials.platform.database.MySQL4Platformjpa.showSql=false
第四步:在resources文件夹下面新建一个applicationContext.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" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:property-placeholder location="classpath:jdbc-mysql.properties"/> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}"/> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource"> <property name="persistenceUnitName" value="wxqdb"/> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="${jpa.database}" p:showSql="${jpa.showSql}" p:generateDdl="true"/> </property> </bean> <!-- 通过这个定义加上最后一句 在 Dao里面通过@Transactional注解就可以引入事物管理功能。 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" > <property name="entityManagerFactory" ref="entityManagerFactory"/> <property name="dataSource" ref="dataSource"/> </bean> <!-- 建立视图内拦截器来解决JPA中访问延迟加载属性时产生的无会话异常 --> <!-- LazyInitializationException: could not initialize proxy no session --> <!-- 此拦截器会注入到servlet配置中的DefaultAnnotationHandlerMapping中 --> <bean name="openEntityManagerInViewInterceptor" class="org.springframework.orm.jpa.support.SharedEntityManagerBean"> <property name="entityManagerFactory"> <ref bean="entityManagerFactory" /> </property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <context:component-scan base-package="com.wxq" /> <context:component-scan base-package="com.wxq.ssh.dao" /> <context:component-scan base-package="org.texturemedia" /> <!-- 对@Transactional这个注解进行的驱动,这是基于注解的方式使用事务配置声明 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" mode="proxy"/></beans>
注:<context:property-placeholder location="classpath:jdbc-mysql.properties"/> 这句话的意思是调用上面写的数据库连接文件
<property name="persistenceUnitName" value="wxqdb"/> 这句中的wxqdb 是后面的persistence.xml文件中的name名称
JPA规范要求在类路径的META-INF目录下放置persistence.xml, 文件的名称是固定的,配置模板如下:
第五步: 在resources文件夹下新建META-INF文件夹,在META-INF文件夹下新建persistence.xml文件
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="wxqdb" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.wxq.ssh.entity.Users</class> <properties> <property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory" /> <property name="net.sf.ehcache.configurationResourceName" value="/ehcache.xml" /><property name="hibernate.cache.use_second_level_cache" value="true" /><property name="hibernate.cache.use_structured_entries" value="true" /><property name="hibernate.cache.use_query_cache" value="true" /><property name="hibernate.hbm2ddl.auto" value="update" /><property name="hibernate.generate_statistics" value="false" /><property name="hibernate.jdbc.fetch_size" value="64" /><property name="hibernate.jdbc.batch_size" value="32" /><property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" /><property name="hibernate.format_sql" value="false" /><property name="javax.persistence.validation.group.pre-persist" value="javax.validation.groups.Default" /> <property name="javax.persistence.validation.group.pre-update" value="javax.validation.groups.Default" /></properties> </persistence-unit></persistence>
这个文件中有引用/ehcache.xml 这个文件所以
第六步:在resources文件夹下新建ehcache.xml文件
<ehcache> <diskStore path="cache"/><defaultCachemaxElementsInMemory="100"eternal="false"overflowToDisk="false"timeToIdleSeconds="600"timeToLiveSeconds="1800"diskPersistent="false"memoryStoreEvictionPolicy="LRU"/></ehcache>
第七步: 现在打开之前新建的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" xmlns:web="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>SSHwxq</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> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <session-config> <session-timeout>120</session-timeout> </session-config> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <context-param><param-name>webAppRootKey</param-name><param-value>sshwxq.root</param-value></context-param> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <error-page><error-code>404</error-code><location>/error.jsp</location></error-page><error-page><error-code>500</error-code><location>/error.jsp</location></error-page></web-app>
到这一步的时候配置文件基本已经好了,可以把项目加载在tomcat中启动一下试试
我自己试了下启动没有报错
现在开始编辑页面
第一步:新建一个Register.jsp页面
1、添加使用ajax添加需要先导入js库 jquery-1.8.2.min.js
<%@ 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>User Register Page</title> <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-1.8.2.min.js"></script> </head> <body> <form id="addUserForm"> <p> 姓名:<input name="user.userName" type="text" /></p> <p> 密码:<input name="user.password" type="password" /></p> <p> 性别:<input name="user.gender" type="text" /></p> <input type="button" name="Submit" onclick="adduser();" value="提 交" /> <input type="reset" name="reset" id="resetss" value="取 消" /> </form> <script type="text/javascript"> function adduser(){ $.ajax({ url : "<%=request.getContextPath()%>/users/adduser.do", type : 'POST', cache : false, data : $("#addUserForm").serialize(), dataType : "json", success : function(data) { if(data["state"] == "success"){ alert("添加成功"); }else{ alert("服务器内部错误!"); } } }); } </script> </body> </html>
然后运行。
完成,数据添加成功!
- Eclipse基于注解方式搭建ssh框架
- 搭建基于注解方式的SSH项目框架
- 搭建基于注解方式的SSH项目框架
- 基于全注解方式的SSH框架
- 注解方式实现ssh框架搭建
- 主题:基于全注解方式的SSH基础框架
- 基于MyEclipse8.5注解方式整合SSH框架
- 基于全注解方式的SSH基础框架
- 基于全注解方式的SSH基础框架
- 基于全注解方式的SSH基础框架
- SSH框架搭建流程(注解的方式创建Bean)
- Eclipse搭建SSH框架
- eclipse搭建ssh框架
- Eclipse搭建SSH框架
- eclipse搭建SSH框架
- 1、Spring MVC框架搭建——基于注解方式
- ssh框架搭建(注解)
- Java之基于Eclipse搭建SSH框架(上)
- iOS开发多线程篇—GCD介绍
- Android学习计划
- Python之学习笔记(wx:界面美化)
- leetcode--Minimum Depth of Binary Tree
- 疯狂Java学习笔记(74)------------线程池
- Eclipse基于注解方式搭建ssh框架
- OSA实践——WCF服务异步调用
- Oracle的锁机制
- linux内核中的__read_mostly变量
- binder
- 谈SEH( structured exception handling )异常处理
- Unity3D 项目用 git 做版本控制
- jquery-ui 里面的datepicker插件的弹不出来
- smali学习(一)