JavaEE开发-第七节 JavaEE补充(Servlet、JSP补充)

Servlet补充

  1. 有init、destroy生命周期方法

     @Override
     public void init() throws ServletException {
         super.init();
         //servlet第一次创建的时候调用
         //servlet对象是第一次发请求的时候创建,以后再不会创建
     }
    
     @Override
     public void destroy() {
         super.destroy();
     }
    
  2. 可以通过注解、XML方式使用
    1. 注解

       @WebServlet("/contact/*")
      
    2. xml(web.xml中)

       <servlet>
           <servlet-name>ContactServlet</servlet-name>
           <servlet-class>com.zh.xr.servlet.ContactServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>ContactServlet</servlet-name>
           <url-pattern>/contact/*</url-pattern>
       </servlet-mapping>
      
  3. 可以使用loadOnStartup属性设置Servlet的创建时机
    1. 负数
      1. 首次访问Servlet时,才创建Servlet
      2. 默认值是:-1
    2. 非负数
      1. 项目部署到Web容器中时就会创建Servlet
      2. 数值越小,越先创建
    3. 举例:

       //注解
       @WebServlet(value = "/contact/*",loadOnStartup = 1)
       //也可以用xml
      

ServletContext

  1. 一个ServletContext对象就代表一个Web应用,相当于iOS的UIApplication对象,可以用来与Web容器(Tomcat)通信
  2. 获取ServletContext
    1. request.getServletContext()
    2. servlet.getServletContext()
  3. 常用方法
    1. getMIMEType
    2. setAttribute\getAttribute\removeAttr
      1. 用来共享数据
      2. request也有相同的方法,但是共享范围只能在同一个请求的servlet转发之间共享
      3. ServletContext可以在整个应用程序中共享
      4. session只能在一个客户端发送不同请求时数据共享,ServletContext可以在n个客户端发送的数据之间共享
      5. 数据共享范围:request<session<ServletContext
    3. getRealPath
     //获取文件类型
     request.getServletContext().getMimeType("文件的路径")
     //这只一个图片的路径
     ServletContext ctx = request.getServletContext();
     String filename = UUID.randomUUID() + "." + FilenameUtils.getExtension(item.getName());
     String image = BASE_DIR + "/" + IMG_DIR + "/" + filename;
     String filepath = ctx.getRealPath(image);
    

JSP的9大内置对象

  1. jsp的本质就是servlet
    1. 也就是说servlet中有的对象,jsp中也有
  2. 如下表

     名字              类型                  作用
     request         HttpServletRequest      
     response        HttpServletResponse
     session         HttpSession
     application     ServletContext          就是ServletContext
     page            Servlet                 等价于this,代表当前的servlet对象
     pageContext     PageContext             在当前页面内共享数据,jsp特有对象,可以用setAttribute\getAttribute\removeAttr设置临时存储数据,但是仅限于当前的jsp共享
     out             JspWriter               输出内容到页面,response.getWriter().write()= out.write()
     config          ServletConfig
     exception       Throwable
    
  3. 4个域对象:pageContext、request、session、application
    1. 共享范围从左至右,逐渐增大

利用EL表达式从JSP域对象中获取数据

  1. 下表

     EL表达式                   对应的JSP域对象
     pageScope                   pageContext
     requestScope                request
     sessionScope                session
     applicationScope            application
    
  2. 也就是说这些对象只能在el表达式中使用

     <input type="text" value="${
         user.name
     <%--    pageScope.name--%>
     <%--    requestScope.name--%>
     <%--    sessionScope.name--%>
     <%--    applicationScope.name--%>
       }">
    
    1. 如果写了user.name,就相当于没有指定到那个域去获取,那么EL表达式会做如下操作
      1. 先通过pageScope.user.name获取值,如果获取不到
      2. 通过requestScope.user.name获取值,如果获取不到
      3. 通过sessionScope.user.name获取值,如果获取不到
      4. 通过applicationScope.user.name获取值
  3. 还有一个对象param

    1. 如果客户端访问的jsp有参数如何获取?比如:http://localhost:8080/xr/page/test.jsp?name=zh
    2. 在jsp中,如果在java代码中

       <%
           request.getParameter("name");
       %>
      
    3. 在EL表达式中用param获取

       <%--EL表达式中使用param获取--%>
       <input value="${param.name}">
       <%--错误--%>
       <input value="${requestScope.getParameter("name")}">
      

JavaEE总结

  1. 也是javaweb项目,用于实现web端->服务端的网络请求的后台应用程序
  2. 如何用Idea新建一个javaweb项目
  3. 代码技术实现:
    1. 依赖Tomcat的技术:
      1. servlet实现客户端网络请求监听与响应
      2. JSP(特殊的servlet)展示web端页面
      3. Filter过滤客户端的网络请求
      4. Listener监听整Tomcat的部署与销毁
    2. 依赖于JavaSE(JDK)的JDBC框架来连接、执行sql语句、驱动数据库,常用的第三方框架为Spring JDBC
  4. 可以说JavaEE学习的就是Tomcat
  5. 后序为什么会出现SSM框架?
    1. MyBatis:是对持久层(DAO层)的框架,对JDBC的封装,简化代码
    2. Spring:
    3. SpringMVC:
Table of Contents