Java Web开发介绍
转自:http://www.cnblogs.com/pythontesting/p/4963021.html
Java Web开发介绍
简介
Java很好地支持web开发,在桌面上Eclipse RCP谈不上成功,JAVA是主要用在服务器端,和Python一样是极其重要的Web后台开发语言。
Java Web应用通常不直接在服务器上运行,而是在Web容器内。容器提供的运行时环境,提供JVM (Java Virtual Machine)运行本地Java应用。容器本身也运行在JVM。
通常Java的分为两个容器:Web容器和Java EE容器。典型的Web容器是Tomcat或Jetty。Web容器支持Java Servlet和JavaServer Page的执行。 Java EE容器支持更多的功能,例如,服务器负载的分布。
大部分现代的Java Web框架是基于servlet的。流行的Java Web框架有GWT,JavaServer Faces,Struts和Spring框架。这些Web框架通常需要至少需要Web容器。
Java Web应用程序是动态的资源(如Servlet,JavaServer页,Java类,jar)和静态资源(HTML页面和图片)的集合。 Java Web应用程序可以部署为WAR(Web ARchive)文件。
WAR文件是包含相应的Web应用程序的完整内容的zip文件。
标准的Java技术由Java Community Process (JCP http://jcp.org/)指定。包含如下:
servlet:扩展"HttpServlet",在Web容器中的响应HTTP请求的Java类。最新的正式版的Servlet 3.1,参见https://en.wikipedia.org/wiki/Java_servlet。
JavaServer页面(JavaServer Page JSP)是含有HTML和Java代码的文件。首次执行时web
cotainer编译JSP成servlet。目前的最新版本是2.2。参见https://en.wikipedia.org/wiki
/JavaServer_Pages。
JavaServer Pages Standard Tag Library
(JSTL)用标签的形式封装常见的核心功能。目前的版本是1.2.1,参见https://en.wikipedia.org/wiki
/JavaServer_Pages_Standard_Tag_Library。
非标准的Java Web开发。例如,GWT支持Java开发,并编译成JavaScript。
客户端操作
Java提供了通用的,轻量级的HTTP客户端API通过HTTP或HTTPS协议访问的资源。的主要类访问因特网类为java.net.URL类和java.net.HttpURLConnection类。
URL类可指向网络资源,而HttpURLConnection的类可用于访问网络资源。HttpURLConnection类可创建InputStream(像读取本地文件一样)。
在最新版本的HttpURLConnection支持透明响应压缩(通过头:Accept-Encoding: gzip)。
比如访问:http://automationtesting.sinaapp.com/

package com.company; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL; public class DownloadWebpageExample {
public static void main(String[] args) {
try {
URL url = new URL("http://automationtesting.sinaapp.com/");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
String readStream = readStream(con.getInputStream());
// Give output for the command line
System.out.println(readStream);
} catch (Exception e) {
e.printStackTrace();
} } private static String readStream(InputStream in) {
StringBuilder sb = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(in));) { String nextLine = "";
while ((nextLine = reader.readLine()) != null) {
sb.append(nextLine);
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}

看看python如何实现:
>>> import requests
>>> requests.get("http://automationtesting.sinaapp.com").text
2行搞定,可见web访问这块Java是相当笨拙。
HttpURLConnection类的Javadoc,建议不要复用HttpURLConnection的。万一这样使用HttpURLConnection的不具有线程问题,不同线程之间不能共享。
下面我们把下载放在一个方法:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL; public class ReadWebPage {
public static void main(String[] args) {
String urlText = "http://automationtesting.sinaapp.com";
BufferedReader in = null;
try {
URL url = new URL(urlText);
in = new BufferedReader(new InputStreamReader(url.openStream())); String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

从网页获取的返回码
最重要的HTML返回码为:
| Return Code | Explaination |
|---|---|
| 200 | Ok |
| 301 | Permanent redirect to another webpage |
| 400 | Bad request |
| 404 | Not found |
下面的代码将访问网页,打印HTML访问返回代码。

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL; public class ReadReturnCode {
public static void main(String[] args) throws IOException {
String urltext = "http://automationtesting.sinaapp.com/";
URL url = new URL(urltext);
int responseCode = ((HttpURLConnection) url.openConnection())
.getResponseCode();
System.out.println(responseCode);
}
}

python实现如下:
>>> import requests
>>> result = requests.get("http://automationtesting.sinaapp.com")
>>> result.status_code
200
因特网媒体类型(MIME,又名Content-type)定义是网络资源的类型。 MIME类型是在因特网上的文件格式,由两部分组成。对于HTML页面的内容类型为"text/html"的。

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL; public class ReadMimeType {
public static void main(String[] args) throws IOException {
String urltext = "http://automationtesting.sinaapp.com";
URL url = new URL(urltext);
String contentType = ((HttpURLConnection) url.openConnection())
.getContentType();
System.out.println(contentType);
}
}

Python实现如下:
>>> import requests
>>> result = requests.get("http://automationtesting.sinaapp.com")
>>> result.headers['content-type']
'text/html;charset=utf-8'
Java Web开发介绍的更多相关文章
- Java Web开发中MVC设计模式简介
一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...
- 个人的java web开发书单
首发至个人博客http://www.zidafone.com/blog/36 以下是对一些读过的书和一些买后随便翻了翻的书的个人感觉.都是java web开发的程序员可能接触的书,其他的如设计/手机开 ...
- Java Web开发之详解JSP
JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用, ...
- 使用Eclipse+Maven+Jetty构建Java Web开发环境(几个教程综合集成2014发行)
工作需要使用Jetty由于web集装箱,得知Eclipse+Maven+Jetty该组合是非常好的,因此,要在网上找了很多教程,但不写或多或少特定的或过时的内容而导致最终的配置失败,易于配置为未来的同 ...
- 勤拂拭软件 java web 开发教程(1) - 开发环境搭建
勤拂拭软件系列教程 之 Java Web开发之旅(1) Java Web开发环境搭建 1 前言 工作过程中,遇到不少朋友想要学习jsp开发,然而第一步都迈不出,连一个基本的环境都没有,试问,如何能够继 ...
- day04 Java Web 开发入门
day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...
- Java Web开发和Python Web开发之间的区别
今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...
- java web 开发教程(1) - 开发环境搭建
勤拂拭软件系列教程 之 Java Web开发之旅(1) Java Web开发环境搭建 1 前言 工作过程中,遇到不少朋友想要学习jsp开发,然而第一步都迈不出,连一个基本的环境都没有,试问,如何能够继 ...
- 【Java Web开发学习】Spring4整合thymeleaf视图解析
[Java Web开发学习]Spring4整合thymeleaf视图解析 目录 1.简单介绍2.简单例子 转载:https://www.cnblogs.com/yangchongxing/p/9111 ...
随机推荐
- 回某位朋友问题备受phpcgi.exe煎熬现在cpu跑满(解决方案)
(本文原创,但是cgi参数参考一个大神写的针对小服务器的,希望大家积极投票哦) 下面是对php-cgi.ext过多引起服务器cup%的解决方法,希望对大家有帮助;大多数情况是发生在第四项上; 解决 ...
- 获取windows系统信息
在应用程序中,有时需要在界面中显示计算机的硬件信息和进程信息.在.Net中提供了可以查询信息的类.Management类,在程序中添加应用后进行使用. 1 属性 类似的属性介绍可见下面: 属性介绍 根 ...
- 看个人思路吧,清晰的话就简单 CodeForces 271A - Beautiful Year
It seems like the year of 2013 came only yesterday. Do you know a curious fact? The year of 2013 is ...
- golang 学习笔记
golan 声明的变量必须要用到? 语法 a,b:=2323; b为 bool 类型 结构体的赋值 需要用到逗号分隔字段 并且最后一个字段后也必须加上逗号 这和 JavaScript 的对象不一样哦 ...
- activeMQ数据消耗,但在该站的中间,但是没有理由删除数据
connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); 第一参数改变时TRUE后,消费数据将出现在MQ中间站没有记录删除. ...
- Android bitmap图片处理
一.View转换为Bitmap 在Android中所有的控件都是View的直接子类或者间接子类,通过它们可以组成丰富的UI界面.在窗口显示的时候Android会把这些控件都加载到内存中 ...
- android 14 进度条和拖动条
进度条: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:l ...
- spring-data-redis工程
官方文档:http://docs.spring.io/spring-data/data-redis/docs/current/reference/html/redis.html The Spring ...
- Log4j 2.0 使用说明
原文地址:http://blog.csdn.net/welcome000yy/article/details/7962447 Log4j 2.0 使用说明(1) 之HelloWorld 最近刚接触 ...
- Google代码实验室
https://code.google.com/p/google-styleguide/