参考文档:http://blog.csdn.net/yangxueyong/article/details/6130065  Tomcat部署Web应用方法总结

           

一、架构介绍

在介绍这个之前,首先介绍下什么是ORM框架?

对象关系模型。或者称为映射。ORM主要是使得数据库中的关系数据映射为程序中的对象的桥梁。

MyBatis是另外一款优秀的ORM框架,前身为iBATIS。

整个架构图:

上面这个图讲的是,如何通过mybatis实现orm,即对象与关系模型之间的转换。

我们是通过java里面的接口类与.xml里面的配置文件实现的。

如下面的文件所示:

依据从上到下的顺序各个文件内容如下:

1)

package zhuxuekui.data;
 
import java.util.List;
 
import zhuxuekui.model.Poi;
 
public interface PoiMapper {
   
    /*
     * 存储poi信息
     */
    void insertPoi(Poi  poi);
    
    /*
     * 获取Poi列表,如果username为空则返回所有的poi信息
     */
    List<Poi> getPoi(String username);
    
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

2)

package zhuxuekui.data;
 
import zhuxuekui.model.User;
 
public interface UserMapper {
  
    User  selectUser(String username);
    
    
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }3)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  <configuration>
        <typeAliases>
            <typeAlias type="zhuxuekui.model.User"  alias="User"/>
            <typeAlias type="zhuxuekui.model.Poi"  alias="Poi"/>
        </typeAliases>
        
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>  //事务管理器
                    <dataSource type="POOLED">
                        <property name="driver" value="com.mysql.jdbc.Driver"/>
                        <property name="url" value="jdbc:mysql://127.0.0.1:3306/Poi?characterEncoding=UTF-8"/>
                        <property name="username" value="root"/>
                        <property name="passward" value="123456"/>
                    </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="zhuxuekui/data/UserMapper.xml"/>
            <mapper resource="zhuxuekui/data/PoiMapper.xml"/>
        </mappers>
</configuration>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

自动化配置,实现ORM转换。通过mybatis实现java与db之间的连接。

4)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="zhuxuekui.data.PoiMapper">
 
    <resultMap id="PoiItemMap" type="Poi">
        <result property="id" column="id" />
        <result property="name" column="name" />
        <result property="city" column="city" />
        <result property="address" column="address" />
        <result property="phoneNum" column="phone_num" />
        <result property="lat" column="lat" />
        <result property="lon" column="lon" />
        <result property="username" column="username" />
    </resultMap>
 
 
    <select id="getPoi" resultMap="PoiItemMap">
        select * from poi
        <if test="value != null">
            where username like #{value}
        </if>
    </select>
 
    <insert id="insertPoi" parameterType="Poi">
        insert into poi
        (id,name,city,address,phone_num,lat,lon,username)
        values
        (#{id},#{name},#{city},#{address},#{phoneNum},#{lat},#{lon},#{username})
    </insert>
</mapper>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

5)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper  namespace="zhuxuekui.data.UserMapper">
        <resultMap id="userResultMap"  type="User">
            <result property="name" column="username"></result>
            <result property="email" column="email"></result>
        </resultMap>        
        
        <select id="selectUser" parameterType="String"
            resultMap="userResultMap">
            select 
            *
            from user where username = #{username}
        </select>
        
    </mapper>
    
 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

整体结构体如下:

 

 

二、程序讲解

1、在程序开发当中,我们需要使用相对路径,绝对路径不利于他人使用。

比如下方的packages包,我们需要建立一个packages文件夹,然后将这些jar直接拖到这个文件夹下面。

然后,右击 构建路径---配置构建路径---添加JAR。如图所示,找到我们刚刚添加的jar包。添加引用。注:这就是相对路径,提高了重用性。

2、看下面的程序

package zhuxuekui.model;

public class Poi {

    public String id;

    public String name;

    public String city;

    public String address;

    public String phoneNum;

    public long lat;

    public long lon;

    public String username;

}

没有用private,所以我们可以不用get与set方法。

这里只有一个public修饰,只是为了测试,所以不用get与set方法了。

3、如何通过配置文件链接java与mysql。

数据是怎么来的,这是我们需要关心的。

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

通过id以及一些sql语句实现。xml(配置文件)里面的id与java里面的接口类里面的函数是一一对应的。

然后xml配置里面也有一些个sql语句与mysql相连接。

4、configuration.xml文件介绍

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  <configuration>
        <typeAliases>  //起别名,相当于C++里面的typedef。
            <typeAlias type="zhuxuekui.model.User"  alias="User"/>   //输出的
            <typeAlias type="zhuxuekui.model.Poi"  alias="Poi"/>
        </typeAliases>
        //java 开发环境,  开发,测试,预上线,上线。
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>   //事物,业务处理器
                    <dataSource type="POOLED">  //合并的

<property name="driver" value="com.mysql.jdbc.Driver"/>

下面URL这句话告诉我们,通过什么方式,走什么协议,打开在哪的,哪一个数据库,他的编码是什么

通过jdbc方式,走mysql的数据访问协议,打开本地的3306端口的Poi数据库,以utf8编码方式打开。
                        <property name="url" value="jdbc:mysql://127.0.0.1:3306/Poi?characterEncoding=UTF-8"/>
                        <property name="username" value="root"/>数据库的
                        <property name="passward" value="123456"/>
                    </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="zhuxuekui/data/UserMapper.xml"/>     //路径
            <mapper resource="zhuxuekui/data/PoiMapper.xml"/>
        </mappers>
</configuration>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

 

5、如何把java代码挂到tomcat上去

1)、更改此目录下的E:\Program Files\Apache Software Foundation\Tomcat 7.0\conf  中的service.xml文件,添加一行 

      <Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="E:/Users/zhuxuekui/workspace/servletDemo/webapp"
reloadable="true"/>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

docBase就是加载你的路径的,可以是相对路径,也可以是绝对路径。这个是写死的,后面会自动加载后面的WEB-INF后面的web.xml文件里面的内容。

注意两点:必须要重启电脑,路径必须要写对。是/。不是其他什么。

 

方法如下:

让tomcat只运行conf/server.xml中指定的web应用

可以有以下2种办法:

实现一:

1)将要部署的WEB应用放在webapps以外的路径, 并在server.xml相应的Context 中的docBase 指定.

2)删除webapps中的所有文件夹, 以及conf/catalina/localhost下所有xml文件. 
注: webapps是server.xml中的Host 元素的appBase 属性的值.

实现二:

修改server.xml中Host 元素的属性, 添加或修改: deployXML ="false" deployOnStartup ="false" autoDeploy="false"

含义:

deployXML ="false" : 不部署conf/catalina/localhost下的xml相应的WEB应用

deployOnStartup ="false" :tomcat启动时, 不部署webapps下的所有web应用

     autoDeploy ="false"  :避免tomcat在扫描改动时, 再次把webapps下的web应用给部署进来.

注:

Tomcat中webapps目录下不能直接存放网页格式的文件,否则无法访问到该文件,必须有子目录才能访问该网页文件。

例如:我们直接将index.html放在webapps目录中,通过浏览器http://localhost:8080/index.html 是无法访问到index.html的。而必须要webapps/petweb/index.html才可以通过http://localhost:8080/petweb/index.html 访问到index.html页面。

2)、在项目中建立指定的目录,如下所示。

这样一来,我们编译完之后,不是在bin之下了,可以删掉bin(也可以不删)。建立web.xml文件,它是在WEB-INF下面。

web.xml就是tomcat与servlet的一个桥梁。

其内容为:

   1:  <?xml version="1.0" encoding="UTF-8"?>
   2:  <web-app>
   3:      <servlet>
   4:          <servlet-name>login</servlet-name>   //给servlet起一个名字
   5:          <servlet-class>zhuxuekui.service.SrvUser</servlet-class>//执行的是哪一个类
   6:          <load-on-startup>1</load-on-startup> //当tomcat运行时候就预加载
   7:      </servlet>
   8:   
   9:      <servlet-mapping>
  10:          <servlet-name>login</servlet-name> 
  11:          <url-pattern>/login</url-pattern>   //url的表达式,访问login时候执行这个表达式
  12:      </servlet-mapping>
  13:  </web-app>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

写完这个之后,我们要写zhuxuekui.service.SrvUser.java.这个就是我们自己写的一个servlet。

什么是servlet?

     其实他就是一个壳子,它是java提供的webservice开发的一种接口。我们如果想要再tomcat上门挂一个服务的话,只需要实现类似于httpservlet这么一个接口即可。然后通过web.xml配置文件将我们所写的servlet的实例挂载到tomcat上面去。servlet里面有很多的方法,比如有service方法、doget方法、dopost方法等。

package zhuxuekui.service;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.ibatis.session.SqlSession;
 
import zhuxuekui.data.UserMapper;
import zhuxuekui.model.User;
 
/**
 * 最简单的Servlet
 * 
 */
public class SrvUser extends HttpServlet {
 
    private static final long serialVersionUID = 1L;
 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        res.getWriter().println("Hello World||||!");
        super.service(req, res);
    }
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
//         String resource = "/com/arthur/data/Configuration.xml";
//         Reader reader;
//         try {
//         reader = Resources.getResourceAsReader(resource);
//         Constants.SQL_FACTORY = new SqlSessionFactoryBuilder()
//         .build(reader);
//         } catch (Exception e) {
//         e.printStackTrace();
//         e.printStackTrace(res.getWriter());
//         }
    }
 
//    @Override
//    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
//            throws ServletException, IOException {
//        String userName = req.getParameter("username");
//        SqlSession session = Constants.SQLFactory().openSession();
//        UserMapper mapper = session.getMapper(UserMapper.class);
//        User user = mapper.selectUser(userName);
//        if (user != null) {
//            resp.setStatus(200);
//        } else {
//            resp.sendError(345, "用户名密码不正确!");
//        }
//    }
 
}
 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

弄完这个后,我们就需要编译了,项目---清理,然后会在我们建立的webapp下面生成.class等文件。

弄完这些后,我们就需要在浏览器中访问,界面如下:

 

最新文章

  1. saltstack初探
  2. ASP.NET Session 详解
  3. oracle 11g 新特性UTL_TCP、UTL_HTTP 和 UTL_SMTP程序包发邮件
  4. 实现简易而强大的游戏AI——FSM,有限状态机
  5. FFmpeg-20160418-snapshot-bin
  6. 20169212《Linux内核原理与分析》第一周作业
  7. Linux 相关基础笔记
  8. iOS7 下去掉状态栏(全屏)
  9. Binder相关
  10. IIS、SQL SERVER和VS的安装顺序
  11. jquery实现表格行的动态增加和删除
  12. 移动应用产品开发-android开发(二)
  13. hibernate的get、load的方法的区别,IllegalArgument异常
  14. Swift - 设置网格UICollectionView的单元格间距
  15. 画廊视图(Gallery)的功能和用法
  16. 关于opencv的cv2.WINDOW_一类
  17. 截取 还没有读的txt章节 生成新的文件
  18. el表达式(一)
  19. hdu 2191 悼念512汶川大地震遇难同胞 【多重背包】(模板题)
  20. Python人工智能之图片识别,Python3一行代码实现图片文字识别

热门文章

  1. SQL 与或运算
  2. 【bzoj4260】Codechef REBXOR Trie树
  3. 【Luogu】P1486郁闷的出纳员(Splay)
  4. CSS:IE,Chrome,Firefox兼容性和CSS Hack(转载)
  5. HDU-1534 Schedule Problem
  6. log4j配置输出到数据库+自定义字段
  7. spring的事务传播与隔离
  8. cf524C The Art of Dealing with ATM
  9. 马士兵hadoop第三课:java开发hdfs(转)
  10. 【BZOJ1018】堵塞的交通traffic(线段树,网格图,连通性)