JSP

#Jsp的作用和servlet相似,也是拼接网页的

#Jsp注释

1.<!-- 注释内容 -->

如果包含Java代码,这些Java代码会被执行

2.<%-- 注释内容 --%>

Jsp特有的注释,如果注释中有Java代码,会被忽略

#jsp中的java代码,包含以下三种:

--jsp表达式:<%= %>

--jsp小脚本:<% %>

--jsp声明:<%! %>

>控制页面可变内容

#jsp页面中的指令

##page指令

-作用:用于导包、设置页面属性

clip_image002

##include指令

-作用:引用jsp

clip_image004

clip_image002[1]clip_image004[1]

## taglib指令

  引入标签库

  例:

<%@ page pageEncoding="utf-8"%>
<%
@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

#jsp运行原理

clip_image006

结论:Jsp本质上就是servlet

#Jsp翻译的过程

clip_image008

#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”)%>

clip_image010

clip_image012

#模式

clip_image014

-引用了MVC设计模式对代码分层,降低代码的耦合度

#MVC

经典的设计模式,是代码的分层思想:

M:Model,业务层,用来处理业务

V:View,视图层,用来展现数据

C:Controller,控制层,用来进行调度,是业务层和视图层的桥梁。

--其目的是将代码解耦,便于开发及维护

model2:

QQ截图20190226122512

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

不同(区别)

  -有依赖关系是用转发

  -没有依赖时,用重定向

QQ截图20190226122512

QQ截图20190226122512

  --一般情况下:-查询时用转发;增删改后重定向到查询

原文地址:https://www.cnblogs.com/menbozg/p/10436152.html