深入理解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>
阅读全文
0 0
- 深入理解JSP原理
- 深入理解Servlet/JSP之“Servlet和JSP原理”
- 深入理解Servlet/JSP之“Cookie和Session原理
- 深入理解Servlet/JSP之Cookie和Session原理
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 深入理解JSP
- 深入理解JSP
- 深入理解Ajax原理
- 深入理解Ajax原理
- 深入理解Memcache原理
- 深入理解Memcache原理
- 深入理解Ajax原理
- vue懒加载
- Codeforces 343D Water Tree 题解&代码
- Android WebView
- Python之机器学习01——决策树
- Laravel Excel导出xls乱码
- 深入理解JSP原理
- 编译警告...请使用 -Xlint:deprecation 重新编译 [或-Xlint:unchecked]
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- retrofit2.0 封装
- layer弹出的iframe层在执行完毕后关闭当前弹出层
- CPU-bound(计算密集型) 和I/O bound(I/O密集型)
- Web前端面试常见问题
- 关于红黑树插入过程的正确描述
- HTML页面跳转