Servlet入门 - tomcat上手

Posted 编程经验

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet入门 - tomcat上手相关的知识,希望对你有一定的参考价值。

“一个好汉三个帮,一个篱笆三个桩”,Servlet需要web容器的帮助,才能实现web通信。 主流的web容器有Weblogic, Tomcat……; 通常大型项目选择Weblogic( 收费) ,小型项目用Tomcat(免费 )
我们以tomcat为例,学习如何使用web容器。


1.安装

①下载

https://tomcat.apache.org/whichversion.html
​选择tomcat版本

最后一列显示了它支持的Java版本,我们用的是Java8、选择它对应的次新版Tomcat9

点击左侧菜单,进入下载页面(上面是安装程序,下面是源代码)

Servlet入门 - tomcat上手


解压后,配置环境变量:

CATALINA_HOME = {tomcat目录}

PATH = %CATALINA_HOME%in;


③启动
在命 行输入  startup

通过网页验证:在浏览器输入 localhost:8080

Servlet入门 - tomcat上手


2.基本使用

①部署 Servlet项目
将项目编译成war包,然后复制到 webapps目录 下:
Servlet入门 - tomcat上手
它会自动解压,访问地址是: http://{ip地址}:8080/{项目名称}

②修改端口
web服务通过指定端口与互联网通信,默认的端口是8080;如果需要修改,可以 打开conf 录下   server.xml 文件
Servlet入门 - tomcat上手
找到Connector配置节,修改port的值:
Servlet入门 - tomcat上手
重启tomcat后,修改生效。

③查看日志
日志存储在  logs目录下,并根据信息类型做了分类:
Servlet入门 - tomcat上手


3.数据库连接池

JDBC访问数据库前,先伸出一只手、数据库回应一只手,两只手握在一起后、建立了数据连接; JDBC访问结束后,收回自己的手、数据库也收回,数据连接断开。 每次访问数据库,都有一对 握手、收手 的动作。
对于数据库来说,手的数目是有上限的,当JDBC伸出的手(请求连接)过多时,数据库无法握手,只能等待;同时,频繁的“握手、收手”动作也浪费时间。
因此,人们想把这个数据连接保存起来,下次就能复用了,用来保存的容器被称为 数据库连接池。保存的数目得有上限和下限,如果太多,JDBC根本用不上,那就浪费了;如果太少,JDBC不够用,还得频繁“握手、收手”。
上限 maxActive 取决于数据库的能力和业务场景中JDBC的最大并发量,下限 minIdle 取决于业务场景中JDBC的最小并发量。
tomcat内置了数据库连接池,它只需我们做2件事: 配置连接池、 提供数据库驱动。

①配置 数据库连接池
打开conf目录下的 context.xml文件:
Servlet入门 - tomcat上手
添加Resource配置节:
<Resource name="jdbc/sqlserver/ServletCourse" author="Container" type="javax.sql.DataSource"  maxActive="100"    minIdle="10" maxWait="10000"  username="sa"  password="123" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://127.0.0.1SQLEXPRESS;databaseName=ServletCourse" />

②提供数据库驱动
将官网下载的驱动,复制到 lib目录下:

为了使用tomcat提供的数据库连接池,我们要用到JNDI。它相当于中介,连接池先在这里注册名字;当Java项目用到它时,就可以通过中介找到它。
这个中介的类名是 InitialContext,它给所有的名字加前缀  java:/comp/env/,查找对象使用 lookup()方法。
tomcat内置了JNDI的实现,我们只需要做2件事:在项目中引用连接池对象、使用JNDI查找它。

③在项目中引用连接池对象
打开Servlet项目的 web.xml文件,添加 resource-ref节点:
<resource-ref> <description>sqlserver数据库连接池</description> <res-ref-name>jdbc/sqlserver/ServletCourse</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope></resource-ref>

④使用JNDI查找连接池对象
连接池对象的名字,就是Resource的name属性,查找代码如下:
/** * 项目启动 */public void contextInitialized(ServletContextEvent sce) {  ServletContext context = sce.getServletContext();  try { Context jndiContext = new InitialContext(); DataSource ds = (DataSource) jndiContext.lookup("java:/comp/env/jdbc/sqlserver/ServletCourse"); context.setAttribute("JNDIDataSource", ds); } catch (NamingException e) { e.printStackTrace();    }}


编程经验推荐搜索