1、 准备工作

工具:tomcat、editplus、jdk、windows操作系统

操作:在windows操作系统上安装jdk、tomcat、editplus,配置JAVA_HOME,Path,CLASSPATH;在CLASSPATH路径上加上servlet-api.jar

CLASSPATH     D:\Program Files\Java\jdk1.6.0_10\lib;F:\tomcat\lib\servlet-api.jar;

也可以配置CATALINA_HOME   F:\tomcat

2、tomcat、servlet简介

tomcat是完全免费得web服务器

servlet容器也叫servlet引擎,是web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应

解压tomcat后,得到如下目录,当然tomcat7中只有一个lib目录。其中要用到的servlet-api.jar放在lib目录下

servlet生命周期

3、java web应用程序

一个web应用程序是由一组servlet、类、html页面以及其他资源组成的运行在web服务器上的完整的应用程序。一个Context表示一个应用程序

以一个登陆servlet为例介绍java web程序的开发流程,完成功能:用户通过login.html登陆,登陆成功返回客户端和服务器的一些信息,以及请求信息

4、目录结构

F:\tomcat\webapps\servlet_demo这是我电脑上的应用程序servlet_demo的路径,这个路径是上下文路径,在该路径下建立如下文件:

5、各个文件存放位置及源代码

lib目录下存放我们要用到的资源,这里存放的是mysql的jdbc驱动

src目录下放的是源代码,这个在部署的时候可以不需要的

DataBaseConnection类是一个通用的数据库连接工具类

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.SQLException;
  4. import java.sql.Statement;
  5. /**
  6. * 该工具类用于数据库连接,返回一个Statement对象,用户可以根据此对象执行sql语句获取结果
  7. */
  8. public class DataBaseConnection {
  9. public static final String ACCESS_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
  10. public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
  11. public static final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver";
  12. public static final String SQLSERVER_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
  13. private Statement st = null;
  14. private Connection connection = null;
  15. public Statement getStatement(String driver, String url, String user,
  16. String password) {
  17. try {
  18. // 1、加载驱动程序
  19. Class.forName(driver);
  20. // 2、通过url建立连接,连接到数据库
  21. connection = DriverManager.getConnection(url, user, password);
  22. // 3、创建语句,connection可以看出缆道,Statement可以看出缆车
  23. st = connection.createStatement();
  24. } catch (ClassNotFoundException e) {
  25. e.printStackTrace();
  26. } catch (SQLException e) {
  27. e.printStackTrace();
  28. }
  29. return st;
  30. }
  31. public void close() {
  32. try {
  33. if (st != null)
  34. st.close();
  35. if (connection != null)
  36. connection.close();
  37. } catch (SQLException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }

LoginServlet类用于处理表单数据,判断用户名密码是否正确,如果正确则返回信息,错误转到登陆界面

  1. import javax.servlet.RequestDispatcher;
  2. import javax.servlet.ServletContext;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.*;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.sql.Statement;
  11. import java.util.Enumeration;
  12. public class LoginServlet extends HttpServlet {
  13. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14. doPost(req, resp);
  15. }
  16. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17. // 设置响应MIME类型
  18. resp.setContentType("text/html;charset=utf-8");
  19. // 获得输出流
  20. PrintWriter out = resp.getWriter();
  21. if (isRight(req, resp)) {
  22. // 获取客户端信息和服务器信息
  23. String clientAddress = req.getRemoteAddr();
  24. int clientPort = req.getRemotePort();
  25. String clientHost = req.getRemoteHost();
  26. String serverAddress = req.getLocalAddr();
  27. int serverPort = req.getLocalPort();
  28. String serverHost = req.getLocalName();
  29. // 输出信息到客户浏览器
  30. out.print("<html><head><title>");
  31. out.print("登陆成功!</title></head><body><center>");
  32. out.print("<p>客户机IP:" + clientAddress + "  客户机端口:" + clientPort + "  客户机主机名:" + clientHost);
  33. out.print("<p>服务器IP:" + serverAddress + "  服务器端口:" + serverPort + "  服务器主机名:" + serverHost);
  34. // 获取http请求信息
  35. Enumeration headNames = req.getHeaderNames();
  36. out.print("<p>http请求信息<br><table border=\"1\">");
  37. while (headNames.hasMoreElements()) {
  38. String headName = (String) headNames.nextElement();
  39. String value = req.getHeader(headName);
  40. out.print("<tr><td>" + headName + "</td><td>" + value + "</td></tr>");
  41. }
  42. out.print("</table>");
  43. // 获得上下文,一个上下文代码一个web应用
  44. ServletContext context = getServletContext();
  45. // 统计访问量,context.getAttribute("count");这个Attribute是属于整个web应用程序的
  46. // 该应用程序的每个servlet都可以访问此属性
  47. Integer count = (Integer) context.getAttribute("count");
  48. if (count == null)
  49. count = 1;
  50. else
  51. count++;
  52. context.setAttribute("count", count);
  53. out.print("<p><br>当前访问量:" + count);
  54. out.print("</body></html>");
  55. } else {
  56. // 请求转发
  57. // RequestDispatcher由servlet容器所创建,用于封装一个由路径所标识的资源
  58. // 1.参数表示相对于当前servlet路径,也可以是上下文路径
  59. // RequestDispatcher rd=req.getRequestDispatcher("success.html");
  60. // 2.参数是相对上下文路径,必须要以/开始
  61. //RequestDispatcher rd = getServletContext().getRequestDispatcher("/success.html");
  62. // 控制权交给转发到的servlet,out输出的内容将会被清除,其他后面的代码也不会执行
  63. //rd.forward(req, resp);
  64. // 控制权交给转发到的servlet,执行完后返回当前servlet并继续执行
  65. // rd.include(req, resp);
  66. // 响应发送到指定页面,和rd.forward(req, resp);有区别
  67. resp.sendRedirect("login.html");
  68. }
  69. out.close();
  70. }
  71. // 通过查询数据库,判断输入的用户名密码是否正确
  72. private boolean isRight(HttpServletRequest req, HttpServletResponse resp) {
  73. // 获取表单数据
  74. String user = req.getParameter("user");
  75. String password = req.getParameter("password");
  76. // 获取初始参数,下面是获得连接数据库的参数
  77. String driverClass = getInitParameter("driverClass");
  78. String url = getInitParameter("url");
  79. String username = getInitParameter("username");
  80. String pw = getInitParameter("password");
  81. DataBaseConnection dbConnection = new DataBaseConnection();
  82. Statement st = dbConnection.getStatement(driverClass, url, username, pw);
  83. try {
  84. ResultSet result = st.executeQuery("select * from user");
  85. while (result.next()) {
  86. if (result.getString("username").equals(user) && result.getString("password").equals(password))
  87. return true;
  88. }
  89. result.close();
  90. st.close();
  91. } catch (SQLException e) {
  92. e.printStackTrace();
  93. }
  94. dbConnection.close();
  95. return false;
  96. }
  97. }

登陆页面login.html

  1. <html>
  2. <head>
  3. <title>登陆</title>
  4. </head>
  5. <body>
  6. <center>
  7. <form action="login" method="post">
  8. 用户名:<input type="text" name="user" id="user"><p>
  9. 密码:<input type="password" name="password" id="password"><p>
  10. <input type="submit" value="登陆">
  11. <input type="reset" value="重置">
  12. </form>
  13. </body>
  14. </html>

数据库信息

6、运行

第5步弄完之后,打开tomcat和数据库,在地址栏输入:http://localhost:8080/servlet_demo 就会进入登陆界面

当然也可以通过telnet来运行:

先连接:
telnet localhost 8080
然后访问:
GET /servlet_demo/login HTTP/1.1
Host:localhost

连续按两下回车

7、打包成war文件发布

dos窗口切换到 F:\tomcat\webapps\servlet_demo  。执行命令:jar -cvf servlet_demo.war *     。在当前目录下就有了servlet_demo.war 文件,可以用压缩软件直接打开该文件,也可以用命令:jar -tf servlet_demo.war打开该文件。

删除webapps目录下得servlet_demo应用,把servlet_demo.war文件放入目录下,这样就部署好了,运行跟第6步一样了。。。

8、关于servlet中重定向的区别

9、参考资料

《java web开发详解》

简单java web应用程序搭建与部署的更多相关文章

  1. 开发Java web应用程序的介绍

    本文将介绍使用Eclipse来开发web应用程序的基础知识.它演示了如何创建一个简单的web应用程序,将其部署到服务器,查看其呈现在浏览器中.应用程序使用JavaServer Pages™(JSP)页 ...

  2. 【转】Tomcat中部署java web应用程序

    http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...

  3. 在Tomcat中部署Java Web应用程序

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  4. 在Tomcat中部署Java Web应用程序几种方式

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  5. Tomcat中部署Java Web应用程序的方式

    Tomcat中部署Java Web应用程序的几种方式: #PetWeb是工程名 1.在TOMCAT_HOME\conf\server.xml文件的HOST节点中加入 <Context docBa ...

  6. 用Spring MVC开发简单的Web应用程序

    1 工具与环境 借助Eclipse4.3 + Maven3.0.3构建Java Web应用程序.使用Maven内置的servlet 容器jetty,不需手工集成Web服务器到Eclipse.还帮我们自 ...

  7. 使用IzPack打包JAVA Web应用程序

    使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...

  8. 【jframe】Java Web应用程序框架 - 第01篇:Get Started

    jframe是什么? jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化. ...

  9. 班级作业:Java Web环境的搭建

    Java Web环境的搭建 一.开发所需工具.(根据你的电脑以及系统选择合适的版本下载) 1.JDK .下载链接:https://www.oracle.com/technetwork/java/jav ...

随机推荐

  1. hrbustoj 2130 一笔画(状态压缩)

    基础状态压缩 转移方程为 dp[j][i] = min(dp[j][i],dp[k][i^(1<<j)] + dis[k][j]); #include<iostream> #i ...

  2. 要你的祝福.lrc

    要你的祝福(电影<我是路人甲>插曲 试听版) - 李潇潇 午夜的温度慢慢起舞 穿梭的人潮有些荒芜 开始欢呼 开始麻木 谁被谁在安抚 落单的幸福变得模糊 孤单的城市独自起舞 也许满足 也许糊 ...

  3. stm32 IAP + APP ==>双剑合一(转)

    源:http://blog.csdn.net/yx_l128125/article/details/13591743 (扩展-IAP主要用于产品出厂后应用程序的更新作用,上一篇博文详细的对IAP 升级 ...

  4. hibernate--一对多 多对一 双向关联 (重点!!!)

    一方 group: package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax. ...

  5. Lua学习系列(五)

    calling C functions from Lua 5.2 这篇文章也不错: http://blog.csdn.net/x356982611/article/details/26688287 h ...

  6. centos 7用ss命令来查看端口占用和对应进程

    mysqld进程在监听4567端口,进程id是2593:# ss -lnp|grep 4567tcp    LISTEN     0      128                    *:456 ...

  7. Extjs的架构设计思考,单页面应用 or 多页面?

    写在前面:不要认为 EXTJS 高版本就是一个界面改良,在项目中,仍然用 N 张页面,在 N 张页面部署 EXTJS .这种方式不用多讲,效率问题大家都看得出来, EXTJS 是一个集成开发工具,注定 ...

  8. N-gram语言模型简单介绍

    N-gram语言模型 考虑一个语音识别系统,假设用户说了这么一句话:"I have a gun",因为发音的相似,该语音识别系统发现如下几句话都是可能的候选:1.I have a ...

  9. UVA 1386 Cellular Automaton

    矩阵快速幂. 样例是这样构造矩阵的: 矩阵很好构造,但是500*500*500*logk的复杂度显然是无法通过这题的. 其实本题构造出来的矩阵是一个循环矩阵,只需直到第一行或者第一列,即可直到整个矩阵 ...

  10. tp框架中的静态验证

    //制定命名空间在Home 模块下Model文件夹下 如:namespace Home\Model; //引用父类 如:use Think\Model; //实例化表 如:class ZhuCeMod ...