web中hasmoreelements_简单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("

");

out.print("登陆成功!

");

out.print("

客户机IP:" + clientAddress + "  客户机端口:" + clientPort + "  客户机主机名:" + clientHost);

out.print("

服务器IP:" + serverAddress + "  服务器端口:" + serverPort + "  服务器主机名:" + serverHost);

// 获取http请求信息

Enumeration headNames = req.getHeaderNames();

out.print("

http请求信息

while (headNames.hasMoreElements()) {

String headName = (String) headNames.nextElement();

String value = req.getHeader(headName);

out.print("

" + headName + "" + value + "");

}

out.print("

");

// 获得上下文,一个上下文代码一个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("


当前访问量:" + count);

out.print("");

} 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

登陆

用户名:

密码:

数据库信息

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开发详解》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HtmlParse,解析给定url文字符,输出到文本文件: url:可配置多个 输出路径:可配置 package com.lhs; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Properties; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 现在要求用Java编写一个程序,该程序访问上面的URL,并从页面, * 提取出上图所示位置的页面信息(仅图所要求的内容),将其内容按如下格式,输出到控制台 * GrapWeatherInfo * @author lihsh * @version 1.0 * */ public class HtmlParse { List configList = new ArrayList(); private String savePath = "d:\\htmlParse.txt"; private String reg = "[\u4E00-\u9FA5]+"; Set resultSet = new LinkedHashSet(); /** * @param args */ public static void main(String[] args) { HtmlParse hp = new HtmlParse(); hp.getConfig(); hp.start(); hp.write2file(); } /** * 获得配置文件,得到公司要求的文件类型 */ private void getConfig() { Properties props = new Properties(); InputStream in = getClass().getResourceAsStream("/config.properties"); try { props.load(in); Enumeration en = props.propertyNames(); System.out.print("读取配置文件:"); while(en.hasMoreElements()) { String key = (String) en.nextElement(); String value = (String) props.get(key); if(key.startsWith("url")) { configList.add(value); }else if(key.equals("savePath")) { savePath = value; }else if(key.equals("reg")) { reg = value; } System.out.print(key + ":" + value +"; "); } System.out.println(); } catch (IOException e) { e.printStackTrace(); System.out.println("读取配置文件/config.properties出错"); } } /** * 程序总入口 */ private void start() { for(int i = 0; i < configList.size(); i++) { URLConnection con = getConnection(configList.get(i)); readContent(con); System.out.println("读取:" + configList.get(i) + " 结束"); } } /** * 获取url链接 * @return 链接 */ private URLConnection getConnection(String _url) { URLConnection con = null; URL url = null; try { url = new URL(_url); con=url.openConnection(); } catch (IOException e) { e.printStackTrace(); } return con; } /** * 初步过滤出含有天气的行 * @param con url链接 * @return 关键行 */ private void readContent(URLConnection con) { BufferedReader br=null; BufferedWriter bw = null; try { br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8")); bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(savePath)), "UTF-8")); String line=""; while((line=br.readLine()) != null) { resultSet.addAll(parse(line)); } bw.flush(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); }finally { try { bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 正则表达式匹配关键数据 * @param line * @return */ private Set parse(String line) { Set resSet = new LinkedHashSet(); Pattern pattern = Pattern.compile(reg); Matcher matcher = pattern.matcher(line); while(matcher.find()) { String group = matcher.group(); resSet.add(group); } return resSet; } private void write2file() { BufferedWriter bw = null; try { bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(savePath)), "UTF-8")); for(Iterator it = resultSet.iterator(); it.hasNext();) { bw.write(it.next()); bw.newLine(); } bw.flush(); System.out.println("解析结果保存至:" + savePath); } catch (IOException e1) { e1.printStackTrace(); }finally { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值