课程地址
http://ss.sysu.edu.cn/~pml/dct/3_web_prog.html
实验内容
编写简单 CGI 程序。
- 先是安装Apache(Windows环境): http://jingyan.baidu.com/article/d8072ac47baf0eec95cefdca.html
- 在修改完httpd.conf配置文件后,用bin目录下的ApacheMonitor.exe程序打开服务器
在Apache安装存放的目录地址下的bin\cgi-bin文件夹编写一个hello world程序。
#include <stdio.h> int main() { printf("Content-Type: text/html\n\n"); printf("Hello, world!\n"); return 0; }
- 使用指令
gcc hello.c -o hello.cgi
编译 - 在浏览器输入 http://localhost/cgi-bin/hello.cgi ,可以看到程序的输出(这里我输入的地址是localhost:8088是因为我改了httpd.conf的地址,如果没有改过直接输入前面的地址即可)
- 编写简单Web程序。
因为电脑带的JetBrains全家桶,所以没用Eclipse IDE而是用的IntelliJ IDEA
- jettyMavenHelloWorld(这个没截过程图,就放个结果图好了,步骤与Webapp的差不多)
- JettyMavenHelloWarApp:
- 创建项目时选择maven-achetype-webapp
- Id的东西随便填
- 默认选项即可
- 项目名称
- 项目创建后等待一段时间,maven构造项目后,目录结构如下
- 接下来的就是按照老师的网站建立java文件夹(需要设置为资源文件夹),建立org.example包与HelloServlet.java。
- 注意修改pom.xml的时候不要直接覆盖。看缺哪些就添加哪些。
- 运行Maven
- 运行成功后,打开localhost:8080/hello
- 创建项目时选择maven-achetype-webapp
- jettyMavenHelloWorld(这个没截过程图,就放个结果图好了,步骤与Webapp的差不多)
实验报告
用自己的语言简单说明 cgi 编程的优点和缺点
- 优点:使网页具有交互功能;可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量;稳定性高;可以独立运行。
- 缺点:每秒支持的击点率不高。
在 cgi 实验的基础上,简述 middleware 在程序开发中的作用
连接两个独立应用程序或独立系统,相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。
搜索 org.eclipse.jetty.server.handler.AbstractHandler 类
- 解释 Java API 页面的组织
- 这个类实现了哪个接口,这个接口有哪些方法?
- 文档地址:http://download.eclipse.org/jetty/stable-9/apidocs/
- 实现了Handler接口
Java web 编程有几个元素是我们编程学习的重要内容:
javax.servlet.http.HttpServletRequest
javax.servlet.http.HttpServletResponse
javax.servlet.ServletRequest
javax.servlet.ServletResponse
- 它们是 类 还是 接口?是那个机构定义?
它们是接口。
response.getWriter()
中getWriter
返回的对象是什么?PrintWriter。
简述
javax.servlet.ServletResponse
的getOutputStream()
和getWriter()
的区别- 返回的对象不一样,getOutputStream()返回的是ServletOutputStream对象,而getWriter()返回的是PrintWriter对象。
- getOutputStrea()方法用于返回Servlet引擎创建的字节输出流对象,Servlet程序可以按字节形式输出响应正文。
- getWriter()方法用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以按字符形式输出响应正文。
对比
javax.servlet.http.HttpServletResponse
和javax.servlet.ServletResponse
的方法。这是一个典型装饰模式, HttpServletResponse 添加了哪些新职能?HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。
Maven 默认的本地仓库路径是什么? 找到 JettyMavenHelloWarApp 打包的 war 文件的位置。
Windows下是:C:\Users{username}.m2\repository
War文件在项目路径下的target文件夹(!)阅读 org.eclipse.jetty.server.Server 源代码,简述这个类的关键代码。