`
TRAMP_ZZY
  • 浏览: 133074 次
社区版块
存档分类
最新评论

Servlet学习笔记(一)

阅读更多
1. MIME 类型是服务器对浏览器请求做出的反应类型。(如:text/html)

2. CGI 是指 Common GateWay Interface。 servlet 跟 CGI 在Web 应用中扮演着 辅助应用的角色。

3. 若在 HTML 中引入 Java 则JSP 诞生了。

4. Web 容器管理 Servlet 资源。Servlet 没有 main 方法,它们受控制于另外一个Java 应用,称之为 Container。
	Web 服务器得到一个指向 Servlet 的请求,服务器不是把这个请求交给  servlet 本身,而是交给部署该 
	Servlet 的容器。要由容器向 Servlet 提供 HTTP 请求和相应,而且要由容器调用 Servlet 的方法。

5. 当一个请求是指向 Servlet 的时候,容器会创建两个对象 HttpServletRequest 和 HttpServletResponse。之后容器会
	根据请求URL 为这个请求创建或者分配一个线程,并把请求和相应对象传给这个请求。容器调用 Servlet 的service
	方法。然后根据不同的请求类型调用 doGet 或者 doPost 方法。线程结束,容器把相应对象转换为一个HTTP 响应,
	把它发回给客户,然后删除请求和相应对象。

6. servlet 的生命周期方法由 容器 调用。

7. 使用部署描述文件把URL 映射到 servlet 。利用部署描述文件能够用一种声明的方法修改应用,而无需修改源代码。
	
8. 模型视图控制器(MVC)是把业务逻辑从 servlet 中分离出来,把它放在一个模型中,所谓模型就是一个可重用的普通
	Java 类,模型是业务数据和方法的集合。

9. 视图:负责表示。控制器从请求获得用户是输入,并明确这些输入对模型有什么影响。告诉模型自行更新,并让视图能得到新的
	模型状态。模型:实际的业务逻辑和状态可以放在模型中,模型知道用什么规则来得到和更新状态。
	
10. Tomcat 本身就能作为一个基本的HTTP 服务器,但是在HTTP 服务器功能方面,Tomcat 没有Apache 那么健壮,
	所以最常见的非EJB Web应用通常会结合使用 Apache 和 Tomcat, Apache 作为HTTP Web 服务器,Tomcat 作为 Web 容器。

11. HTML 中的请求要相当于其所在页面的URL。

12。 构建和测试模型类。在MVC 中,模型是指应用哦后台,通常是一个遗留的系统,但是现在想通过Web提供。大所属情况下,
	这只是普通的Java 代码。不能把模型限制为只能由一个Web 应用使用。
	
13. Servlet 的存在就是要为客户服务的。容器全盘控制着 Servlet 的一生,它会创建请求和响应对象,为Servlet 创建或分配
	一个线程,并调用servlet 的service 方法,把请求和相应对象的引用作为参数传递给 Servlet。
	
14. Servlet 的生命周期很简单,只有一个主要的状态初始化。如果 Servlet 没有初始化,要么正在初始化、正在撤销、
	要么就是还不存在。每个请求都在一个单独的线程中运行,容器运行多个线程来处理对一个 Servlet 的多个请求。
	
15. Servlet 总是会在为第一个客户请求提供服务之前得到初始化。init 总是在第一个 service 调用之前执行。

16. ServletConfig 对象:每个Servlet 有一个 servletConfig 对象,用于向Servlet 传递部署时信息,而不是把这个信息硬编码
	到 Servlet 中。用于访问ServletContext。参数在部署描述中配置。

17. ServletContext :每个Web 应用都有一个ServletContext ,用于访问Web 应用参数(也在配置文件中配置),相当于应用
	中的一个公告栏,可以在这里放消息,应用的其他部分可以访问这些消息。用于得到服务器信息,包括容器的名字和版本,以及
	所支持API的版本等。
	
	
18. HTTP GET方法与Servlet/doGet() 方法是有区别的。HTTP GET请求在规范中是幂等的,做多少个请求都不会对服务器产生影响。
	HTTP POST 则是非幂等的。但是可以你可以在 doGet() 方法中实现非幂等。form 表单默认的是 GET 请求。

19. 一个参数可以有多个值,这说明需要返回一个数组。getParameterValues()。利用 getInputStream() 方法可以得到请求中
	参数的原始字节,就可以利用输入流做很多事情。
	
20. getRemotePort() 得到发出请求的客户端的端口。getLocalPort() 请求最后发送到哪个端口了。getServerPort() 请求
	原来发送到哪个端口了。(服务器会为每个线程找一个不同的本地端口,这样一个应用就能同时处理多个客户了。)
	
21. Servlet 实现文件下载
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("application/jar");
		
		ServletContext ctx = this.getServletContext();
		InputStream is = ctx.getResourceAsStream("/servlet.jar");
		
		int read = 0;
		byte[] bytes = new byte[1024];
		OutputStream os = response.getOutputStream();
		while ((read = is.read(bytes)) != -1) {
			os.write(bytes, 0, read);
		}
		os.flush();
		os.close();
	}
	
22. response.sendRedirect() 和request.getRequestDispatcher("/WEB-INF/view/result.jsp").forward(request, response);
	不能在响应已经提交之后才调用response.sendRedirect() 。换句话说,如果已经向流中写了东西,再想重定向就太晚了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics