Java ee学习笔记

Servlet简介

Servlet技术规范是JavaEE技术规范中的一个重要组成部分,Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面(实际上,Servlet不仅仅是用于返回HTML的页面的,比如,Servlet还可以返回Xml,JSON等格式的字符串,当然了,也可以返回视频流,等等)。
Servlet要运行于Servlet容器上,目前,IBM的WebSphere,BEA的WebLogic,Apache的tomcat,SUN的GlassFish,这些JavaEE的服务器,都含有Servlet容器,我想这么说,Servlet的容器和JavaEE的服务器之间的关系就区别开了吧? 其中以tomcat为例,它是一个著名的开源的JavaEE服务器,它包含有一个Servlet容器,(但是并不包含EJB的容器),也就是说,tomcat是一个不能完整支持JavaEE技术规范的容器(不支持EJB),但是这对构建一个Web Site是够用了。如果想使用tomcat,并使用EJB,通常是采用JBoss作为服务器的,因为JBoss本身是一个EJB的容器,并且把tomcat集成进来,来完成Servlet容器的角色。tomcat除了要提供Servlet容器外,显然还要承担起HTTP Server的角色,但是也有人用Apache服务器+Tomcat的Servlet容器,来构成一个完整的服务器,也就是说,不使用tomcat所提供HTTP服务,而是用Apache的。
Sun的GlassFish,是一个比较完整支持JavaEE规范的Server。刚才看到了一条新闻,Oracle完成收购SUN后,依然会支持GlassFish。原文如下:

(GlassFish
甲骨文表示将会调整Oracle WebLogic server和GlassFish的投资组合,他们计划继续让GlassFish Enterprise Server作为遵循Java EE规范的开源RI。同时,甲骨文表示也会继续支持GlassFish社区。
编者注:除了以上开发者们关注的两个产品之外(是的,还有Java FX。对于Java,Oracle自从收购开始之日就一直态度明确;然而Java FX,在这份FAQ中仍然没有提及),下面还提到了Sun的虚拟化产品和Open Office的处理策略。)

我觉得Servlet技术,和CGI技术有着相当的相似度。如果把Servlet放到传统的CGI程序,和当下的JSP,JSF,ASP.net中间,我觉得它更加地接近前者,没有一个本质的跃迁。

详解servlet实例

上面这个链接,写得不错,OK:
假设我写了一个HelloServlet,它返回一个欢迎页面。
HelloServlet是如何被创建的呢? 首先可以肯定的说,不是new出来的,容器根本不知道我们会写出叫什么名字的Servlet classes。这就像MFC,谁知道我们的Document class叫什么名字,于是动态创建就有用武之地了。当然了,在Java里面,反射是更加强大的武器。(而且记住,容器不会new HelloServlet,而就是我们企图调用这个Servlet,也不要new!)
服务器会侦听某一个端口,比如说8080,现在浏览器要访问我们的Server了,http://127.0.0.1:8080/hello。
OK,Server会accept浏览器的链接,当然了,这是个TCP层的问题,而在HTTP层面上,我们会看到Request的HTTP请求信息,里面就含有URL,于是我们自然就得到了hello这个字符串。这个时候,HTTP Server就要把处理逻辑转到Servlet容器上了。
根据JavaEE的规范,Servlet容器会读一个web.xml。里面大致有这样的配置内容:

<servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>org.bizcuit.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

注意那关键的四行,其中servlet-name是Hello,成为上面和下面两个部分的桥梁,上面的部分说明了调用这个名字的Servlet,会实例化哪个Java class。而下面的部分则说明了,URL的pattern如果是/hello,那么就会调用名为Hello的Servlet。其中,还要注意url-pattern项,这里可是有些名目的。
OK,这样,Servlet容器就知道要加载哪个Servlet的class了,那么这个加载是通过反射来完成的。

Class cls = Class.forName(servletClassName);
Object servlet = cls.newInstance(); 

当然了,这个比伪码还简单了,因为一个Servlet class,通常只在容器内产生一个实例(也有办法生成多个实例,但是可能会产生效率的问题,后面讲),因此,要注意线程安全的问题(后面讲)。
但是现在,我们有了Servlet的实例了,于是,我们可以调用它的方法了,根据Servlet规范,容器根据浏览器的请求(GET/POST/...),会调用service,或者是doGet,doPost方法。以doGet方法为例:

public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/html");
        resp.getWriter().println("<div>Hello</div>");
    }
}

注意doGet方法的两个参数,很重要,这里就不赘述了,还是要在具体的实践中掌握的。
关于Session,可以通过这个方法得到。req.getSession();



JSP简介
我个人认为JSP是一种比PHP更加灵活,强大的服务器端脚本,无奈PHP确实简单很多啊。

JSP(Java Server Pages)是由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP,PHP等技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。
运行JSP,也是需要Servlet容器的,原因就是JSP在第一次被访问的时候,会被翻译为一个Servlet,当然了,这个Servlet最终也是要被编译为.class文件的,所以,JSP是在Servlet的技术上构建出来的,而且JSP的运行速度很快,毕竟是被编译成字节码在运行,相比传统的ASP脚本的解释方式,快了许多。
关于JSP,还有JSP的tag可以作为单独的课题来研究一下。

<JSP试验部分>

1. DOWNLOAD tomcat first:  tomcat 6.x zip format
    下载后,解压缩。
2. 启动tomcat
    找到目录$TOMCAT_INSTALL_PATH\apache-tomcat-6.0.20\bin,Windows上,双击startup.bat即可。
    http://localhost:8080/
    好歹试一试tomcat是不是真的起来了。GO~
3. 创建一个JSP文件。
    目录,$TOMCAT_INSTALL_PATH\apache-tomcat-6.0.20\webapps\ROOT
    创建一个文件,hello.jsp。里面输入下列内容。

<%@page language="java" %>
<%@page import="java.util.*" %>
<html>
<head>
<title>Hello World!</title>
</head>
<body bgcolor="#FFFFFF">
<%
String msg= new Date().toString();
out.println("Hello World!<br>");
%>
<div style="color:red">
<%=msg%>
</div>
</body>
</html>

保存,然后启动服务器(当然了,服务器起来后,再创建、修改JSP也可以,不需要重启服务器。),试一试,http://127.0.0.1:8080/hello.jsp
4. 随便再改改,体验一下JSP,<%%>内,可以接受Java code(当然了,不是全部)。

<Servlet试验部分>
写简单的JSP,我觉得不用IDE也OK,但是Servlet,我们还是借助IDE吧,大段的Java代码,我喜欢用Eclipse。
1. 下载eclipse-jee-galileo-SR1-win32,Click here to download

2. 启动Eclipse。注意,Eclipse一定要指定一个workspace才行的。

3. 从菜单里面找File->New->Project,选择后弹出一个可以创建工程的对话框。在里面找到Web |_ Dynamic Web Project。
    不负责任的说,自己一路Next下去吧。应该没有什么问题。工程的名字可以选择为Hello。

4. 再创建一个服务器。
    
    不负责任的说,找到对话框,自己一路Next下去吧。应该没有什么问题。

5. 这样就差不多了,可以写代码了,也可以调试了。具体的问题应该不难解决。在Hello工程里面创建一个Servlet。
    在左侧的Package Explorer中,展开Hello,在src目录那里,右键,准备创建一个Servlet,找到对话框,

在Class Name那里写HelloServlet即可,Java Package那里写org.bizcuit。其他的不用修改。OK,这样,IDE就帮我们创建好一个Servlet的java文件了。
    在doGet方法内,可以试着写入这样的code:

PrintWriter pw = response.getWriter();
pw.print("<html><body><div style=‘color:red‘>Hello</div></body></html>");

当然了,Servlet里面返回HTML往往属于比较土的做法,因为还不如写JSP呢(当然了,Servlet返回HTML也可能有更好的理由。)
6. 开始调试了。
    在Project Hello上右键,找到Debug As菜单项,选择Debug on server。
    选择一个已有的Server这一项(Choose an exsiting server.)。因为我们已经建立过一个Server tomcat了。
    然后一路Next到Finish~。试一下 http://127.0.0.1:8080/Hello/HelloServlet
    URL中,第一个Hello是由于你创建的工程名是Hello,接下来HelloServlet,是你的servlet class的名字。

7. 试一下改写你的Servlet,是不需要重启服务器的。

时间: 2024-10-14 00:15:08

Java ee学习笔记的相关文章

JAVA EE 学习笔记[V1 jsp编程]

在三月初学校开设了javaee的课程,也就此展开了对javaee基础的学习.然后老师也对这次的课程有一定要求.前面的基础就为最终的作业做准备啦~ 在上学期我们学习了java相关知识,也对java se 的安装使用有了一定的认知,而java ee则是构建于java se 平台之上的一套多层的,可扩展的的网络应用. 学习java ee我们首先进行环境的搭建.无非就是使用 tomcat进行服务器的搭建和jdk环境变量配置.而IDE这方面我们选择myeclipse 2016 CI(这个编译器自带tomc

JAVA EE 学习笔记[V4 Struts 2框架试水]

Going on 在有前面一些基础的时候可以把目光放向更远的地方了.Java EE 开发框架(刚开始接触有大佬告诉我这个是用来偷懒的,但既然存在,不可能只为偷懒)在一定程度上框架减轻了维护和开发压力,而Struts作为三大框架(还有Spring Hibernate)之一,也发展到了Struts2.要说起框架在Java EE开发过程中的地位,那如图: 若把Web应用看作是大楼,那框架则是每个房间单独的骨架,有了这个东西,建房写应用岂不美滋滋. 我在清楚的认识自己目前水平之后,理解和搞懂MVC模式下

JAVA EE 学习笔记[V3 JDBC连接数据库]

Going on 在前面两节实力浅学了Servlet和Jsp一波.然而这些东西离我们实际开发还有很远的距离(至少作业都完成不了=-=),所以想更进一步靠近实际开发的话,那就一定得对数据库的知识有一定程度的掌握和了解(这里暂时先来点简单的,毕竟数据库又是学科分支,分分钟搞大),我暂时对JAVA访问数据库的技术即JDBC进行学习和了解. JDBC简介 商业应用的后台数据一般存放在数据库中,很明显,可以通过 Java 代码来访问数据库. 在 Java 技术系列中,访问数据库的技术叫做 JDBC(Jav

JAVA EE 学习笔记[V5 struts2框架标签库]

Going on 在上次我们浅试水Struts2框架之后只不过建立了一个轻型的Struts2项目,其中已经应用到了Struts2的一些标签: 在JSP页面中引入标签库(使用@taglib命令): <%@ taglib uri="/struts-tags" prefix="s" %> 其次是使用标签库: <s:fielderror key="dataErr"></s:fielderror> 这个标签提供了错误信息

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com