简单java web应用程序搭建与部署
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类是一个通用的数据库连接工具类
- import java.sql.Connection;
 - import java.sql.DriverManager;
 - import java.sql.SQLException;
 - import java.sql.Statement;
 - /**
 - * 该工具类用于数据库连接,返回一个Statement对象,用户可以根据此对象执行sql语句获取结果
 - */
 - public class DataBaseConnection {
 - public static final String ACCESS_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
 - public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
 - public static final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver";
 - public static final String SQLSERVER_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
 - private Statement st = null;
 - private Connection connection = null;
 - public Statement getStatement(String driver, String url, String user,
 - String password) {
 - try {
 - // 1、加载驱动程序
 - Class.forName(driver);
 - // 2、通过url建立连接,连接到数据库
 - connection = DriverManager.getConnection(url, user, password);
 - // 3、创建语句,connection可以看出缆道,Statement可以看出缆车
 - st = connection.createStatement();
 - } catch (ClassNotFoundException e) {
 - e.printStackTrace();
 - } catch (SQLException e) {
 - e.printStackTrace();
 - }
 - return st;
 - }
 - public void close() {
 - try {
 - if (st != null)
 - st.close();
 - if (connection != null)
 - connection.close();
 - } catch (SQLException e) {
 - e.printStackTrace();
 - }
 - }
 - }
 
LoginServlet类用于处理表单数据,判断用户名密码是否正确,如果正确则返回信息,错误转到登陆界面
- import javax.servlet.RequestDispatcher;
 - import javax.servlet.ServletContext;
 - import javax.servlet.ServletException;
 - import javax.servlet.http.HttpServlet;
 - import javax.servlet.http.HttpServletRequest;
 - import javax.servlet.http.HttpServletResponse;
 - import java.io.*;
 - import java.sql.ResultSet;
 - import java.sql.SQLException;
 - import java.sql.Statement;
 - import java.util.Enumeration;
 - public class LoginServlet extends HttpServlet {
 - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 - doPost(req, resp);
 - }
 - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 - // 设置响应MIME类型
 - resp.setContentType("text/html;charset=utf-8");
 - // 获得输出流
 - PrintWriter out = resp.getWriter();
 - if (isRight(req, resp)) {
 - // 获取客户端信息和服务器信息
 - String clientAddress = req.getRemoteAddr();
 - int clientPort = req.getRemotePort();
 - String clientHost = req.getRemoteHost();
 - String serverAddress = req.getLocalAddr();
 - int serverPort = req.getLocalPort();
 - String serverHost = req.getLocalName();
 - // 输出信息到客户浏览器
 - out.print("<html><head><title>");
 - out.print("登陆成功!</title></head><body><center>");
 - out.print("<p>客户机IP:" + clientAddress + " 客户机端口:" + clientPort + " 客户机主机名:" + clientHost);
 - out.print("<p>服务器IP:" + serverAddress + " 服务器端口:" + serverPort + " 服务器主机名:" + serverHost);
 - // 获取http请求信息
 - Enumeration headNames = req.getHeaderNames();
 - out.print("<p>http请求信息<br><table border=\"1\">");
 - while (headNames.hasMoreElements()) {
 - String headName = (String) headNames.nextElement();
 - String value = req.getHeader(headName);
 - out.print("<tr><td>" + headName + "</td><td>" + value + "</td></tr>");
 - }
 - out.print("</table>");
 - // 获得上下文,一个上下文代码一个web应用
 - ServletContext context = getServletContext();
 - // 统计访问量,context.getAttribute("count");这个Attribute是属于整个web应用程序的
 - // 该应用程序的每个servlet都可以访问此属性
 - Integer count = (Integer) context.getAttribute("count");
 - if (count == null)
 - count = 1;
 - else
 - count++;
 - context.setAttribute("count", count);
 - out.print("<p><br>当前访问量:" + count);
 - out.print("</body></html>");
 - } else {
 - // 请求转发
 - // RequestDispatcher由servlet容器所创建,用于封装一个由路径所标识的资源
 - // 1.参数表示相对于当前servlet路径,也可以是上下文路径
 - // RequestDispatcher rd=req.getRequestDispatcher("success.html");
 - // 2.参数是相对上下文路径,必须要以/开始
 - //RequestDispatcher rd = getServletContext().getRequestDispatcher("/success.html");
 - // 控制权交给转发到的servlet,out输出的内容将会被清除,其他后面的代码也不会执行
 - //rd.forward(req, resp);
 - // 控制权交给转发到的servlet,执行完后返回当前servlet并继续执行
 - // rd.include(req, resp);
 - // 响应发送到指定页面,和rd.forward(req, resp);有区别
 - resp.sendRedirect("login.html");
 - }
 - out.close();
 - }
 - // 通过查询数据库,判断输入的用户名密码是否正确
 - private boolean isRight(HttpServletRequest req, HttpServletResponse resp) {
 - // 获取表单数据
 - String user = req.getParameter("user");
 - String password = req.getParameter("password");
 - // 获取初始参数,下面是获得连接数据库的参数
 - String driverClass = getInitParameter("driverClass");
 - String url = getInitParameter("url");
 - String username = getInitParameter("username");
 - String pw = getInitParameter("password");
 - DataBaseConnection dbConnection = new DataBaseConnection();
 - Statement st = dbConnection.getStatement(driverClass, url, username, pw);
 - try {
 - ResultSet result = st.executeQuery("select * from user");
 - while (result.next()) {
 - if (result.getString("username").equals(user) && result.getString("password").equals(password))
 - return true;
 - }
 - result.close();
 - st.close();
 - } catch (SQLException e) {
 - e.printStackTrace();
 - }
 - dbConnection.close();
 - return false;
 - }
 - }
 
登陆页面login.html
- <html>
 - <head>
 - <title>登陆</title>
 - </head>
 - <body>
 - <center>
 - <form action="login" method="post">
 - 用户名:<input type="text" name="user" id="user"><p>
 - 密码:<input type="password" name="password" id="password"><p>
 - <input type="submit" value="登陆">
 - <input type="reset" value="重置">
 - </form>
 - </body>
 - </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应用程序搭建与部署的更多相关文章
- 开发Java web应用程序的介绍
		
本文将介绍使用Eclipse来开发web应用程序的基础知识.它演示了如何创建一个简单的web应用程序,将其部署到服务器,查看其呈现在浏览器中.应用程序使用JavaServer Pages™(JSP)页 ...
 - 【转】Tomcat中部署java web应用程序
		
http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...
 - 在Tomcat中部署Java Web应用程序
		
在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署 静态部署指的是我们在服务器启动之前部 ...
 - 在Tomcat中部署Java Web应用程序几种方式
		
在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署 静态部署指的是我们在服务器启动之前部 ...
 - Tomcat中部署Java Web应用程序的方式
		
Tomcat中部署Java Web应用程序的几种方式: #PetWeb是工程名 1.在TOMCAT_HOME\conf\server.xml文件的HOST节点中加入 <Context docBa ...
 - 用Spring MVC开发简单的Web应用程序
		
1 工具与环境 借助Eclipse4.3 + Maven3.0.3构建Java Web应用程序.使用Maven内置的servlet 容器jetty,不需手工集成Web服务器到Eclipse.还帮我们自 ...
 - 使用IzPack打包JAVA Web应用程序
		
使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...
 - 【jframe】Java Web应用程序框架 - 第01篇:Get Started
		
jframe是什么? jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化. ...
 - 班级作业:Java Web环境的搭建
		
Java Web环境的搭建 一.开发所需工具.(根据你的电脑以及系统选择合适的版本下载) 1.JDK .下载链接:https://www.oracle.com/technetwork/java/jav ...
 
随机推荐
- (转)个例子让你了解Java反射机制
			
个例子让你了解Java反射机制 原文地址:http://blog.csdn.net/ljphhj/article/details/12858767 JAVA反射机制: 通俗地说,反射机制就是可 ...
 - 转:HTML与URL两种录制模式分析
			
Loadrunner的Virtual User Generator 提供人脚本的录制功能,对于初学者来说,这大大的降低了编写脚本的门槛,loadrunner提供两种录制脚本的方式:Html_based ...
 - dedecms mysql连接错误:#1040 - Too many connections
			
mysql能登进去一下,点任何链接又跳出来,然后就登不上了 解决办法:检查mysql所在盘是否还有空间
 - 深入理解setTimeout和setinterval
			
以前一直以为这两个函数就是简单了认为类似thread一样的东西, 认为会在一个时间片内, 并发的执行调用的函数, 似乎很好很强大, 但其实并不是如此, 实际的情况是javascript都是以单线程的方 ...
 - 伸展树 Splay 模板
			
学习Splay的时候参考了很多不同的资料,然而参考资料太杂的后果就是模板调出来一直都有问题,尤其是最后发现网上找的各种资料均有不同程度的错误. 好在啃了几天之后终于算是啃下来了. Splay也算是平衡 ...
 - Delphi 悬浮窗口、浮动窗口的实现
			
源:Delphi 悬浮窗口.浮动窗口的实现 浮动窗体的实现 http://blog.tianya.cn/blogger/post_show.asp?BlogID=68097&PostID=80 ...
 - Arduino单片机使用和开发问题记录(转)
			
源:Arduino单片机使用和开发问题记录 1.将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00” 网上 ...
 - CI框架学习——基本的用法(一)
			
一.必备知识 1.如何访问你的页面 我在控制器下面建立了admin文件夹,此文件夹下有login.php 文件,我们现在要访问这个文件 http://localhost/gradesystem/ind ...
 - POJ 2139 Six Degrees of Cowvin Bacon
			
水题,Floyd. #include<cstdio> #include<cstring> #include<algorithm> using namespace s ...
 - 系统里有Courier New字体 Eclipse没有这个字体选项
			
问题状态: 系统里有Courier New字体 Eclipse没有这个字体选项问题原因: windows(xp)中的系统字体分为"显示"和"隐藏"两种状态,当为 ...