servlet
一.WEB项目的开发模式
1.Model 1模式

案例:jsp处理model1模式
1 <%@page pageEncoding="utf-8"
2 import="dao.*,entity.*,java.util.*"%>
3 <!doctype html>
4 <html>
5 <head>
6 <meta charset="utf-8"/>
7 <title>查询员工</title>
8 <style>
9 table {
10 border: 1px solid red;
11 border-collapse: collapse;
12 width: 30%;
13 }
14 td {
15 border: 1px solid red;
16 }
17 </style>
18 </head>
19 <body>
20 <table>
21 <tr>
22 <td>编号</td>
23 <td>姓名</td>
24 <td>职位</td>
25 <td>薪资</td>
26 </tr>
27 <%
28 EmpDao dao = new EmpDao();
29 List<Emp> list = dao.findAll();
30 if(list != null) {
31 for(Emp e : list) {
32 %>
33 <tr>
34 <td><%=e.getEmpno() %></td>
35 <td><%=e.getEname() %></td>
36 <td><%=e.getJob() %></td>
37 <td><%=e.getSal() %></td>
38 </tr>
39 <%
40 }
41 }
42 %>
43 </table>
44 </body>
45 </html>
servlet处理model1模式
1 package web;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.util.List;
6
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 import dao.EmpDao;
13 import entity.Emp;
14
15 public class FindEmpServlet extends HttpServlet {
16
17 @Override
18 protected void service(
19 HttpServletRequest req,
20 HttpServletResponse res) throws ServletException, IOException {
21 //查询所有的员工
22 EmpDao dao = new EmpDao();
23 List<Emp> list = dao.findAll();
24 //向浏览器输出响应信息
25 res.setContentType(
26 "text/html;charset=utf-8");
27 PrintWriter out = res.getWriter();
28 //当前:/EmpManager/findEmp
29 //目标:/EmpManager/add_emp.html
30 out.println("<a href='add_emp.html'>增加</a>");
31 out.println("<table border='1' cellspacing='0' width='30%'>");
32 out.println(" <tr>");
33 out.println(" <td>编号</td>");
34 out.println(" <td>姓名</td>");
35 out.println(" <td>职位</td>");
36 out.println(" <td>薪资</td>");
37 out.println(" </tr>");
38 if(list != null) {
39 for(Emp e : list) {
40 out.println("<tr>");
41 out.println(" <td>"+e.getEmpno()+"</td>");
42 out.println(" <td>"+e.getEname()+"</td>");
43 out.println(" <td>"+e.getJob()+"</td>");
44 out.println(" <td>"+e.getSal()+"</td>");
45 out.println("</tr>");
46 }
47 }
48 out.println("</table>");
49 out.close();
50 }
51
52 }
2.Model 2模式(*)

二.转发和重定向的对比(*)
1.它们的相同点
- 它们都是用来解决2个WEB组件之间的跳转问题
WEB组件:Servlet/JSP
2.它们的区别(*)

3.建议
- 一般查询时用转发
- 一般增加、修改、删除后,要重定向到查询
三.EL和JSTL
1.作用

一 . 什么是EL?

EL表达式的作用

El表达式访问bean属性


1 <!-- 1.EL表达式 -->
2 <!-- 1.1访问Bean属性 -->
3 <!-- request.getAttribute("stu").getName() -->
4 <p>姓名:${stu.name }</p>
5 <p>年龄:${stu.age }</p>
6 <!-- 等价于stu.sex -->
7 <p>性别:${stu["sex"] }</p>
8 <!-- request.getAttribute("stu")
9 .getCourse().getId() -->
10 <p>课程ID:${stu.course.id }</p>
1 <!--
2 EL表达式的取值范围:
3 1)EL默认从4个隐含对象中依次取值
4 page->request->session->application
5 2)默认依次取值的规则,其意义在于简化EL(可以省略request.xxx)
6 表达式,在取值时可以不用写对象名.
7 3)若希望打破默认规则,明确从某对象中取值,
8 则需要在表达式前面增加对象名.
9 requestScope.stu.name
10 sessionScope.stu.name
11 -->
12 <p>兴趣:${requestScope.stu.interests }</p>

1 <!-- 1.2访问时可以直接运算 -->
2 <p>年龄+5:${stu.age+5 }</p>
3 <p>介于20-30间:${stu.age>20 && stu.age<30 }</p>
4 <p>是否为空:${empty stu.interests }</p>
EL表达式获取请求参数值

1 <!-- 1.3直接获取请求参数 -->
2 <p>参数:${param.user }</p>
二. 什么是JSTL


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



1 <!-- 2.JSTL标签 -->
2 <!-- 2.1 if标签 -->
3 <p>
4 <c:if test="${stu.sex=='M' }">男</c:if>
5 <c:if test="${stu.sex=='F' }">女</c:if>
6 </p>
7 <!-- 2.2 choose标签 -->
8 <p>
9 <c:choose>
10 <c:when test="${stu.sex=='M' }">男</c:when>
11 <c:otherwise>女</c:otherwise>
12 </c:choose>
13 </p>
14 <!-- 2.3 forEach标签 -->
15 <p>
16 <c:forEach items="${stu.interests }" var="i">
17 ${i }
18 </c:forEach>
19 </p>

3.JSTL导包
- 使用maven搜索jstl
- 结果中选择1.2[jar]
4.JSTL原理

案例:student
1 package entity;
2
3 import java.io.Serializable;
4
5 public class Student implements Serializable {
6
7 private String name;
8 private Integer age;
9 private String sex;
10 private String[] interests;
11 private Course course;
12
13 public String getName() {
14 return name;
15 }
16 public void setName(String name) {
17 this.name = name;
18 }
19 public Integer getAge() {
20 return age;
21 }
22 public void setAge(Integer age) {
23 this.age = age;
24 }
25 public String getSex() {
26 return sex;
27 }
28 public void setSex(String sex) {
29 this.sex = sex;
30 }
31 public String[] getInterests() {
32 return interests;
33 }
34 public void setInterests(String[] interests) {
35 this.interests = interests;
36 }
37 public Course getCourse() {
38 return course;
39 }
40 public void setCourse(Course course) {
41 this.course = course;
42 }
43
44 }
course:
1 package entity;
2
3 import java.io.Serializable;
4
5 public class Course implements Serializable {
6
7 //对象的属性
8 private Integer courseId;
9 private String name;
10 private Integer days;
11
12 //Bean的属性
13 //1.通过get/set方法所观察出来的属性
14 //2.将get/set去掉后得到的单词首字母小写
15 public Integer getId() {
16 return courseId;
17 }
18 public void setId(Integer courseId) {
19 this.courseId = courseId;
20 }
21 public String getName() {
22 return name;
23 }
24 public void setName(String name) {
25 this.name = name;
26 }
27 public Integer getDays() {
28 return days;
29 }
30 public void setDays(Integer days) {
31 this.days = days;
32 }
33
34 }
//student.servlet
1 package web;
2
3 import java.io.IOException;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.http.HttpServlet;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import entity.Course;
11 import entity.Student;
12
13 public class FindStudentServlet extends HttpServlet {
14
15 @Override
16 protected void service(
17 HttpServletRequest req,
18 HttpServletResponse res) throws ServletException, IOException {
19 //1.接受参数(省略)
20 //2.处理业务(查询)模拟查询一个学生
21 Student stu = new Student();
22 stu.setName("zhangsan");
23 stu.setAge(23);
24 stu.setSex("M");
25 stu.setInterests(
26 new String[]{"篮球","足球","排球"});
27 Course c = new Course();
28 c.setId(1);
29 c.setName("Java");
30 c.setDays(82);
31 stu.setCourse(c);
32 //3.转发或重定向(转发)
33 req.setAttribute("stu", stu);
34 req.getRequestDispatcher("student.jsp")
35 .forward(req, res);
36 }
37
38 }
servlet需要配置参数,在此省略了
student.jsp:
1 <%@page pageEncoding="utf-8"%>
2 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 <!doctype html>
4 <html>
5 <head>
6 <meta charset="utf-8"/>
7 <title>查询学生</title>
8 </head>
9 <body>
10 <!-- 2.JSTL标签 -->
11 <!-- 2.1 if标签 -->
12 <p>
13 <c:if test="${stu.sex=='M' }">男</c:if>
14 <c:if test="${stu.sex=='F' }">女</c:if>
15 </p>
16 <!-- 2.2 choose标签 -->
17 <p>
18 <c:choose>
19 <c:when test="${stu.sex=='M' }">男</c:when>
20 <c:otherwise>女</c:otherwise>
21 </c:choose>
22 </p>
23 <!-- 2.3 forEach标签 -->
24 <p>
25 <c:forEach items="${stu.interests }" var="i">
26 ${i }
27 </c:forEach>
28 </p>
29
30 <!-- 1.EL表达式 -->
31 <!-- 1.1访问Bean属性 -->
32 <!-- request.getAttribute("stu").getName() -->
33 <p>姓名:${stu.name }</p>
34 <p>年龄:${stu.age }</p>
35 <!-- 等价于stu.sex -->
36 <p>性别:${stu["sex"] }</p>
37 <!-- request.getAttribute("stu")
38 .getCourse().getId() -->
39 <p>课程ID:${stu.course.id }</p>
40 <!--
41 EL表达式的取值范围:
42 1)EL默认从4个隐含对象中依次取值
43 page->request->session->application
44 2)默认依次取值的规则,其意义在于简化EL
45 表达式,在取值时可以不用写对象名.
46 3)若希望打破默认规则,明确从某对象中取值,
47 则需要在表达式前面增加对象名.
48 requestScope.stu.name
49 sessionScope.stu.name
50 -->
51 <p>兴趣:${requestScope.stu.interests }</p>
52 <!-- 1.2访问时可以直接运算 -->
53 <p>年龄+5:${stu.age+5 }</p>
54 <p>介于20-30间:${stu.age>20 && stu.age<30 }</p>
55 <p>是否为空:${empty stu.interests }</p>
56 <!-- 1.3直接获取请求参数 -->
57 <p>参数:${param.user }</p>
58 </body>
59 </html>
温壶月光当茶饮

浙公网安备 33010602011771号