Unit05: WEB项目的开发模式 、转发   和  Unit09: EL、JSTL

dao

package dao;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; import entity.Emp; public class EmpDao implements Serializable { public List<Emp> findAll() {
List<Emp> list = new ArrayList<Emp>(); Emp e1 = new Emp();
e1.setEmpno(1);
e1.setEname("唐僧");
e1.setJob("师父");
e1.setSal(9000.0);
list.add(e1); Emp e2 = new Emp();
e2.setEmpno(2);
e2.setEname("悟空");
e2.setJob("徒弟");
e2.setSal(5000.0);
list.add(e2); Emp e3 = new Emp();
e3.setEmpno(3);
e3.setEname("八戒");
e3.setJob("徒弟");
e3.setSal(6000.0);
list.add(e3); return list;
} public void save(Emp e) {
System.out.println(
"增加员工:" + e.getEname());
} }

EmpDao.java

entity

package entity;

import java.io.Serializable;

public class Course implements Serializable {

    //对象的属性
private Integer courseId;
private String name;
private Integer days; //Bean的属性
//1.通过get/set方法所观察出来的属性
//2.将get/set去掉后得到的单词首字母小写
public Integer getId() {
return courseId;
}
public void setId(Integer courseId) {
this.courseId = courseId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getDays() {
return days;
}
public void setDays(Integer days) {
this.days = days;
} }

Course.java

package entity;

import java.io.Serializable;

public class Emp implements Serializable {

    private Integer empno;
private String ename;
private String job;
private Double sal; public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Double getSal() {
return sal;
}
public void setSal(Double sal) {
this.sal = sal;
} }

Emp.java

package entity;

import java.io.Serializable;

public class Student implements Serializable {

    private String name;
private Integer age;
private String sex;
private String[] interests;
private Course course; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String[] getInterests() {
return interests;
}
public void setInterests(String[] interests) {
this.interests = interests;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
} }

Student.java

Model 1模式

  WEB组件:Servlet/JSP

  使用一个组件处理请求,处理业务,返回响应信息,耦合度过高,不利于代码维护

<%@page pageEncoding="utf-8"
import="dao.*,entity.*,java.util.*"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>查询员工</title>
<style>
table {
border: 1px solid red;
border-collapse: collapse;
width: 30%;
}
td {
border: 1px solid red;
}
</style>
</head>
<body>
<table>
<tr>
<td>编号</td>
<td>姓名</td>
<td>职位</td>
<td>薪资</td>
</tr>
<%
EmpDao dao = new EmpDao();
List<Emp> list = dao.findAll();
if(list != null) {
for(Emp e : list) {
%>
<tr>
<td><%=e.getEmpno() %></td>
<td><%=e.getEname() %></td>
<td><%=e.getJob() %></td>
<td><%=e.getSal() %></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>

find_emp.jsp

Model 2模式

  Model2引用了MVC模式对代码解耦。(重要)

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

    1.M:model,即业务层,用来处理业务;

    2.V:View,即视图层,用来显示数据;

    3.C:controller,即控制层,负责调度,是M和V的桥梁,其作用是对代码解耦,便于团队开发及维护;

<?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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <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> <servlet>
<servlet-name>findStudent</servlet-name>
<servlet-class>web.FindStudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>findStudent</servlet-name>
<url-pattern>/findStudent</url-pattern>
</servlet-mapping> </web-app>

web.xml

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 entity.Emp; public class FindEmpServlet extends HttpServlet { @Override
protected void service(
HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
//查询所有员工
EmpDao dao = new EmpDao();
List<Emp> list = dao.findAll();
//转发到JSP
//1)将数据绑定到request上
req.setAttribute("emps", list);
//2)将请求转发给JSP
//当前:/jsp2/findEmp
//目标:/jsp2/emps.jsp
req.getRequestDispatcher("emps.jsp")
.forward(req, res);
} }

FindEmpServlet.java

<%@page pageEncoding="utf-8"
import="entity.*,java.util.*"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>查询员工</title>
<style>
table {
border: 1px solid red;
border-collapse: collapse;
width: 30%;
}
td {
border: 1px solid red;
}
</style>
</head>
<body>
<table>
<tr>
<td>编号</td>
<td>姓名</td>
<td>职位</td>
<td>薪资</td>
</tr>
<%
List<Emp> list = (List<Emp>)
request.getAttribute("emps");
if(list != null) {
for(Emp e : list) {
%>
<tr>
<td><%=e.getEmpno() %></td>
<td><%=e.getEname() %></td>
<td><%=e.getJob() %></td>
<td><%=e.getSal() %></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>

emps.jsp

转发和重定向的对比(*)

1.它们的相同点

  •   它们都是用来解决2个WEB组件之间的跳转问题

2.它们的区别(*)

  •   依赖用转发
  •   不依赖用重定向

3.建议

  • 一般查询时用转发
  • 一般增加、修改、删除后,要重定向到查询

    Unit09: EL、JSTL    

3.JSTL导包

  • 使用maven搜索jstl
  • 结果中选择1.2[jar]

4.JSTL原理

  

package web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import entity.Course;
import entity.Student; public class FindStudentServlet extends HttpServlet { @Override
protected void service(
HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
//模拟查询一个学生
Student stu = new Student();
stu.setName("zhangsan");
stu.setAge(23);
stu.setSex("M");
stu.setInterests(
new String[]{"篮球","足球","排球"});
Course c = new Course();
c.setId(1);
c.setName("Java");
c.setDays(82);
stu.setCourse(c);
//转发
req.setAttribute("stu", stu);
req.getRequestDispatcher("student.jsp")
.forward(req, res);
} }

FindStudentServlet.java

<%@page pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>查询学生</title>
</head>
<body>
<!-- 2.JSTL标签 -->
<!-- 2.1 if标签 -->
<p>
<c:if test="${stu.sex=='M' }">男</c:if>
<c:if test="${stu.sex=='F' }">女</c:if>
</p>
<!-- 2.2 choose标签 -->
<p>
<c:choose>
<c:when test="${stu.sex=='M' }">男</c:when>
<c:otherwise>女</c:otherwise>
</c:choose>
</p>
<!-- 2.3 forEach标签 -->
<p>
<c:forEach items="${stu.interests }" var="i">
${i }
</c:forEach>
</p> <!-- 1.EL表达式 -->
<!-- 1.1访问Bean属性 -->
<!-- request.getAttribute("stu").getName() -->
<p>姓名:${stu.name }</p>
<p>年龄:${stu.age }</p>
<!-- 等价于stu.sex -->
<p>性别:${stu["sex"] }</p>
<!-- request.getAttribute("stu")
.getCourse().getId() -->
<p>课程ID:${stu.course.id }</p>
<!--
EL表达式的取值范围:
1)EL默认从4个隐含对象中依次取值
page->request->session->application
2)默认依次取值的规则,其意义在于简化EL
表达式,在取值时可以不用写对象名.
3)若希望打破默认规则,明确从某对象中取值,
则需要在表达式前面增加对象名.
requestScope.stu.name
sessionScope.stu.name
-->
<p>兴趣:${requestScope.stu.interests }</p>
<!-- 1.2访问时可以直接运算 -->
<p>年龄+5:${stu.age+5 }</p>
<p>介于20-30间:${stu.age>20 && stu.age<30 }</p>
<p>是否为空:${empty stu.interests }</p>
<!-- 1.3直接获取请求参数 -->
<p>参数:${param.user }</p>
</body>
</html>

student.jsp

Unit05: WEB项目的开发模式 、转发 和 Unit09: EL、JSTL的更多相关文章

  1. 实战突击: Java Web项目整合开发(PDF)

    实战突击:  Java  Web项目整合开发(PDF)

  2. Java Web应用的开发模式

    一.概述 从互联网诞生的第一天起,web从一个简单的静态页面,发展到今天五花八门.令人眼花缭乱的复杂应用,大到企业级的web应用系统,小到简单的SPA管理系统.在硬件性能提升的同时,通过各种技术实现了 ...

  3. java web几种开发模式(转)

    Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和Wicket)并不了解,这里就不列举 ...

  4. 使用Spring Boot来加速Java web项目的开发

    我想,现在企业级的Java web项目应该或多或少都会使用到Spring框架的. 回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用 ...

  5. web项目 easyui-datagrid开发实践

    一,引言 工作的需要,做了3年的wpf(mvvm)……,又因为项目的需求,回归到web的开发. ■  3 years ago,vue是我三年前没用过的玩意儿. ■  3 years ago,boots ...

  6. Java Web项目里开发获取上个页面连接地址的问题

    近期做的项目有个问题,就是需要获取上个页面连接地址,我用的IE浏览器,在用location.href连接到新地址的时候,在新地址页面用document.referrer的方法获取不到原地址,我测试了下 ...

  7. Java web MVC开发模式入门感悟

    当我进行第一个完整的java web项目的开发时,对以前所学的Java web知识体系有了一个清晰的进阶认识.我觉得非常有必要对此进行必要的总结. MVC,意指model(数据持久层)+viewer( ...

  8. Java Web开发模式

    一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技 ...

  9. 从Spring看Web项目开发

    之前简单介绍过Spring框架,本文换个角度重新诠释Spring.使用Java语言开发的项目,几乎都绕不过Spring,那么Spring到底是啥,为何被如此广泛的应用,下面从以下两个问题出发来剖析Sp ...

随机推荐

  1. 使用Apache的ab工具进行网站性能测试

    Apache服务器自带了ab压力测试工具,可以用来测试网站性能,使用简单方便. ab 的用法是:ab [options] [http://]hostname[:port]/path 例如:ab -n ...

  2. Linux系统下第三方软件安装实例

    在第三方软件安装的时候,首先要有自己的rpm安装包!然后要有可以使用的yum源(前面有关于yum源的介绍) 一.安装wps步骤如下: 1)首先进入安装包所在目录,并查看有没有要安装的软件 2)然后,对 ...

  3. CString与输入输出流对象问题。

    在C++ 编程出现:cin>>Id;没有与这些操作匹配的">>"运算符: 你要看你的Id的数据类型,如果是CString等字符串,要用cin.getline ...

  4. EasyNVR网页/微信播放RTSP摄像机HLS/RTMP播放时出现起播等待问题的优化过程

    EasyNVR 项目中, 我们需要在网页/微信中嵌入 HLS 播放器, 实现直播效果. 开发过程中, 我们调研了很多HLS播放器, 包括 百度cyberplayer, ckplayer, flowpl ...

  5. python常用模块之json、pickle模块

    python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...

  6. mailto web弹出outlook发送邮件

    1. <pre name="code" class="html"><a href="Mailto:test@163.com?CC=t ...

  7. CF 382C

    http://codeforces.com/problemset/problem/382/C 读完题立刻知道怎么做,然后分类讨论到吐血,写挂了,巨蠢 #include <iostream> ...

  8. Scala函数式编程——近半年的痛并快乐着

    从9月初啃完那本让人痛不欲生却又欲罢不能的<七周七并发模型>,我差不多销声匿迹了整整4个月.这几个月里,除了忙着讨食,便是继续啃另一本"锯著"--<Scala函数 ...

  9. learn go error

    package main // 参考文档: // https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/05.2.md im ...

  10. js之广告弹出自动关闭

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...