第一章  JSP

1. 指令
* 作用:用于配置JSP页面,导入资源文件
* 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
* 分类:
1. page : 配置JSP页面的
* contentType:等同于response.setContentType()
1. 设置响应体的mime类型以及字符集
2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
* import:导包
* errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
* isErrorPage:标识当前也是是否是错误页面。
* true:是,可以使用内置对象exception
* false:否。默认值。不可以使用内置对象exception

2. include : 页面包含的。导入页面的资源文件
* <%@include file="top.jsp"%>
3. taglib : 导入资源
* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
* prefix:前缀,自定义的
2. 注释:
1. html注释:
<!-- -->:只能注释html代码片段
2. jsp注释:推荐使用
<%-- --%>:可以注释所有

3. 内置对象
* 在jsp页面中不需要创建,直接使用的对象
* 一共有9个:
变量名                  真实类型                        作用
* pageContext      PageContext               当前页面共享数据,还可以获取其他八个内置对象
* request              HttpServletRequest     一次请求访问的多个资源(转发)
* session              HttpSession                 一次会话的多个请求间
* application         ServletContext             所有用户间共享数据
* response           HttpServletResponse   响应对象
* page                  Object                          当前页面(Servlet)的对象 this
* out                     JspWriter                     输出对象,数据输出到页面上
* config                ServletConfig               Servlet的配置对象
* exception          Throwable                    异常对象

第二章  MVC:开发模式

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

2. MVC:
1. M:Model,模型。JavaBean
* 完成具体的业务操作,如:查询数据库,封装对象
2. V:View,视图。JSP
* 展示数据
3. C:Controller,控制器。Servlet
* 获取用户的输入
* 调用模型
* 将数据交给视图进行展示

* 优缺点:
1. 优点:
1. 耦合性低,方便维护,可以利于分工协作
2. 重用性高

2. 缺点:
1. 使得项目架构变得复杂,对开发人员要求高

第三章  EL表达式

1. 概念:Expression Language 表达式语言
2. 作用:替换和简化jsp页面中java代码的编写
3. 语法:${表达式}
4. 注意:
* jsp默认支持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
2. \${表达式} :忽略当前这个el表达式

5. 使用:
1. 运算:
* 运算符:
1. 算数运算符: + - * /(div) %(mod)
2. 比较运算符: > < >= <= == !=
3. 逻辑运算符: &&(and) ||(or) !(not)
4. 空运算符: empty
* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
* ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
* ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
2. 获取值
1. el表达式只能从域对象中获取值
2. 语法:
1. ${域名称.键名}:从指定域中获取指定键的值
* 域名称:
1. pageScope --> pageContext
2. requestScope --> request
3. sessionScope --> session
4. applicationScope --> application(ServletContext)
* 举例:在request域中存储了name=张三
* 获取:${requestScope.name}

2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

3. 获取对象、List集合、Map集合的值
1. 对象:${域名称.键名.属性名}
* 本质上会去调用对象的getter方法

2. List集合:${域名称.键名[索引]}

3. Map集合:
* ${域名称.键名.key名称}
* ${域名称.键名["key名称"]}

3. 隐式对象:
* el表达式中有11个隐式对象
* pageContext:
* 获取jsp其他八个内置对象
* ${pageContext.request.contextPath}:动态获取虚拟目录

第四章  JSTL

1. 概念:JavaServer Pages Tag Library JSP标准标签库
* 是由Apache组织提供的开源的免费的jsp标签 <标签>

2. 作用:用于简化和替换jsp页面上的java代码

3. 使用步骤:
1. 导入jstl相关jar包
2. 引入标签库:taglib指令: <%@ taglib %>
3. 使用标签

4. 常用的JSTL标签
1. if:相当于java代码的if语句
1. 属性:
* test 必须属性,接受boolean表达式
* 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
* 一般情况下,test属性值会结合el表达式一起使用
2. 注意:
* c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
2. choose:相当于java代码的switch语句
1. 使用choose标签声明 相当于switch声明
2. 使用when标签做判断 相当于case
3. 使用otherwise标签做其他情况的声明 相当于default

3. foreach:相当于java代码的for语句

5. 练习:
* 需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中

第五章  三层架构:软件设计架构

1. 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
2. 业务逻辑层:处理业务逻辑的。
3. 数据访问层:操作数据存储文件。

第六章  案例:用户信息列表展示

1. 需求:用户信息的增删改查操作
2. 设计:
1. 技术选型:Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat
2. 数据库设计:
create database day17; -- 创建数据库
use day17; -- 使用数据库
create table user( -- 创建表
id int primary key auto_increment,
name varchar(20) not null,
gender varchar(5),
age int,
address varchar(32),
qq varchar(20),
email varchar(50)
);

3. 开发:
1. 环境搭建
1. 创建数据库环境
2. 创建项目,导入需要的jar包

2. 编码

4. 测试
5. 部署运维

代码实现:

UserDao.java

package cn.itcast.dao;

import cn.itcast.domain.User;

import java.util.List;

/**
* 用户操作的DAO
*/
public interface UserDao {

public List<User> findAll();
}

UserDaoImpl.java

package cn.itcast.dao.impl;

import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class UserDaoImpl implements UserDao {

private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

@Override
public List<User> findAll() {
//使用JDBC操作数据库...
//1.定义sql
String sql = "select * from user";
List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));

return users;
}
}

User.java

package cn.itcast.domain;

public class User {
private int id;
private String name;
private String gender;
private int age;
private String address;
private String qq;
private String email;

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 getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public String getQq() {
return qq;
}

public void setQq(String qq) {
this.qq = qq;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", address='" + address + '\'' +
", qq='" + qq + '\'' +
", email='" + email + '\'' +
'}';
}
}

UserService.java

package cn.itcast.service;

import cn.itcast.domain.User;

import java.util.List;

/**
* 用户管理的业务接口
*/
public interface UserService {

/**
* 查询所有用户信息
* @return
*/
public List<User> findAll();
}

UserServiceImpl.java

package cn.itcast.service.impl;

import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;

import java.util.List;

public class UserServiceImpl implements UserService {
private UserDao dao = new UserDaoImpl();

@Override
public List<User> findAll() {
//调用Dao完成查询
return dao.findAll();
}
}

JDBCUtils.java

package cn.itcast.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
* JDBC工具类 使用Durid连接池
*/
public class JDBCUtils {

private static DataSource ds ;

static {

try {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);

//2.初始化连接池对象
ds = DruidDataSourceFactory.createDataSource(pro);

} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 获取连接池对象
*/
public static DataSource getDataSource(){
return ds;
}

/**
* 获取连接Connection对象
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}

UserListServlet.java

package cn.itcast.web.servlet;

import cn.itcast.domain.User;
import cn.itcast.service.UserService;
import cn.itcast.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/userListServlet")
public class UserListServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.调用UserService完成查询
UserService service = new UserServiceImpl();
List<User> users = service.findAll();
//2.将list存入request域
request.setAttribute("users",users);
//3.转发到list.jsp
request.getRequestDispatcher("/list.jsp").forward(request,response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

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

<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
width: 默认宽度与设备的宽度相同
initial-scale: 初始的缩放比,为1:1 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>用户信息管理系统</title>

<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<style type="text/css">
td, th {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h3 style="text-align: center">用户信息列表</h3>
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>

<c:forEach items="${users}" var="user" varStatus="s">
<tr>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="update.html">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="">删除</a></td>
</tr>

</c:forEach>

<tr>
<td colspan="8" align="center"><a class="btn btn-primary" href="add.html">添加联系人</a></td>
</tr>
</table>
</div>
</body>
</html>

转载于:https://www.cnblogs.com/xuweng/p/11272070.html

java day41【JSP 、MVC开发模式 、EL表达式 、JSTL标签 、三层架构】相关推荐

  1. 五、Web服务器——MVC开发模式 EL表达式 JSTL 学习笔记

    今日内容 1. JSP:1. 指令2. 注释3. 内置对象2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令* 作用:用于配置JSP页面,导入资源文件* ...

  2. javaweb(09) EL表达式JSTL标签库(jsp相关,了解)

    javaweb(09) EL表达式&JSTL标签库(jsp相关,了解) EL表达式 简介和基本使用 EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的 ...

  3. EL 表达式 JSTL 标签库

    EL 表达式 & JSTL 标签库 1.什么是EL表达式?EL表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的什么作用:EL 表达式 ...

  4. El表达式+jstl标签

    目录 前言 EL获取数据(从四大域中获取属性) 1.如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值 2.EL中的内置对象 1.域属性相关(4个) 2.其 ...

  5. el表达式,JSTL标签库

    1.el表达式    表达式语言(Expression Language,简称EL) EL主要作用:       获取数据:       EL表达式主要用于替换JSP页面中的脚本表达式,检索reque ...

  6. Web.17.EL表达式JSTL标签的使用

    本节主要是上节课的加精 目录 本节主要是上节课的加精 一.购物车主页面java代码的分离 二.使用分页面板展示购物车所有商品的主页面 一.购物车主页面java代码的分离 注意: 当一个jsp文件同时存 ...

  7. EL表达式 JSTL标签库

    EL表达式 什么是EL表达式? 作用? 全称是Expression Langue 是表达式语言 EL表达式的作用主要是替代jsp页面中的表达式脚本在jsp页面中方进行输出,因为EL表达式在输出数据的时 ...

  8. 方立勋_30天掌握JavaWeb_JavaBean、mvc开发模式、el表达式、jstl标签

    什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法暴露 ...

  9. 第2课:JSP常用开发模式 (黄菊华Java网站开发系列教程)

    JSP常用开发模式 单纯的JSP编程 在 JSP 编程模式下,通过应用 JSP 中的脚本标志,可以直接在 JSP 页面中实现各种功能.虽然这种模式很容易实现,但是,其缺点也非常明显.因为将大部分的 J ...

最新文章

  1. dedecms 财付通接口
  2. LDAP操作过程中出现的错误代码
  3. python手机版ios-使用Python写iOS自动化测试
  4. 我加入一家硅谷骗子创业公司的奇葩经历
  5. 再谈java乱码:GBK和UTF-8互转尾部乱码问题分析
  6. UML图系列——用例图
  7. Python---udp绑定信息以及网络通信过程
  8. ORA-04028: cannot generate diana for object xxx
  9. where 1=1低效?
  10. 剑指offer:18-21记录
  11. python登录界面实现密码在明文与星号间切换_两个API让星号密码框显示成明文
  12. oracle u4e00 u9fa5,Oracle 判断汉字 [\u4e00-\u9fa5]
  13. Makefile .PHONY用法
  14. BZOJ2276: [Poi2011]Temperature
  15. 【centos】快速截图设置
  16. F12解决网页不能复制
  17. ##DBUtils工具类的正确使用(一)
  18. JMF环境配置(Eclipse)
  19. python调用oracle
  20. Windows 改变CMD窗口颜色!

热门文章

  1. python列表去重函数_对python中两种列表元素去重函数性能的比较方法
  2. 模拟文件管理器的java可以编译但无法运行_在java学习经典问题he解答(6)
  3. 决策树(一)--ID3
  4. Android NDK开发之 NEON使用介绍
  5. 孙鑫MFC笔记之八--文档串行化
  6. MCU——简易单片机按键驱动程序分析
  7. SparkSql与Redis综合练习
  8. kafka创建Topic的一道面试题
  9. flume拦截器及自定义拦截器
  10. 基于Zephyr在微型MCU上使用Tensor Flow Lite Micro做图像分类