Java ee学习笔记

2023-11-18

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,是不需要重启服务器的。

转载于:https://www.cnblogs.com/q20171315/p/7112598.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java ee学习笔记 的相关文章

  • 2019年区块链教育培训课程研究报告

    前言 区块链教育培训机构可谓是区块链行业中的真正的 布道者 其课程内容主要有 技术培训 投资培训以及行业培训这三大类 课程内容主要的提供方可以分为 项目方 高校 常规教育机构以及新兴教育机构这四类 目前 较多的机构正在进行投资培训以及行业培
  • 黑圈数字符号0到50复制_带圆圈数字符号大全

    http www petroleumcloud cn pages 623 html 带圆圈数字符号一共有五种 其中包括一种中文数字符号 空心圆圈数字符号和实心黑圆圈数字分别有两种 只有一种圆圈数字符号能从0 50 其它的只有10个 复制 复
  • 华为OD机试题

    华为OD机试回顾 华为OD 机试题 Java实现 小镇做题家 做题记录 微信 yatesKumi 祖国西北部有一片大片荒地 其中零星的分布着一些湖泊 保护区 矿区 整体上常年光照良好 但是也有一些地区光照不太好 某电力公司希望在这里建设多个
  • LeetCode数据库题目汇总一(附答案)

    1 基础SQL 数据表 dept deptno primary key dname loc emp empno primary key ename job mgr references emp empno sal deptno refere
  • python numpy array 中删除含0量高于阈值的行--数据清洗

    问题 数据中包含较多0值 类似于包含较大噪声 对结果产生较大影响 目标 对数据进行清洗 在进行其他数据清洗操作的基础上 实现删除数据中包含较多0值的行 可类比推广到删除其他 代码实现 data data np sum data 0 axis
  • python中if __name__ == '__main__': 解析

    当你打开一个 py文件时 经常会在代码的最下面看到if name main 现在就来介 绍一下它的作用 模块是对象 并且所有的模块都有一个内置属性 name 一个模块的 name 的值取决于您如何应用模块 如果 import 一个模块 那么
  • java保留小数点的方式

    double型的 1 能四舍五入 System out printf 9 2f d 1 double d 114 145 2 d double Math round d 100 100 3 System out println d 2 Bi
  • PS2汉化2 - 自制程序的运行与调试

    自制程序的运行与调试 运行调试的坑点之类的 SDK 运行与调试 通过PS3 通过PS2 神 昂 奇 贵 的DTL 10000 贫穷者的零售机器 通过PCSX2仿真器 运行调试的坑点之类的 本文为了自制程序 或者修改后的某些程序 而撰写 记录
  • 第九章 tcp拥塞控制--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 Linux提供丰富的拥塞控制算法 这些算法包括Vegas Reno HSCTP High Speed TCP Westwood BIC
  • 【java筑基】IO流进阶之文件随机访问、序列化与反序列化

    前 言 作者简介 半旧518 长跑型选手 立志坚持写10年博客 专注于java后端 专栏简介 深入 全面 系统的介绍java的基础知识 文章简介 本文将深入全面介绍IO流知识 建议收藏备用 创作不易 敬请三连哦 大厂真题 大厂面试真题大全
  • unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

    unity中通过touch旋转 放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁 话不多说直接上代码 using System Collections using System Collections Generic usi
  • XSS详解

    XSS 伪装管理员登录后台 文章目录 XSS 伪装管理员登录后台 一 XSS注入原理 二 XSS危害 二 XSS分类 三 Cookie是什么 四 XSS获取cookie 一 XSS注入原理 XSS 攻击全称跨站脚本攻击 是为不和层叠样式表
  • [转]Unity Accelerator本地服务器加速Unity项目资源载入速度

    去年的时候项目引擎版本由2019升级为2020 对应的资源导入管线也由V1切换到了V2 在这个过程中发现原来的cachesever就不满足项目需要了 查阅了一些资料发现unity的cachesever升级成了Unity Accelerato
  • 警惕使用jvm参数CMSRefProcTaskProxy

    昨天中午的时候 团队的兄弟找我看一个现象 原先因为堆外内存使用过多会crash掉的java应用 设置了最大堆外内存量 MaxDirectMemorySize 后jvm不会crash 但出现了机器的两颗CPU全部被占满 而且java程序没有响
  • 【rust/egui】(九)使用painter绘制一些图形—基本使用

    说在前面 rust新手 egui没啥找到啥教程 这里自己记录下学习过程 环境 windows11 22H2 rust版本 rustc 1 71 1 egui版本 0 22 0 eframe版本 0 22 0 上一篇 这里 painter 定
  • Python数据分析小技巧:如何在Pandas中实现数据透视表?

    Python数据分析小技巧 如何在Pandas中实现数据透视表 数据透视表是数据分析中非常有用的工具 可以帮助我们快速了解数据的结构 关联和趋势 在Pandas中 我们可以使用pivot table 函数来实现数据透视表 例如 我们有一个销
  • 必须掌握的hashcode()方法

    一 hashcode是什么 1 hash和hash表是什么 想要知道这个hashcode 首先得知道hash 通过百度百科看一下 hash是一个函数 该函数中的实现就是一种算法 就是通过一系列的算法来得到一个hash值 这个时候 我们就需要
  • JSX/TSX的知识介绍

    JSX TSX 基本介绍 JSX和TSX是一种基于JavaScript的语法扩展 用于在React和Vue js等框架中编写可复用的UI组件和控制逻辑 JSX TSX可以帮助开发者更加直观和高效地编写UI组件和交互逻辑 同时也可以提高代码的
  • 深度优先搜索之素数环

    1 问题描述 输入正整数n 对1 n进行排列 使得相邻两个数之和均为素数 输出时从整数1开始 逆时针排列 同一个环应恰好输出一次 n lt 16 如输入 6 输出 1 4 3 2 5 6 1 6 5 2 3 4 2 我们这里使用dfs来进行
  • [人工智能-深度学习-31]:卷积神经网络CNN - 常见卷积神经网络综合比较大全

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120835303 目录 第1章 人工智

随机推荐

  • Linux文件权限

    Linux用户分为 拥有者 组群 Group 其他 other linux中的 文件属性过分四段 如 rwzrwz 第一段 是指文件类型 表示这是个普通文件 文件类型部分 为 表示文件 d为 表示文件夹 l为 表示链接文件 可以理解为 wi
  • 百度安全联盟砸场360的中国互联网安全大会说明啥(现场图)

    360承办的 具有官方背景的2013中国互联网安全大会22日召开 然而突发了 百度安全联盟大闹中国互联网安全大会 事件 据说各种闹场方式如百度安全联盟扩音喇叭 安全套等 传闻中的 百度安全联盟大闹中国互联网安全大会 到底真相如何 确实是安全
  • 【python爬虫】爬取豆瓣电影TOP250数据

    这次以豆瓣电影TOP250网为例编写一个爬虫程序 并将爬取到的数据 排名 电影名和电影海报网址 存入MySQL数据库中 下面是完整代码 Ps 在执行程序前 先在MySQL中创建一个数据库 pachong import pymysql imp
  • 需求:vue定时器随机显示冒泡

    html代码 div class tips div class item item1 div class txt item content div div div js代码 在data中定义indexNum生成随机数 mounted中开启定
  • 初学者如何学好Java,过来人的经验之谈

    多看书 多下载一些java相关的资料 多看多打代码 然后思考总结 书读百遍 其义自现 如果找不到合适的资料 可以上北网论坛找下适合自己的免费视频学习资料 都是一些大神买来共享的本来收费的内容 比如 由简入深绝版Java系列课程 t cn 8
  • 网站分布式技术有哪些?

    分布式软件系统 Distributed Software Systems 是支持 分布式处理的软件系统 是在由 通信网络互联的多处理机体系结构上执行任务的系统 它包括分布式操作系统 分布式程序设计语言及其编译 解释 系统 分布式文件系统和
  • 不要再循环里抛出异常

    今天遇到一个bug 是因为循环中抛出了异常 导致之后的代码都没有执行 所以哇 这种抛出有可能中断程序执行的 运行中异常 不要在循环中抛出 只记录异常就可以了 举个栗子 反面示例 try throw new Exception 我发生异常啦
  • 2019 SIGGRAPH paper

    20190704 Image Science 1 Hyperparameter Optimization in Black box Image Processing using Differentiable Proxies 基于可微代理的黑
  • Linux部署项目

    一 Linux介绍 背景 Java项目通常基于windows系统进行开发 服务器部署则是基于Linux 1 1 Linux系统概述 Linux是一套免费使用 自由传播的类unix操作系统 支持多用户 多任何 支持多线程和多CPU的操作系统
  • idea技巧之同时编辑多行代码

    如何同时编辑多行代码 eclipse好像没有这种功能 有一次看到老师用eclipse写代码 10多行 每一行添加一个单引号 一个一个添加 慢的想死 想起做前端项目使用的 webstone可以同时编辑多行代码 现在看到idea 功能如此强大
  • Window10屏幕亮度无法调节尝试解决方法

    换成win10后突然屏幕亮度调节不了 尝试几种方法 失败方法一 注册表修改 1 首先 请大家在桌面上按下Windows徽标键 R键 打开运行菜单窗口 在窗口中输入 regedit 关键字 按下回车键之后打开注册表编辑器 2 打开注册表编辑器
  • vue中使用高德地图,只加载出地图logo,地图没有加载出来

    在使用vue开发的过程中 需要使用到高德地图 但按照高德地图的官方文档配置后 只显示高德地图的logo 但是始终加载不到地图 如下图所示 解决办法 将全局引用的的mockjs注释掉就可以解决这个冲突问题
  • Elaticsearch安装越南语分词器

    1 目标 实现支持英 德 法 葡萄牙 西班牙 俄 印尼 泰 繁中 简中 日 韩 越南 意大利 阿拉伯 土耳其 乌克兰 荷兰 波兰 19种文字的分词器 2 自带的分词器 英 english 德 german 法 french 葡萄牙 port
  • 用spss进行主成分分析

    此次同样通过一道例题讲解如何运用spss进行对数据的主成分分析 下表是我国2005年第1 2季度各地区城镇居民家庭收支基本情况的统计数据 根据这些数据进行主成分分析 并依据分析结果对地区城镇居民家庭收支情况进行排序和分类 地区 平均每户人口
  • 买《Kotlin从小白到大牛》专题视频课程,送配套纸质图书

    经过一年多时间的呕心沥血 Kotlin立体化图书 Kotlin从小白到大牛 即将与大家见面了 所谓立体化图书包括 电子图书 视频 课件和服务等内容 Kotlin从小白到大牛 纸质图书已经上市 为了答谢广大学员对智捷课堂以及关老师的支持 现购
  • python x=[random.randint(0,100) for i in range(50)]什么意思?列表解析

    如有错误欢迎指正 在写python的时候遇到一个问题 其中一段代码是x random randint 0 100 for i in range 50 这个用法叫 列表解析 这句代码的功能是生成一个具有50个0 100之间的整数 具体可以看下
  • Python:简易的串口收发程序

    Python 简易的串口收发程序 更新历史 20201204 首次发布 最近需要搞一个基于Python的串口程序 要求 能够将字符串形式的十六进制数 例如 12 34 CD EF 转化成对应的二进制数据后发送给一个串口设备 能够从串口设备接
  • ChatGPT做到人人都可以配置思科华为网络设备

    最近有个一个想法 chatgpt能不能帮忙配置网络设备 于是我开始在网上找了个拓扑图 然后我将拓扑图及需求 以prompt的形式发送给chatgpt 然后chatgpt根据我的要求 将所有节点的配置全部输出了出来 真是一个新时代来了 我觉得
  • AIOps 在美团的探索与实践 —— 故障发现篇

    摘要 AIOps 最初的定义是Algorithm IT Operations 是利用运维算法来实现运维的自动化 最终走向无人化运维 随着技术成熟 逐步确定为Artificial Intelligence for IT Operations
  • Java ee学习笔记

    Servlet简介 Servlet技术规范是JavaEE技术规范中的一个重要组成部分 Servlet是一种独立于平台和协议的服务器端的Java应用程序 可以生成动态的Web页面 实际上 Servlet不仅仅是用于返回HTML的页面的 比如