JSP
#Jsp的作用和servlet相似,也是拼接网页的
#Jsp注释
1.<!-- 注释内容 -->
如果包含Java代码,这些Java代码会被执行
2.<%-- 注释内容 --%>
Jsp特有的注释,如果注释中有Java代码,会被忽略
#jsp中的java代码,包含以下三种:
--jsp表达式:<%= %>
--jsp小脚本:<% %>
--jsp声明:<%! %>
>控制页面可变内容
#jsp页面中的指令
##page指令
-作用:用于导包、设置页面属性
##include指令
-作用:引用jsp
## taglib指令
引入标签库
例:
<%@ page pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
#jsp运行原理
结论:Jsp本质上就是servlet
#Jsp翻译的过程
#jsp中的隐含(内置)对象:9个
-request(*): HttpServletRequest
-response: HttpServletRequest
-out: JSPWriter类似于PrintWriter
-config: ServletConfig
-application: ServletContext
-exception: Throwable jsp翻译成的Servlet所抛出的异常
-session(*): HttpSession
-page: Object 相当于this,指代翻译成的那个Servlet
-pageContext(*): PageContext 是管理者,通过它可以获取其他8个隐含对象
#如何在jsp上使用隐含对象
- <%Object user = session.getAttribute(“user”);%>
- <%=session.getAttribute(“user”)%>
#模式
-引用了MVC设计模式对代码分层,降低代码的耦合度
#MVC
经典的设计模式,是代码的分层思想:
M:Model,业务层,用来处理业务
V:View,视图层,用来展现数据
C:Controller,控制层,用来进行调度,是业务层和视图层的桥梁。
--其目的是将代码解耦,便于开发及维护
model2:
package web; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.EmpDao; import dao.EmpDaoImp; import entity.Emp; public class FindEmpServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { //处理业务 EmpDao dao = new EmpDaoImp(); List<Emp> list = dao.findAll(); //转发:让jsp继续完成这个请求 //1.将数据绑定到request上 req.setAttribute("emps", list); System.out.println(req); //2.将请求提交给jsp,让它继续处理,同时将处理请求的工具交给jsp:request+response //当前:/jsp2/findEmp //目标:/jsp2/emp_list.jsp req.getRequestDispatcher("emp_list.jsp").forward(req, res); } }
<%@ page contentType="text/html" pageEncoding="utf-8" import="entity.*,java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>查询</title> </head> <body> <table border = "1" cellspacing = "0" width = "40%"> <tr> <td>编号</td> <td>姓名</td> <td>职位</td> <td>月薪</td> </tr> <% List<Emp> list = (List<Emp>)request.getAttribute("emps"); if(list != null){ for(Emp emp:list){ %> <tr> <td><%=emp.getEmpno() %></td> <td><%=emp.getEname() %></td> <td><%=emp.getJob() %></td> <td><%=emp.getSal() %></td> </tr> <% } } %> </table> </body> </html>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>jsp2</display-name> <servlet> <servlet-name>findEmp</servlet-name> <servlet-class>web.FindEmpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>findEmp</servlet-name> <url-pattern>/findEmp</url-pattern> </servlet-mapping> </web-app>
--此处使用到了转发的概念
##转发和重定向的异同点:
相同:都是解决web组件之间的跳转问题;web组件:Servlet/jsp
不同(区别):
-有依赖关系是用转发
-没有依赖时,用重定向
--一般情况下:-查询时用转发;增删改后重定向到查询