深入理解JSP原理

来源:互联网 发布:云计算最大的特征是() 编辑:程序博客网 时间:2024/05/17 02:02

JSP工作原理:

1.JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,是一种动态网页技术标准。
2.说明:jsp在返回给浏览器的数据默认是text/html格式的,默认编码和pageEncoding一致;
3.<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8" import="java.util.*"%>
   - pageEncoding:设置JSP文件自身的编码;
   - contentType:设置向浏览器输出的内容的格式及编码;
4.jsp可以不单独使用,可以被其他jsp引用。由于其他JSP内已经包含了head、body,所以该JSP可以省略这2个标签;
5.jsp中可以直接写HTML、CSS、JS;

5.翻译过程:

隐含(内置)对象:

1. request<HttpServletRequest>
2. response<HttpservletResponse>
3. out<JspWriter和PrintWriter一样>
4. config<ServletConfig>
5. application<ServletContext>
6. exception<Throwable、必须在发生异常时才能使用>
7. session<HttpSession>
8. page<Object、就是对当前JSP的引用其实就是对Servlet的引用、相当于this>
9. pageContext<PageContext、页面的环境可以给页面提供数据、通过该对象可以获取其他8个对象>

使用示例:

1. <% String str=request.getParameter("user");%>
2. <%=request.getParameter("user");%>

开发模式(MVC):

1.web组件的内容包含了HTML和Java,耦合度高,不利于团队开发和维护代码;
2.MVC模式是经典的设计模式,是代码的分层思想:
   - M:Model,即业务层,用来处理业务;
   - V:View,即视图层,用来显示数据;
   - C:Controller,即控制层,用来管理和调度程序,它是M和V的桥梁;
3.其目的是降低代码之间的耦合度,便于团队开发及维护;

转发和重定向:

1.转发和重定向都是用来解决WEB组件之间的跳转问题;
2.WEB组件:处理请求的组件,Servlet和JSP;
3.依赖时用转发,不依赖时用重定向;
4.转发:
   - 一次请求;
   - 地址不变;
   - 共用一个request,所以可以共用数据;
   - 不能转发到外部资源;
//findEmp是网名,即跳转到另一个Servlet组件上res.sendRedirect("findEmp");
5.重定向:
   - 二次请求;
   - 地址改变;
   - 两个request,不能通过它共享数据;
   - 可以重定向到外部资源;
//构造数据,查询所有的员工EmpDao dao = new EmpDao();List<Emp> list = dao.findAll();//将请求转发给JSP//1.将数据绑定在request上,以提交给JSP。req.setAttribute("emps", list);//2.转发给JSPreq.getRequestDispatcher("emp_list.jsp").forward(req, res);
6.通常,查询时用转发;增加、修改、删除后重定向到查询;

EL和JSTL:

 JSTL原理:


EL和JSTL使用案例:

1.JSTL常见的使用if、choose、forEach以及自定义标签:
<%@page pageEncoding="utf-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@taglib uri="/lhh-tag" prefix="s"%><!doctype html><html><head>   <meta charset="utf-8"></head><body> <h1>JSTL</h1> <!-- 1. if --> <c:if test="${stu.sex=='M' }">男</c:if> <c:if test="${stu.sex=='F' }">女</c:if> <!-- 2. choose --> <c:choose><c:when test="${stu.sex=='M' }">男</c:when><c:otherwise>女</c:otherwise> </c:choose> <!-- 3. forEach 每次循环JSTL会创建一个对象,用来存储循环次数等值。可以通过varStatus属性声明该对象的变量,从而来访问该对象,获取循环次数等值。 --> <c:forEach items="${stu.interests }" var="itr" varStatus="s">${itr },${s.index },${s.count } </c:forEach> <!-- 4.自定义标签 --> <s:sysdate /> <s:sysdate format="yyyy-MM-dd" /></body>
2.EL常见使用获取bean属性、支持运算、获取请求参数:
<%@page pageEncoding="utf-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@taglib uri="/lhh-tag" prefix="s"%><!doctype html><html><head>  <meta charset="utf-8"></head><body><h1>EL</h1><!--  1.获取bean属性 stu.name == request.getAttribute("stu").getName() stu.course.id == request.getAttribute("stu").getCourse().getId()--><p>姓名:${stu.name }</p><p>年龄:${stu["age"] }</p><p>课程ID:${stu.course.id }</p><!-- EL默认从以下4个对象(范围)中依次取值:  page,request(*),session(*),application即:  -> page.getAttribute("stu")  -> request.getAttribute("stu")  -> session.getAttribute("stu")  -> application.getAttribute("stu")取值对象(范围)也可以指定:  sessionScope.stu.name--><p>课程:${requestScope.stu.course.name }</p><!-- 2.支持运算 --><p>年龄+10:${stu.age+10 }</p><p>是否大于20:${stu.age>20 }</p><p>是否介于20-30:${stu.age>20 && stu.age<30 }</p><p>是否为空:${empty stu }</p><p>是否为空换个写法:${stu == null }</p><!-- 3.获取请求参数:   param.x == request.getParameter("x")   paramValues.y == request.getParameterValues("y") --><p>参数:${param.x }</p></body></html>






原创粉丝点击