Servlet:是一个接口,一个规范(sun公司并没有去实现它),它的实现是由各大服务器厂商(Tomcat)去完成
JSP(java server page):java服务器端(动态)网页,JSP就是Java中用来做动态网页的技术;底层就是一个Servlet,可不是一个html
问:如果想把页面做好看一些,怎么做?
很明显Servlet是不行的,所以需要用到JSP(看上去就跟HTML页面差不多),Servlet主要是处理业务为主(Java后台代码),JSP主要以表现为主(HTML,CSS,JS等前端代码);
Servlet更擅长逻辑的编写,Jsp更擅长于数据的显示,所以servlet里面不要写HTML代码,jsp里面不要写java代码;
========================================================
Servlet的三大职责
1.接收请求参数(封装) ;
2.调用业务方法处理业务(去调用业务层);
3.响应请求(跳转页面或其他Servlet);
如何写一个servlet?
新建一个类去实现Servlet接口或者去继承HttpServlet类(建议),并实现或重写service业务方法;
然后(法一:在web.xml进行配置)交给Tomcat管理:
进行地址映射,匹配请求:
整体流程:
(法二:使用注解)不用在web.xml里配置,换成在servlet类上面加注解即可@WebServlet,注意的是:需要设置metadata-complete=”false”或者说不写这个属性,那么这个注解才有用
servlet中的转发与重定向
req.getRequestDispatcher("/WEB-INF/login.html").forward(req, resp);
resp.sendRedirect("/day034/login.html");
Servlet是单例的(同一个线程发送多次请求,只会创建一个对象:成员变量、也只有一份)。所以Servlet是线程不安全的,所以绝对不要使用成员变量
==============================================================
jsp有对应的.java文件,也会被编译为.class文件,位置是在Tomcat安装目录的work\Catalina文件夹下
jsp的注释:<%-- --%>
JSP中的JAVA代码
1.JSP表达式:<%= 表达式%>,实际上就是调用输出流打印到页面上:out.print(表达式)
jsp页面:<%= new java.util.Date().toLocaleString() %>
对应的.java文件:
浏览器页面:
2.JSP小脚本:<% Java语句;%>,就是在对应.java文件的_jspService方法中写
3.JSP申明:<%! Java代码;%>,就是在.java文件中的实例变量
==========================================================
JSP三大指令
1.page:页面指令
<%@page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8” errorPage="/myerror.jsp" >
errorPage:如果当前页面出错,就跳转到对应的页面,只对当前页面有效
在web.xml里面也可以配置错误页面:所有页面有效
跳转之后,要在错误页面设置isErrorPage才能接收发送错误页面的错误信息
2.include:包含指令,被包含的页面叫做jsp片段,文件类型可用.jspf
它与JSP动作元素:jsp:include同效,但是后者不能用片段,即.jspf结尾的文件类型
动态包含与静态包含的区别
1.动态包含指的是标签jsp:include,静态包含指的是指令include,它们包含的时机不同:
(1)静态包含先把页面包含进来,再翻译成java代码(只有一个文件);
(2)动态包含先都编译成java代码,再将内容进行包含(有多个文件);
2.什么时候用动态包含,什么时候用静态包含?
(1)如果包含的是静态页面(html),那么使用静态包含;
(2)如果包含的是动态网页(jsp),那么使用动态包含;
3.taglib:标签指令(JSTL:);
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
=============================================================
九大内置对象
原理:JSP内置对象的实质,就是在jsp对应的.java文件中,要么是_jspService()方法的形参,要么是在_jspService()方法的局部变量,这些都是已经被定义好的,所以在JSP脚本或者表达式中直接调用这些对象,无需创建它们
============================================================
四大作用域对象
属于9大内置对象里面的,用来共享或传递数据的
对于Servlet来说,同样有这四个作用域对象,但不是内置的,使用之前必须先创建
在service方法中操作作用域对象
修改:就设置一个相同的key,会进行覆盖value的
页面取值,但是不同作用域有相同key时,从小到大,就近原则