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>

 

posted @ 2017-04-27 14:25  等你,在雨中  阅读(125)  评论(0)    收藏  举报