在Eclipse中使用Struts和Hibernate框架搭建Maven Web项目
前言
学习使用Java还是2012年的事情,刚开始学习的Java的时候,使用的是MyEclipse工具和SSH框架。初学者适合使用MyEclipse,因为他将struts、Spring和Hibernate等框架集成在IDE中,可以直接通过添加Capacities将这些框架集成到Web Project中,相应的Jar包也会自动添加到lib目录下,开发过程中还是需要手动添加一些jar包。再后来开始接触Maven,在Eclipse下搭建Maven Web项目。在后来就转C#项目开发了,项目做了快两年的时间,到最近才开始重新拾起这些尘封很久的东西。虽然之前做过Java Web项目,但是最近重温的时候才发现,要始终保持一颗Coding的心,不然真是的是寸步难行啊。这篇文章没有什么技术含量,主要是为后来者提供入门的帮助。
一、工具准备
必备工具:JDK(jdk1.6.0_10)、Eclipse、Maven(apache-maven-3.0.5)。
开发过程中,使用Jetty来替代Tomcat来发布项目,在项目完成之后,可以直接部署在Tomcat中。JDK、Eclipse的安装和配置在Baidu上可以找到很多,这里不再赘述。Maven插件的安装教程网上也有,在Maven依赖库的使用上建议使用自定义路径的本地Repository,只需要配置一下settings.xml文件,如<localRepository>D:/Program Files/Java/Maven Local Repository/repository</localRepository>。
二、搭建Maven Web项目
New Maven Project,在选择项目 Archetype(原型)的时候,GroupID选择org.apach.maven.archetype,ArtifactID选择maven-archetype-webapp,接着就是设置项目的GroupID、ArtifactID,其中ArtifactID就是项目名称。
新建好的项目结构如下:
如果项目结构不一样,是因为选择的Perspective的问题,要选择Java Perspective。在src/main目录下添加Source Folder:src/main/java。
1 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="pp_monitor" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>MavenSSH2</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>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping> </web-app>
web.xml
主要是配置过滤器,将struts融入到项目中,表示对应当前应用里面的所有请求都使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter进行处理。
2 配置pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>liu.test.maven</groupId>
<artifactId>MavenSSH2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MavenSSH2</name>
<url>http://maven.apache.org</url>
<dependencies> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts-taglib</artifactId>
<version>1.3.10</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.7</version>
</dependency> <!-- 必备依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.14</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.2.3.1</version>
</dependency>
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- 使用hbm映射文件必备 -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<!-- 使用hibernate必备 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<!-- SQL Server驱动 -->
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.2.4</version>
</dependency>
<!-- 必备依赖 -->
</dependencies> <build>
<finalName>MavenSSH2</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<outputDirectory>target/${project.name}/WEB-INF/classes</outputDirectory> <plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.24</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextPath>/</contextPath>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!--
<resources>
<resource> <targetPath>${basedir}/target/${project.name}/WEB-INF/classes</targetPath>
<filtering>false</filtering>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<excludes>
<exclude></exclude>
</excludes>
</resource>
</resources>
-->
</build>
</project>
pom.xml
pom中配置了使用Struts和Hibernate框架必备的依赖,以及用于开发测试的Jetty服务器plugin。
3、配置Hibernate配置文件hibernate.cfg.xml
在src/main/resources下新建XML文件,命名hibernate.cfg.xml。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate.Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 所使用数据库的驱动名称,不同的数据库有不同的驱动名称 -->
<property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<!-- 数据库连接串,数据库服务器IP:127.0.0.1,端口号1433,数据库名称blog -->
<property name="connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433/blog</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property> <!-- Hibernate对应SQL Server的方言。不同数据库有不同的方言 -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <!-- 可以看到hibernate每次操作数据库的时候,在console中打印对应的sql语句,开发的时候设置为true,部署的时候设置为false -->
<property name="show_sql">true</property> <mapping resource="hbm/User.hbm.xml" /> </session-factory> </hibernate-configuration>
hibernate.cfg.xml
4、创建数据表映射文件
这里根据数据库中的表来创建,测试数据库blog中只有T_User一张表,这里只需要新建映射文件User.hbm.xml,这里需要注意一点就是数据库的表名与我们JavaBean实体类名不要一致,否则在发布的时候会报错。hbm文件写起来比较繁琐,可以使用xdoclet工具直接生成。
<?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> <!-- name对应JavaBean类,tabel对应数据库表明 -->
<class name="com.mavenssh.data.User" table="T_User">
<!-- 主键映射 -->
<id name="userID" column="userID" type="int">
<generator class="increment"></generator>
</id> <!-- 其他字段映射 --><!-- 如果实体类中属性名和表字段名一致时,column可指定 -->
<property name="username" column="username" type="string"></property>
<property name="password" column="password" type="string"></property>
</class> </hibernate-mapping>
User.hbm.xml
三、代码
在src/main/java下新建相应的package,截图如下:
其中util包中是用于存放一些工具类,比如HibernateUtil等。
package com.mavenssh.util; import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session; public class HibernateUtil { private static SessionFactory sessionFactory; static
{
try { sessionFactory = new Configuration().configure("/hibernate.cfg.xml")
.buildSessionFactory();
}
catch (Exception e)
{
System.out.printf(e.getMessage());
e.printStackTrace();
}
} public static Session openSession()
{
Session session = sessionFactory.openSession(); return session;
} public static void closeSession(Session session)
{
if(session!=null)
{
session.close();
}
}
}
HibernateUtil
package com.mavenssh.data; public class User { private int userID;
private String username;
private String password; 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;
}
}
User
package com.mavenssh.dao; import com.mavenssh.data.User; public interface UserDAO { public User getUser(User user); public void saveUser(User user);
}
UserDAO
在实例化SessionFactory的时候,因为hibernate.cfg.xml配置文件在resources源文件夹在,因此需要给configure方法指定路径参数"/hibernate.cfg.xml"。
package com.mavenssh.dao.impl; import org.hibernate.Query;
import org.hibernate.Transaction;
import org.hibernate.classic.Session; import com.mavenssh.dao.UserDAO;
import com.mavenssh.data.User;
import com.mavenssh.util.HibernateUtil; public class UserDAOImpl implements UserDAO { public User getUser(User user) { Session session = HibernateUtil.openSession();
Transaction tx = session.beginTransaction();
User user2 = null; try
{
Query query = session.createQuery("from User where username=?");
query.setString(0, user.getUsername());
user2 = (User)query.uniqueResult();
tx.commit();
}
catch (Exception e)
{
if(tx!=null)
{
tx.rollback();
}
}
finally
{
HibernateUtil.closeSession(session);
} return user2;
} public void saveUser(User user)
{
Session session = HibernateUtil.openSession();
Transaction tx = session.beginTransaction(); try
{
session.save(user);
tx.commit();
} catch (Exception e) {
if(tx!=null)
{
tx.rollback();
}
}
finally
{
HibernateUtil.closeSession(session);
}
}
}
UserDAOImpl
UserService是业务层,主要是处理业务逻辑的代码。
package com.mavenssh.service; import com.mavenssh.data.User; public interface UserService { public User getUser(User user); public void saveUser(User user);
}
UserService
package com.mavenssh.service.impl; import com.mavenssh.dao.UserDAO;
import com.mavenssh.dao.impl.UserDAOImpl;
import com.mavenssh.data.User;
import com.mavenssh.service.UserService; public class UserServiceImpl implements UserService { private UserDAO userDAO = new UserDAOImpl(); public UserDAO getUserDAO() {
return userDAO;
} public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
} public User getUser(User user) { return userDAO.getUser(user);
} public void saveUser(User user) { userDAO.saveUser(user);
}
}
UserServiceImpl
LoginAction类继承了ActionSupport,并重写了其execute方法,这个方法对应LoginAction请求是会被执行,如果是自定义方法,需要在struts.xml的action Element中指定method Attribute。
package com.mavenssh.action; import java.io.Console; import com.mavenssh.data.User;
import com.mavenssh.service.UserService;
import com.mavenssh.service.impl.UserServiceImpl;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private User user;
private UserService userService = new UserServiceImpl(); public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public UserService getUserService() {
return userService;
} public void setUserService(UserService userService) {
this.userService = userService;
} @Override
public String execute() throws Exception { User user2 = userService.getUser(user); if(user2!=null){ return SUCCESS;
}
else { return "login";
}
}
}
LoginAction
四、页面和struts.xml
index.jsp页面代码如下,使用的struts taglib,要使用struts标签库需要在jsp页面顶部添加<%@ taglib uri="/struts-tags" prefix="s" %>。
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html>
<body style="padding: 200px;margin-left:500px"> <s:form id="loginForm" action="loginAction" class="www_zzjs_net" method="post" namespace="/">
<s:textfield name="user.username" label="UserName" required="required" aria-required="true" placeholder="请输入用户名"></s:textfield>
<s:textfield name="user.password" label="Password" required="required" aria-required="true" placeholder="请输入密码"></s:textfield> <s:submit value="submit" value="登录"></s:submit>
<s:reset value="reset" value="取消"></s:reset>
</s:form> </body>
</html>
index.jsp
在src.main/resources下新建struts.xml文件,主要配置JSP页面请求对应的Action类以及处理方法,以及页面跳转逻辑。
<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <package name="main" extends="struts-default" namespace="/">
<action name="loginAction" class="com.mavenssh.action.LoginAction">
<result name="success">profile.jsp</result>
<result name="login">index.jsp</result>
</action>
<action name="registerAction" class="com.mavenssh.action.RegisterAction">
<result name="success">profile.jsp</result>
</action>
</package> </struts>
struts.xml
五、项目结构
开启Jetty服务器,在浏览器中输入http://localhost:8080/index.jsp
在Eclipse中使用Struts和Hibernate框架搭建Maven Web项目的更多相关文章
- Eclipse 搭建 Maven Web项目
第一步:安装JDK: 第二步:安装Eclipse: 第三步:安装tomcat7: 第四步:安装maven插件: 4.1 下载maven:http://maven.apache.org/download ...
- spring+struts2+hibernate框架搭建(Maven工程)
搭建Spring 1.porm.xml中添加jar包 <!-- spring3 --> <dependency> <groupId>org.springframew ...
- eclipse中tomcat使用add and remove无法发布web项目
继上次启动eclipse中的tomcat报classNotFound的问题后,这次又遇到新问题.就是右键点击tomcat使用add and remove发布web项目至tomcat后,启动tomcat ...
- eclipse中怎么导入git库下载下来的web项目
总的看来是有两种方式: 方式一:可以对已经从版本库下载到本地的项目操作(Maven导入) 你可以通过公司提供的内部的版本库的网址登录版本库,之后在里面下载自己想要的那个版本的代码包,见下图 点击右侧的 ...
- 使用Maven+ssm框架搭建一个web项目
1,前期准备:Eclipse(Mars.2 Release (4.5.2)).jdk1.7.tomcat7.maven3.2.1 2.使用eclipse中的maven新建一个web项目 点击next: ...
- Eclipse搭建maven web项目
最近在做做一个小实验,搭建ssm框架,要求使用maven来统一管理jar包,接下来就看如何建立maven项目,首先必须有要有相应的开发环境:JDK和maven,以及配置tomcat. 开发环境搭建可以 ...
- 如何在Eclipse或者Myeclipse中使用tomcat(配置tomcat,发布web项目)?(图文详解)(很实用)
前期博客 Eclipse里的Java EE视图在哪里?MyEclipse里的Java EE视图在哪里?MyEclipse里的MyEclipse Java Enterprise视图在哪里?(图文详解) ...
- IDEA Maven Web项目 clone到本地导入到Eclipse中,启动服务器的时候会出现这个错误:SEVERE: Exception starting filter [hiddenHttpMethodFilter]
背景(Background): 我将一个IDEA的maven web项目clone到本地,并导入到Eclipse中. I imported a MAVEN WEB project which was ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程
添加支持 我先介绍的是MyEclipse9的自带框架支持搭建过程:(完全的步骤 傻瓜式的学习..~) 首先我们来搭建一个Web项目: 一.Hibernate(数据层)的搭建: 相关描述 Ⅰ.服务器与数 ...
随机推荐
- windows 不能在本地计算机启动SqlServer. 参考特定服务错误代码10048
这一般都是由于Sql Server的端口号被其他应用程序占用导致的,可以使用dos命令或者网络工具查看当前端口的使用情况,看看哪个程序占用了Sql Server的默认端口1433,将这个程序结束就可以 ...
- test20181020 B君的第二题
题意 分析 考场70分 一看就是裸的kmp,直接打上去. #include<cstdlib> #include<cstdio> #include<cmath> #i ...
- Linux中的中断处理
1. Linux中中断除了中断分层之外,还有一种就是中断线程化 存在意义:在Linux中,中断具有最高的优先级.不论在任何时刻,只要产生中断事件,内核将立即执行相应的中断处理程序,等到所有挂起的中断和 ...
- DataTable快速定制之Expression属性表达式
本文旨在讨论使用DataColumn.Expression属性定制列,高手绕过. 这里只介绍两个经典的场景,抛砖引玉其他更多功能待各位读者自己发现吧! 场景一: DataTable里有两个列分别为每种 ...
- cocos2dx 分辨率适配问题
分辨率适配问题好文章: http://www.cocoachina.com/bbs/read.php?tid=201987&page=1&toread=1#tpc http://www ...
- Hive之 hive-1.2.1 + hadoop 2.7.4 集群安装
一. 相关概念 Hive Metastore有三种配置方式,分别是: Embedded Metastore Database (Derby) 内嵌模式Local Metastore Server 本地 ...
- xargs命令学习
1.xargs复制文件 目录下文件结构为: . ├── demo1 │ ├── test.lua │ ├── test.php │ └── test.txt └── demo2 执行命令: find ...
- 灵活运用SMART原则梳理目标
1:立刻行动 执行力是老生常谈了,提高执行力不拖延,源自于对目标的充分理解和超出常人的坚持. 如何深刻理解目标?一方面要有基础的知识.能力积累,另一方面要灵活运用SMART原则从不同维度梳理目标. 2 ...
- 代理Servlet过滤器
Spring Security借助一些列Servlet 过滤器 来提供 各种 安全性功能. 我们只需要在应用中的 web.xml 中配置 一个过滤器. <filter> <filte ...
- Nginx代理配置文件
#user nginx; worker_processes 5; #error_log /var/log/nginx/error.log warn; #pid /var/run/nginx.pid; ...