• 1. Web后台开发入门鲁铁华2018年10月21日
  • 2. 目的2从J2ME/J2SE程序员的角度,来理解web开发的过程 不关注各个服务器或框架是如何配置和使用的 关注于框架或技术的原理 希望能够对web开发有一个较为深刻的理解 共同学习
  • 3. 目录3Web应用技术发展过程 Web服务器DIY Tomcat源码学习
  • 4. Web应用技术发展过程4CGI Servlet JSP Structs(MVC) Structs2/SpringMVC
  • 5. CGI5静态页面不能满足要求,需要动态内容 CGI(Common Gateway Interface)公共网关接口 CGI程序在服务器端执行,最流行的CGI语言是Perl和shell脚本 CGI的缺点 允许别人在你的系统上执行程序 需要为每一个请求启动一个系统进程 需要为每一个请求加载一次CGI程序 需要重复编写处理网络协议的代码 也可以用Java语言编写CGI程序,但这需要先启动JVM,再启动Java程序,开销更大,只是理论上可行
  • 6. Servlet6为了改进CGI,Sun引入了Servlet Java代码不用像Applet那样在浏览器中运行,改在服务器上运行 Servlet优点 只需要启动一个进程以及加载一个JVM 多个请求需要做相同处理时,主要加载一次类 Servlet缺点 在Java代码中输出html流(output.println(“”);) 容易出错,没有可视化显示 前端开发人员无法进行页面风格等设计与修改 对HTML的一个小改动,就得修改和重新编译Servlet源码 Servlet容器 加载、卸载、重新加载、执行Servlet代码
  • 7. JSP7仿ASP,Sun推出JSP,加强Servlet JSP(Java Server Pages) 第一次访问.jsp文件时,JSP引擎将.jsp文件翻译成.java的源文件(继承自HttpServlet类),编译成.class后加载到虚拟机,相当于在JVM中动态生成了一个Servlet 第二次访问时,直接使用内存中的Servlet,除非.jsp文件发生改变,才会重新加载 JSP最终还是被编译为Servlet,只不过比纯Servlet开发页面更简单 优点:前端开发人员可以进行页面风格的设计与修改 缺点:表现逻辑、控制逻辑、业务逻辑混杂一起
  • 8. Structs8JSP Model1(JSP+JavaBean)
  • 9. Structs9JSP Model2
  • 10. Structs10Structs
  • 11. Web服务器DIY11《How Tomcat Works》 Ex01-静态 ServerSocket Accept new File(WEB_ROOT, uri); Ex02-Servlet HttpServer2 If(request.getUri().startsWith(“/servlet”)) ServletProcessor2.process URLClassLoader Servlet.service(request, response);
  • 12. Web服务器DIY12Ex03-Connector Bootstrap HttpConnector HttpRequest HttpResponse HttpProcessor ServletProcessor Ex04-Container HttpConnector SimpleContainer
  • 13. HTTP请求处理过程13
  • 14. HTTP请求处理过程14http://localhost:8080/myapp/test.jsp 请求被发送到本机8080端口,被在那里监听的Connector获得 Connector把该请求交给它所在Service的Engine来处理,并等待回应 Engine根据localhost匹配Host Host根据/myapp匹配Context Context获得请求/test.jsp,在mapping table中寻找对应的servlet Context匹配到URL Pattern为*.jsp的Servlet,对应于JspServlet类 构造HttpServletRequest/HttpServletResponse对象,调用JspServlet的 service方法 Context把执行完成后的HttpServletResponse对象返回给Host Host把HttpServletResponse对象返回给Engine Engine把HttpServletResponse对象返回给Connector
  • 15. Session15Cookie HTTP协议是无状态的(每次关闭socket连接) 浏览器客户端保存Cookie HTTP头中Cookie:key1=value1;key2=value2 第一次从服务器返回 不安全 Session 保存在服务器端 Set-Cookie: JSESSIONID=D5A5C79F3C8E8653BC8B4F0860BFDBCD JSP自动生成,Servlet中HttpSession session = request.getSession() Cookie.setMaxAge(3600) 通过url来传递session id http://localhost:8080/test/MyJSP.jsp;jsessionid=xxx
  • 16. 16