Unit05: WEB项目的开发模式 、转发 和 Unit09: EL、JSTL
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的更多相关文章
- 实战突击: Java Web项目整合开发(PDF)
实战突击: Java Web项目整合开发(PDF)
- Java Web应用的开发模式
一.概述 从互联网诞生的第一天起,web从一个简单的静态页面,发展到今天五花八门.令人眼花缭乱的复杂应用,大到企业级的web应用系统,小到简单的SPA管理系统.在硬件性能提升的同时,通过各种技术实现了 ...
- java web几种开发模式(转)
Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和Wicket)并不了解,这里就不列举 ...
- 使用Spring Boot来加速Java web项目的开发
我想,现在企业级的Java web项目应该或多或少都会使用到Spring框架的. 回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用 ...
- web项目 easyui-datagrid开发实践
一,引言 工作的需要,做了3年的wpf(mvvm)……,又因为项目的需求,回归到web的开发. ■ 3 years ago,vue是我三年前没用过的玩意儿. ■ 3 years ago,boots ...
- Java Web项目里开发获取上个页面连接地址的问题
近期做的项目有个问题,就是需要获取上个页面连接地址,我用的IE浏览器,在用location.href连接到新地址的时候,在新地址页面用document.referrer的方法获取不到原地址,我测试了下 ...
- Java web MVC开发模式入门感悟
当我进行第一个完整的java web项目的开发时,对以前所学的Java web知识体系有了一个清晰的进阶认识.我觉得非常有必要对此进行必要的总结. MVC,意指model(数据持久层)+viewer( ...
- Java Web开发模式
一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技 ...
- 从Spring看Web项目开发
之前简单介绍过Spring框架,本文换个角度重新诠释Spring.使用Java语言开发的项目,几乎都绕不过Spring,那么Spring到底是啥,为何被如此广泛的应用,下面从以下两个问题出发来剖析Sp ...
随机推荐
- js排序算法02——插入排序
插入排序的思路是我们默认数组的第一个元素是有序的,从第二个元素开始依次和前面的元素比较,如果前面的元素大,就将前面的元素往后移一位,如果前面的元素小,就把该元素放在前面元素的后面.其实就和我们玩扑克牌 ...
- sql中exists,Intersect ,union 与union All的用法
熟练使用SQL Server中的各种用法会给查询带来很多方便.今天就介绍一下EXCEPT和INTERSECT.注意此语法仅在SQL Server 2005及以上版本支持. EXCEPT是指在第一个集合 ...
- windows配置redis(转)
此文章全部是转的,我之前是woidows启动redis无法加载配置找到的:原文链接:http://www.cnblogs.com/smileyearn/articles/4749746.html 在w ...
- Shell 命令行求两个文件每行对比的相同内容
Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...
- 基于Ubuntu16.04的GeForce GTX 1080驱动安装,遇到的问题及对应的解决方法
1.在主机上插上GPU之后,查看设备: $ nvidia-smi Tue Dec :: +------------------------------------------------------- ...
- Office for Mac
前情 真的用不惯Mac上的pages,所以就找Mac版的office.找了一个发觉不对,安装总是出错,当时也没有太大的需求,就把这事搁置了下来.今天要写技术文档的时候才终于下决心要把office下再下 ...
- Jmeter简单的接口测试
1.新建线程组 2.编辑线程组信息 3.在线程组中添加HTTP信息头管理器 4.配置HTTP信息头管理器 参数格式配置 5.在线程组中添加HTTP请求 6.编辑HTTP请求信息 7.添加响应断言 8. ...
- Python系列文章索引
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is ...
- 添加删除表格(js完成)【自己实际项目】
// 通过dom对象完成 注释掉了 /** function insertRows(){ var tempRow=0; var tbl=document.getElementById("di ...
- threejs 世界坐标与屏幕坐标相互转换
屏幕坐标转世界坐标: let pX = (screenPoint.x / this.scene.renderer.domElement.clientWidth) * 2 - 1; let pY = - ...