zoukankan      html  css  js  c++  java
  • 简单java web应用程序搭建与部署

    1、 准备工作

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

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

    CLASSPATH     D:Program FilesJavajdk1.6.0_10lib;F: omcatlibservlet-api.jar;

    也可以配置CATALINA_HOME   F: omcat

    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: omcatwebappsservlet_demo这是我电脑上的应用程序servlet_demo的路径,这个路径是上下文路径,在该路径下建立如下文件:

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

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

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

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

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


     

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

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


    登陆页面login.html

    [html] view plaincopy
     
    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: omcatwebappsservlet_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开发详解》

  • 相关阅读:
    经典:基因组测序数据从头拼接或组装算法的原理
    基于全基因组测序数据鉴定结构变异的四大类算法总结
    TCGA各种肿瘤数据的20多种不同玩法/挖掘方法
    基于基因组测序数据鉴定单碱基变异的方法总结
    单细胞转录组测序技术及各类数据分析方法总结
    基因组测序、外显子测序和靶向测序有什么样的区别,如何选择?
    m6A甲基化及预测方法工具总结
    单细胞转录组测序数据的可变剪接(alternative splicing)分析方法总结
    基于单细胞测序数据构建细胞状态转换轨迹(cell trajectory)方法总结
    shell中处理excel文件
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4602017.html
Copyright © 2011-2022 走看看