• 1. 第八章Servlet基础
  • 2. 课前回顾常用的标准动作有哪些?2018/10/232
  • 3. 预习检查Servlet与JSP之间的关系? 页面跳转有哪几种方式? 如何理解Servlet的生命周期?2018/10/233
  • 4. 本章任务使用Servlet实现JavaEye用户认证 如果用户名或密码错误,返回到登录页面(register.jsp) 如果输入数据正确,显示正确登录页面(ok.jsp) 2018/10/234
  • 5. 本章目标理解Servlet的生命周期 会使用Servlet处理Get/Post请求 会配置web.xml文件 会使用Servlet处理页面的转向 基于Servlet的会话跟踪 2018/10/235
  • 6. 为什么需要Servlet使用JSP技术如何编写服务器动态网页?在JSP技术出现之前如何编写服务器动态网页?请求 响应JSP 页面 运行执行Java代码 HTML代码 生成JSP 使用 Java 生成动态内容运行Servlet 程序2018/10/236
  • 7. 什么是Servlet(2-1)定义:Servlet 是一个 Java程序,是在服务器上 运行以处理客户端请求并做出响应的程序请求 响应Servlet 运行于服务器端2018/10/237
  • 8. 什么是Servlet(2-2) 初识Servletimport java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.println(""); out.println(" Servlet"); out.println(" "); out.println("你好,欢迎来到Servlet世界"); out.println(" "); out.println(""); out.close(); } }继承HttpServlet类Servlet输出HTML标签和内容导入所 需的包处理请 求的方法将数据 发送给 客户端2018/10/238
  • 9. Servlet与JSP关系Servlet与JSP之间的关系 JSP在服务器上转译的文件 out.write("\r\n"); out.write(" \r\n"); out.write(" MyJsp.jsp\r\n"); out.write(" \r\n"); out.write(" \r\n"); out.write(" This is my JSP page.
    \r\n"); out.write(" \r\n"); out.write("\r\n"); <%@ page contentType="text/html;charset=gbk" %> MyJsp This is my JSP page.
    MyJsp.jspMyJsp_jsp.java (.jsp转译后的.java文件)JSP转译后的.java文件与Servlet的处理方式一样Servlet是JSP技术的基础 演示示例1:Tomcat下MyJsp_jsp.java2018/10/239
  • 10. 如何创建Servlet前台页面的创建 FORM表单的编写 后台Servlet的创建 使用myEclipse的Servlet向导创建Servlet代码模板 根据表单提交方法,确定接收方法 接收请求数据、处理数据、返回响应页面2018/10/2310
  • 11. FORM表单的method属性FORM表单提交的方法 Get和Post MyJsp This is my JSP page.
    <%@ page contentType="text/html;charset=gbk" %> MyJsp
    12. 使用向导创建Servlet在myEclipse下如何创建Servlet 在myEclipse下如何创建Servlet 首先在缺省包(src)下创建s2jsp.sg.ch06包 在上述包中使用向导创建Servlet 演示示例2:创建Servlet步骤2018/10/2312
  • 13. Servlet编程模式(3-1)Servlet编程基本模式 处理Get和Post请求import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //doGet方法体内容 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //doPost方法体内容 } }使用Get方法提交,触发doGet()方法使用Post方法提交,触发doPost()方法2018/10/2313
  • 14. Servlet编程模式(3-2)Servlet编程基本模式 Servlet如何接收数据import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //doPost方法体内容 } }参数为表单元素名称接收数据与JSP相同如果是使用Get方法提交数据String userName = request.getParameter("userName"); String userPass = request.getParameter("userPass");//doGet方法体内容如果是使用Post方法提交数据doPost(request,response);2018/10/2314
  • 15. Servlet编程模式(3-3)Servlet编程的基本模式 根据结果,转向其他页面或资源 import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName=request.getParameter("userName"); String userPass=request.getParameter("userPass"); if (userName == “西软" && userPass == "123") response.sendRedirect("success.jsp"); else response.sendRedirect("failure.jsp"); } }使用response重定向到其他页面与JSP相同2018/10/2315
  • 16. Servlet的生命周期(2-1)Servlet的生命周期由Servlet容器(如:Tomcat)控制 容器如何处理请求HTTP请求容器请求 响应 12Servlet实例 Servlet通过URL找到执行service(请求,响应)34doGet(请求,响应)5响应62018/10/2316
  • 17. Servlet的生命周期(2-2)生命周期的各个阶段实例化 Servlet 容器创建 Servlet 的实例初始化 该容器调用 init() 方法服 务 如果请求 Servlet,则容器调用 service() 方法销毁实例之前调用 destroy() 方法销 毁 2018/10/2317
  • 18. 生命周期相关方法public class HelloServlet extends HttpServlet { public void init() throws ServletException { System.out.println("初始化时第一次调用!"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); out.println(""); out.println(" HelloServlet"); out.println(" "); out.println(“你好!西软 "+new Date()); out.println(" "); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } public void destroy() {System.out.println(“释放资源!"); } }初始化方法doGet()方法doPost()方法销毁方法2018/10/2318
  • 19. 程序演示运行HelloServlet 启动Tomcat服务 在地址栏内输 http://localhost:8080/S2JSPSG/HelloServlet 运行结果 演示示例3:HelloServlet2018/10/2319
  • 20. 现场编程 请使用Servlet编写在页面显示“你好,西软!”的程序代码… public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GBK"); //设置中文 PrintWriter out = response.getWriter(); //使用输出流,向客户端输出信息 out.println(""); out.println("HelloServlet"); out.println(""); out.println(“你好,西软!"); out.println(""); out.println(""); out.flush(); out.close(); } …2018/10/2320
  • 21. 常见错误如果程序运行结果如下:public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charSet=GBK");//设定中文 PrintWriter out = response.getWriter(); //使用输出流,输出信息 } }设定中文的语句,哪里有错误吗?charset而不是charSet出现了乱码,什么原因呢?2018/10/2321
  • 22. Servlet的部署(2-1)每个Servlet为一个组件,必须部署到Tomcat中才能运行 与JSP相同 在Tomcat中部署 部署要遵守容器特定的规定 2018/10/2322
  • 23. Servlet的部署(2-2)在Tomcat中如何部署tomcatwebappsstoreWEB-INFindex.htmltest.jsplibclasses*.jarHelloServlet.classweb.xml显示页面第三方jar文件.java编译后 的.class文件程序配置文件必须的tomcat主目录文档根目录2018/10/2323
  • 24. Servlet的配置 在web.xml文件中配置Servlet 如何访问Servlet HelloServlet s2jsp.sg.ch06.HelloServlet HelloServlet /HelloServlet 两个名称必须相同为了方便使用Servlet,取个别名完整的包名+类名访问Servlet的URL2018/10/2324
  • 25. 常见错误web.xml文件常见错误 servlet-mapping中的name与servlet-name中的name不一致 添加多个mapping映射 Helloservlet y2javaee.sg.ch02.HelloServlet HelloServlet /HelloServlet 请指出哪里有错误?servlet-name不一致 HelloServlet s2jsp.sg.ch06.HelloServlet HelloServlet /HelloServlet HelloServlet /HelloServlet2 多余的mapping请指出哪里有错误?2018/10/2325
  • 26. 转向控制数据的传递方式 从页面到Servlet request.getParameter(“param”); 从Servlet到Servlet或JSP页面 RequestDispatcher对象的forward()方法 JSP的forward动作实质是RequestDispatcher技术 String pass = request.getParameter("password"); String user = request.getParameter("loginName"); if (user.equals(“西软") && pass.equals("西软")) { request.setAttribute("loginname", user); RequestDispatcher dispatcher = request.getRequestDispatcher("/ch06/ok.jsp"); dispatcher.forward(request, response); } else { response.sendRedirect("/ch06/register.jsp"); }定义一个转发器进行转发存储要传递的数据2018/10/2326
  • 27. 本章小节1如何理解Servlet程序?Servlet的作用是什么? request、response对象有哪些常用方法? 实现页面跳转有几种方式?它们之间有哪些区别? 如何理解Servlet的生命周期? web.xml文件在Web项目中的作用是什么?2018/10/2327
  • 28. 会话跟踪(3-1)HttpSession对象 服务器为每个会话创建一个HttpSession对象 每个会话对象都有一个唯一的ID 把用户的数据保存在相应的HttpSession对象内 第一次请求响应服务器创建一个HttpSession对象 并把该对象的ID返回给用户同时,服务器在内存中开辟 一空间,用来保存该对象数据把ID发送给客户端第二次请求把ID一 起发送给服务器根据ID号服务器寻找 内存中相应的数据2018/10/2328
  • 29. 会话跟踪(3-2)请求 1请求 2 请求 n…….什么是会话 当前浏览器与服务器间多次的请求、响应关系,被称作一个会话 2018/10/2329
  • 30. 使用会话的示例public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); Object count = session.getAttribute("COUNTER"); int counter = 0; if (count == null) { counter = 1; //将第一次计数存入session session.setAttribute("COUNTER", new Integer(1)); } else { counter = ((Integer) count).intValue(); counter++;//计数加一 //将计数存入session session.setAttribute("COUNTER", new Integer(counter)); } }取出session对 象内存储的值把数据存储在 session对象内记录不同用户的访问次数 演示示例1:网页计算Counter.java获得session对象2018/10/2330
  • 31. 会话的创建和使用 public HttpSession getSession(); public HttpSession getSession( boolean value); 会话的创建 使用HttpServletRequest 的 getSession() 方法创建会话, 语法如下: 会话的使用 使用HttpSession接口的方法,进行 保存数据: 取出数据:public void setAttribute(String param,Object value); public Object getAttribute(String param);获取session 对象的方法getSession( )getSession(boolean bool )getSession( true )truefalse返回与当前关联的 会话,如果没有就 创建后将其返回返回与当前关联 的会话,如果没 有返回null使用时,将其转换成原来数据类型2018/10/2331
  • 32. 会话的创建和使用 public HttpSession getSession(); public HttpSession getSession( boolean value); 会话的创建 使用HttpServletRequest 的 getSession() 方法创建会话, 语法如下: 会话的使用 使用HttpSession接口的方法,进行 保存数据: 取出数据:public void setAttribute(String param,Object value); public Object getAttribute(String param);获取session 对象的方法getSession( )getSession(boolean bool )getSession( true )truefalse返回与当前关联的 会话,如果没有就 创建后将其返回返回与当前关联 的会话,如果没 有返回null使用时,将其转换成原来数据类型2018/10/2332
  • 33. session对象的存在周期 session对象的存在周期 session的创建 浏览器访问服务器时,服务器为每个浏览器创建不同的session对象 session的关闭 调用session. invalidate()方法,使session对象失效 访问时间间隔大于非活动时间间隔, session对象失效 关闭浏览器时,session对象失效请求在内存开辟空间 保存数据信息清空内存内当前浏 览器相关数据信息2018/10/2333
  • 34. 现场编程 在登录页面用户已录入用户名,现编写一个Servlet接 收该数据,并把用户名值保存在HttpSession对象内… public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName=request.getParameter("userName"); HttpSession session=request.getSession(); if (userName!=null && "".equals(userName)) session.setAttribute("userName", userName); else response.sendRedirect("index.html"); } ...2018/10/2334
  • 35. 本章总结理解Servlet的生命周期 会配置web.xml文件 在Web项目中为什么需要使用会话? 会话是如何创建的? 如何结束一个会话? 如何在会话中保存和取得数据? 2018/10/2335
  • 36. 本章作业理论作业 课后习题(根据带课老师的具体要求) 上机作业 课后上机题全做 (根据带课老师的具体要求)2018/10/2336
  • 37. 2018/10/2337