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. oracle数据库简单的导入导出操作

    一.数据库导出 1.导出用户名/密码,,导出用户名为test_expdp.导出路径默认为oracle中的dpdump文件中 expdp test_expdp/test_expdp@orcl direc ...

  2. 030——VUE中鼠标语义修饰符

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. zuul 性能分析

    引用几篇博客, 后续整理自己心得 Zuul 性能测试 https://blog.csdn.net/u013815546/article/details/69669165 VisualVM 使用 htt ...

  4. LeetCode OJ:Add and Search Word - Data structure design(增加以及搜索单词)

    Design a data structure that supports the following two operations: void addWord(word) bool search(w ...

  5. windows下创建文件夹链接

    mklink百度百科https://baike.baidu.com/item/mklink/566760?fr=aladdin 创建文件夹链接mklink /d "C:\Users\Admi ...

  6. QUnit使用

    什么是单元测试 每个单元测试就是一段用于测试一个模块或接口是否能达到预期结果的代码. QUnitjs 概念Qunit是一款强大的用于帮助调试代码的,JavaScript单元测试框架.是jQuery的官 ...

  7. socket创建TCP服务端和客户端

    看情况选择相对应的套接字*面向连接的传输--tcp协议--可靠的--流式套接字(SOCK_STREAM)*面向无连接的传输--udp协议--不可靠的--数据报套接字(SOCK_DGRAM) 在liun ...

  8. del语句的总结

    删除属性 del 语句 可以删除对象(实例)的属性 语法: del 对象.实例变量名 del 语句 del 变量名 删除变量 del name del 列表[整数表达式] 删除列表中的元素 del L ...

  9. 正确设置Firefox下载文件文件名的方法

    不同的浏览器需要特殊设置,主要是火狐比较特殊,火狐可能给文件名加上“%0d%0a"这样的编码字符(换行的意思).不得不佩服网上的高手,这也能解决. [HttpGet] public File ...

  10. 【解题报告】CF Round #320 (Div. 2)

    Raising Bacteria 题意:盒子里面的细菌每天会数量翻倍,你可以在任意一天放任意多的细菌,最后要使得某天盒子里面的细菌数量等于x,求至少要放多少个细菌 思路:显然,翻倍即为二进制左移一位, ...