JSP-----Java Server Pages

一.基础

1. 概念
  • Java Server Pages:java服务器端页面
    * 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
    * 用于简化书写!!!
    * JSP本质上就是一个Servlet
2. 脚本
  • JSP定义Java代码的方式

<% 代码 %>:定义的java代码,在service方法中,service方法中可以定义什么,该脚本中就可以定义什么

<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。

<%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

  • 将5名员工信息(编号,姓名,年龄)存入List集合中,在jsp页面遍历集合,结合table标签展示员工数据。
public class Emp {
    private int id;
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Emp() {
    }

    public Emp(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
<%@ page import="pojo.Emp" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        tr:hover{
            background-color: cornflowerblue;
        }
    </style>
</head>
<body>

<%--
1. <%  代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
2. <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
3. <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
--%>

<table border="2" cellpadding="25" cellspacing="0" align="center">
    <%--定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。--%>
    <%
        Emp e1 = new Emp(1,"aa",55);
        Emp e2 = new Emp(2,"啊啊",55);
        Emp e3 = new Emp(3,"得到",34);
        Emp e4 = new Emp(4,"弟弟",43);
        Emp e5 = new Emp(5,"哈哈",22);
        Emp e6 = new Emp(6,"玖玖",78);
        Emp e7 = new Emp(7,"大狙",90);
        ArrayList<Emp> emps = new ArrayList<>();
        emps.add(e1);
        emps.add(e2);
        emps.add(e3);
        emps.add(e4);
        emps.add(e5);
        emps.add(e6);
        emps.add(e7);
        //输出
        for (int i = 0; i <emps.size() ; i++) {
%>
        <tr>
            <td><%=emps.get(i).getId()%></td>
            <td><%=emps.get(i).getName()%></td>
            <td><%=emps.get(i).getAge()%></td>
        </tr>
<%
        }
    %>
    <%--在jsp转换后的java类的成员位置。--%>
    <%! %>
    <%--会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。--%>
    <%= 1%>
</table>
</body>
</html>

在这里插入图片描述

二.高级

1.三大指令
  1. page 用于声明jsp: jsp=html+page指令
  2. taglib 用于导入外部资源标签库,jstl
  3. include 静态包含,一个jsp页面可以包含另一个jsp页面
  • page指令的属性
  1. contentType=“text/html;charset=UTF-8” 指定jsp文件的mime类型和字符集
  2. import=“java.util.*” 为jsp的脚本中的Java代码去导包
  3. errorPage=“500.jsp” 如果当前页面发生异常,就跳转到500.jsp中
  4. isErrorPage=“true” 承认自己是不是错误处理页面,如果为true就可以使用exception内置对象
  • include指令

静态包含 – 两个jsp之间使用静态包含,会被tomcat服务器编译成一个servlet,可以实现脚本互通

  • <%@include file="top.jsp"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="15"  >
    <tr>
        <td>员工号</td>
        <td>员工</td>
        <td>工资</td>
    </tr>
<%--
    静态包含 -- 两个jsp之间使用静态包含,
    会被tomcat服务器编译成一个servlet,可以实现脚本互通
    <%@include file="top.jsp"%>
--%>
    <%@include file="b.jsp"%>
</table>
</body>
</html>
  • taglib

引入外部标签库,通常用于引入jstl标签

  • <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
    *prefix:前缀,自定义的
2.内置对象
  • 注释
<%-- jsp注释 --%>  该注释中的java脚本不会被执行
<!-- html注释-->   该注释中的java脚本会被执行,但是执行结果会被注释
  • 九个内置对象

在jsp页面中不需要创建,直接使用的对象一共有9个:

变量名真实类型作用
pageContextPageContext当前页面共享数据,还可以获取其他八个内置对象
requestHttpServletRequest一次请求访问的多个资源(转发)
sessionHttpSession一次会话的多个请求间
applicationServletContext所有用户间共享数据
responseHttpServletResponse响应对象
pageObject当前页面(Servlet)的对象 this
outJspWriter输出对象,数据输出到页面上
configServletConfigServlet的配置对象
exceptionThrowable异常对象
  • 归类:
  1. 域对象(从小到大)

    pageContext
    request
    session
    application

  2. 其它(页面 就算有 异常 也要 响应 输出 配置)

    page
    exception
    response
    out
    config

3.jsp发展史和mvc
  • javaWeb发展史

1.早期只有servlet,只能使用response输出标签数据,非常麻烦
2.后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,又有html标签,造成难于 维护,难于分工协作
3.再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性

总结
1.只有servlet,如果响应动态资源,必须使用response.writer()去输出大量的标签

2.jsp出生和繁荣,完全依赖jsp,省略了servlet,优点:便于开发,缺点:耦合度高,代码非常不清晰

3.mvc模式,jsp和servlet共存,jsp中只有少量的java代码,主要还是用于页面展示,核心功能放在servlet中

  • mvc – 一种软件设计典范
  1. M:Model,模型。JavaBean
    * 完成具体的业务操作,如:查询数据库,封装对象
  2. V:View,视图。JSP
    * 展示数据
  3. C:Controller,控制器Servlet
    * 获取用户的输入
    *调用模型
    * 将数据交给视图进行展示
  • 优缺点:
  1. 优点:
    耦合性低,方便维护,可以利于分工协作
    重用性高
  2. 缺点:
    使得项目架构变得复杂,对开发人员要求高

总结:

m:model 模型层泛指service层,dao层和javaBean实体类

v:view 视图层使用jsp展示数据

c:controller 控制层使用servlet处理请求和响应

作业

1.使用jsp实现用户表的所有数据查询和展示,不使用Servlet

bean

public class Users {
    private int id;
    private String name;
    private String psw;

    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", psw='" + psw + '\'' +
                '}';
    }

    public Users() {
    }

    public Users(int id, String name, String psw) {
        this.id = id;
        this.name = name;
        this.psw = psw;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPsw() {
        return psw;
    }

    public void setPsw(String psw) {
        this.psw = psw;
    }
}

dao

public interface UserDao {
    //查询所有用户信息
    List<Users> selectUsers();
}


public class UserDaoImpl implements UserDao {

    private JdbcTemplate template = new JdbcTemplate(JdbcUtil.getDs());

    @Override
    public List<Users> selectUsers() {
        return template.query("select * from users",new BeanPropertyRowMapper<Users>(Users.class));
    }
}

service

public interface UserService {
    List<Users> findUsers();
}

public class UserServiceImpl implements UserService {
    //引入dao
    private UserDao dao = new UserDaoImpl();
    @Override
    public List<Users> findUsers() {
        return dao.selectUsers();
    }
}

JdbcUtil

public class JdbcUtil {

    private static DataSource ds;

    static {
        try {
            Properties prop = new Properties();
            prop.load(new FileInputStream("E:\\Java-servlet\\day18-jsp\\src\\druid.properties"));
            ds= DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static DataSource getDs(){
        return ds;
    }
}

JSP

<%@ page import="com.service.UserService" %>
<%@ page import="com.service.impl.UserServiceImpl" %>
<%@ page import="java.util.List" %>
<%@ page import="com.bean.Users" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%!
    private UserService service = new UserServiceImpl();
%>
<table border="1" cellpadding="15" cellspacing="0" bgcolor="#7fffd4">
<%
List<Users> users =service.findUsers();
    for (int i = 0; i <users.size() ; i++) {
%>
    <tr>
        <td><%=users.get(i).getId()%></td>
        <td><%=users.get(i).getName()%></td>
        <td><%=users.get(i).getPsw()%></td>
    </tr>
<%
    }%>
</table>
</body>
</html>

2.jsp搭配Servlet完成数据的员工表所有数据的查询和展示

UsersServlet

@WebServlet("/users")
public class UsersServlet extends HttpServlet {

    private UserService service = new UserServiceImpl();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //servlet中 取 调 存 转
        //调
        List<Users> users = service.findUsers();
        //存
        request.getSession().setAttribute("users",users);
        //转
        response.sendRedirect("/yq/users2.jsp");
    }
}

JSP

<%@ page import="java.util.List" %>
<%@ page import="com.bean.Users" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1" cellpadding="15" cellspacing="0" bgcolor="#7fffd4">
    <%
        //servlet中代码编写顺序 取 存 调 转
        List<Users> users = (List<Users>)session.getAttribute("users");
        for (int i = 0; i <users.size() ; i++) {
    %>
    <tr>
        <td><%=users.get(i).getId()%></td>
        <td><%=users.get(i).getName()%></td>
        <td><%=users.get(i).getPsw()%></td>
    </tr>
    <%
        }%>
</table>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值