servlet(3) (代码)

(5)————–
dao

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import util.DBUtil;
import entity.Employee;
//junit 单元测试 白盒测试
public class EmployeeDAO {
    public void save(Employee e) throws Exception{
        Connection conn = null;
        try {
            conn = DBUtil.getConnection();

            //mysql
            PreparedStatement stat = conn.prepareStatement(
                    "INSERT INTO emp(name,salary,age) " +
                    "VALUES(?,?,?)");


            /*Oracle
            PreparedStatement stat = conn.prepareStatement(
                    "INSERT INTO emp(id,name,salary,age) " +
                    "VALUES(emp_id_seq.nextval,?,?,?)");
                    */
            stat.setString(1, e.getName());
            stat.setDouble(2, e.getSalary());
            stat.setInt(3, e.getAge());

            stat.executeUpdate();

        } catch (Exception e1) {
            e1.printStackTrace();
            throw e1;
        }finally{
            DBUtil.closeConnection(conn);
        }
    }

    public List<Employee> findAll() throws Exception{
        List<Employee> employees = new ArrayList<Employee>();
        Connection conn =null;

        try {
            conn = DBUtil.getConnection();
            PreparedStatement stat = conn.prepareStatement(
                    "SELECT * FROM emp");
            ResultSet rs = stat.executeQuery();

            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                double salary = rs.getDouble("salary");
                int age = rs.getInt("age");
                Employee e = new Employee(id,name,salary,age);
                employees.add(e);
            }

        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }finally{
            DBUtil.closeConnection(conn);
        }
        return employees;

    }
    public void deleteById(int id) throws Exception{
        Connection conn =null;
        try{
            conn = DBUtil.getConnection();
            PreparedStatement stat = conn.prepareStatement(
                    "DELETE FROM emp WHERE id=?");
            stat.setInt(1, id);
            stat.executeUpdate();
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }finally{
            DBUtil.closeConnection(conn);
        }
    }
    public Employee loadById(int id) throws Exception{
        Employee e = null;
        Connection conn = null;

        try{
            conn = DBUtil.getConnection();
            PreparedStatement stat = conn.prepareStatement(
                    "SELECT * FROM emp WHERE id=?");
            stat.setInt(1, id);
            ResultSet rs = stat.executeQuery();
            if(rs.next()){
                e = new Employee(
                        id,
                        rs.getString("name"),
                        rs.getDouble("salary"),
                        rs.getInt("age"));
            }
        }catch(Exception e1){
            e1.printStackTrace();
            throw e1;
        }finally{
            DBUtil.closeConnection(conn);
        }

        return e;
    }

    public void modify(Employee e) throws Exception{
        Connection conn =null;

        try{
            conn = DBUtil.getConnection();
            PreparedStatement stat = conn.prepareStatement(
                    "UPDATE emp  SET name=?,salary=?,age=? where id=?");
            stat.setString(1, e.getName());
            stat.setDouble(2, e.getSalary());
            stat.setInt(3, e.getAge());
            stat.setInt(4, e.getId());
            stat.executeUpdate();
        }catch(Exception e1){
            e1.printStackTrace();
            throw e1;
        }finally{
            DBUtil.closeConnection(conn);
        }
    }
}

employee

package entity;
/**
 * 实体类
 * 用于封装从数据库查询出来的记录的
 * @author Administrator
 *
 */
public class Employee {
    private int id;
    private String name;
    private double salary;
    private int age;
    public Employee() {
        super();
    }
    public Employee(int id, String name, double salary, int age) {
        super();
        this.id = id;
        this.name = name;
        this.salary = salary;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    //通常加实体类的时候会加toString方法
    @Override
    public String toString() {
        return "("+id+","+name+","+salary+","+age+")";
    }


}

DBUtil

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 * JDBC工具类
 */
public class DBUtil {
    public static Connection getConnection() throws Exception{
        Connection conn = null;

        try {
            //mysql:
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    /*
                     * ?useUnicode=true&characterEncoding=utf8
                     * 这两个选项参数的作用是告诉jdbc驱动使用
                     *"utf-8"来编码和解码。
                     */
                    "jdbc:mysql://localhost:3306/jsd1407?useUnicode=true&characterEncoding=utf8",
                    "root",
                    "zaq12wsx");

            /*oracle
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe",
                    "system",
                    "zaq12wsx");
                    */
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
        return conn;
    }

    public static void closeConnection(Connection conn){
        if(conn != null){
            try {
                /*
                 * 连接建好后,才会返回connection对象
                 * 所以打印getConnection()来测试方法的正确与否
                 */
                conn.close();
            } catch (SQLException e) {
            }
        }
    }

    public static void main(String[] args){

        try {
            System.out.println(getConnection());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

ActionServlet

package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.EmployeeDAO;
import entity.Employee;

public class ActionServlet extends HttpServlet{
    public ActionServlet(){
        //servlet其实是单例,只创建一个对象
        System.out.println("ActionServlet's constructor..");
    }

    public void service(HttpServletRequest request,
            HttpServletResponse response)
    throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        /*
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();*/

        //获得请求资源路径
        String uri = request.getRequestURI();

        //分析请求资源路径
        String action = uri.substring(uri.lastIndexOf("/")+1,uri.lastIndexOf("."));
        //依据分析结果调用不同的名字来处理

        //获取列表
        if("list".equals(action)){
            try {
                EmployeeDAO dao = new EmployeeDAO();
                List<Employee> employees = dao.findAll();

                //使用转发,将处理转交给empList.jsp
                //step1,绑定数据
                request.setAttribute("emplist", employees);
                //step2,获得转发器
                RequestDispatcher rd = 
                    request.getRequestDispatcher("empList.jsp");

                //step3,转发
                rd.forward(request, response);
            } catch (Exception e) {
                e.printStackTrace();
                //out.println("系统繁忙");
                /*方式一:
                request.setAttribute("error_msg", "系统繁忙,请稍后重试");
                request.getRequestDispatcher("error.jsp")
                .forward(request, response);
                */

                //方式二:将异常抛给servlet容器(可抛系统异常,不是很灵活)
                throw new ServletException(e);
            }
            //添加员工
        }else if("add".equals(action)){

            //读请求参数值
            String name= request.getParameter("name");
            String salary= request.getParameter("salary");
            String age= request.getParameter("age");
            try {
                Employee e = new Employee();
                e.setName(name);
                e.setSalary(Double.parseDouble(salary));
                e.setAge(Integer.parseInt(age));

                EmployeeDAO dao = new EmployeeDAO();
                dao.save(e);
                response.sendRedirect("list.do");
            } catch (Exception e) {
                e.printStackTrace();
                //out.println("系统繁忙");
                throw new ServletException(e);
            }   
            //删除员工
        }else if("del".equals(action)){
            int id = Integer.parseInt(request.getParameter("id"));

            try{
                EmployeeDAO dao = new EmployeeDAO();
                dao.deleteById(id);
                response.sendRedirect("list.do");
            }catch(Exception e){
                e.printStackTrace();
                //out.println("稍后重试");
                throw new ServletException(e);
            }
            //修改第一步load
        }else if("load".equals(action)){
            int id = Integer.parseInt(request.getParameter("id"));
            try{
                EmployeeDAO dao = new EmployeeDAO();
                Employee e = dao.loadById(id);
                //使用转发,转发给updateEmp.jsp
                request.setAttribute("e", e);
                //获取转发器,转发:
                request.getRequestDispatcher("updateEmp.jsp")
                .forward(request, response);
            }catch(Exception e){
                e.printStackTrace();
                //out.println("稍后重试");
                throw new ServletException(e);
            }
            //修改员工第二部,modify
        }else if("modify".equals(action)){
            int id = Integer.parseInt(request.getParameter("id"));
            String name = request.getParameter("name");
            String salary = request.getParameter("salary");
            String age = request.getParameter("age");

            Employee e = new Employee(id,name,Double.parseDouble(salary),Integer.parseInt(age));
            try{
                EmployeeDAO dao = new EmployeeDAO();
                dao.modify(e);
                response.sendRedirect("list.do");

            }catch(Exception e1){
                e1.printStackTrace();
                //out.println("稍后重试");
                throw new ServletException(e1);
            }
        }
    }

}

addEmp.jsp

<%@page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>添加员工</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css"
            href="css/style.css" />
    </head>

    <body>
        <div id="wrap">
            <div id="top_content">
                <!-- 包含header.jsp -->
                <%@include file="header.jsp"%>
                <div id="content">
                    <p id="whereami">
                    </p>
                    <h1>
                        添加员工:
                    </h1>
                    <form action="add.do" method="post">
                        <table cellpadding="0" cellspacing="0" border="0"
                            class="form_table">
                            <tr>
                                <td valign="middle" align="right">
                                    姓名:
                                </td>
                                <td valign="middle" align="left">
                                    <input type="text" class="inputgri" name="name" />
                                </td>
                            </tr>
                            <tr>
                                <td valign="middle" align="right">
                                    薪水:
                                </td>
                                <td valign="middle" align="left">
                                    <input type="text" class="inputgri" name="salary" />
                                </td>
                            </tr>
                            <tr>
                                <td valign="middle" align="right">
                                    年龄:
                                </td>
                                <td valign="middle" align="left">
                                    <input type="text" class="inputgri" name="age" />
                                </td>
                            </tr>
                        </table>
                        <p>
                            <input type="submit" class="button" value="提交" />
                        </p>
                    </form>
                </div>
            </div>
            <!-- 包含footer.jsp -->
            <%@include file="footer.jsp"%>
        </div>
    </body>
</html>

web05_2

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SomeServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        PrintWriter out = response.getWriter();
        System.out.println(username);

        //链接地址,表单提交地址,重定向从应用名开始写
        //response.sendRedirect("/web05_2/biz02/abc/a4.jsp");

        //转发不写应用名
        request.getRequestDispatcher("/biz02/abc/a4.jsp")
        .forward(request, response);
    }

}

06 Cookie—-

package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AddCookieServlet extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        Cookie cookie = new Cookie("uname","Sally");
        cookie.setMaxAge(20);//20秒
        response.addCookie(cookie);

        /*
         * cookie只能保存合法的ascii字符,如果要保存
        非ascii字符,比如中文,需要将中文转换成相应的
        ascii字符的表示形式。
        String URLEncoder.encode(
            String str,String charset);
                String URLDecoder.decode(
            String str,String charset);
         */
        Cookie cookie2 = new Cookie("city",URLEncoder.encode("北京","utf-8"));
        response.addCookie(cookie2);
        out.println("发送了cookie给浏览器");
        out.close();
    }

}
package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FindCookieServlet extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        Cookie[] cookies = request.getCookies();
        //一定要检查cookie是否为空
        if(cookies != null){
            for(Cookie cookie : cookies){
                //获得cookie的名字
                String name = cookie.getName();
                //获得cookie的值
                String value = cookie.getValue();
                out.println(name+" "+URLDecoder.decode(value, "utf-8")+"<br/>");

            }
        }else{
            out.println("没找到任何cookie");
        }

        out.close();
    }

}
package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Find_addCookieServlet extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        Cookie[] cookies = request.getCookies();

        if(cookies != null){
            boolean find = false;
            //找到的话输出
            for(Cookie cookie : cookies){
                if("uid".equals(cookie.getName())){
                    out.println("uid的值:"+URLDecoder.decode(cookie.getValue(), "utf-8"));
                    find = true;
                }
            }
            //没有找到想要的cookie的话,创建一个
            if(!find){
                Cookie cookie = new Cookie("uid",URLEncoder.encode("呵呵", "utf-8"));
                response.addCookie(cookie);
            }
        }else{
            //没有找到任何cookie的话,创建一个
            Cookie cookie = new Cookie("uid",URLEncoder.encode("呵呵", "utf-8"));
            response.addCookie(cookie);
        }

        out.close();
    }

}

jsp:

<%
   Cookie[] cookies = request.getCookies();
   if(cookies != null){
     for(Cookie cookie : cookies){
        out.println(cookie.getName()+":"+cookie.getValue()+"<br/>");
     }
   }

%>

6_2—

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SomeServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //获得session对象
        HttpSession session = request.getSession();
        //获得sessionIds
        String sessionId = session.getId();
        System.out.println(sessionId);


        Integer count = (Integer)session.getAttribute("count");
        if(count == null){
            //第一次访问,设定为1
            count = 1;
        }else{
            //非第一次,递增1
            count++;
        }
        session.setAttribute("count", count);

        out.println("您是第" + count + "次访问");
        //out.close();
    }

}

(7)————-

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SomeServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //获得session对象
        HttpSession session = request.getSession();

        //设置session的超时时间为30秒
        //session.setMaxInactiveInterval(30);

        //获得sessionIds
        String sessionId = session.getId();
        System.out.println(sessionId);


        Integer count = (Integer)session.getAttribute("count");
        if(count == null){
            //第一次访问,设定为1
            count = 1;
        }else{
            //非第一次,递增1
            count++;
        }
        session.setAttribute("count", count);

        //session马上失效(session对象的内容被清空)
        //可以简单理解为session被删除
        session.invalidate();
        out.println("您是第" + count + "次访问");
        //out.close();
    }

}

(7)验证码———-

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 javax.servlet.http.HttpSession;

import dao.UserDAO;
import entity.User;

public class ActionServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String uri = request.getRequestURI();
        String action = uri.substring(uri.lastIndexOf("/")+1, uri.lastIndexOf("."));

        if("login".equals(action)){
            //先比较验证码
            //number1:用户提交的验证码
            String number1 = request.getParameter("number");
            //session对象上绑定的验证码
            HttpSession session = request.getSession();
            String number2 = (String)session.getAttribute("number");
            //不区分大小写比较:
            if(!number1.equalsIgnoreCase(number2)){
                //验证码不匹配,提示用户
                request.setAttribute("number_error", "验证码错误");
                request.getRequestDispatcher("login.jsp")
                .forward(request, response);
                return;//不再往下执行
            }
            //先读取用户名和密码
            String username = request.getParameter("username");
            String pwd = request.getParameter("pwd");

            //访问数据库,查看是否匹配
            UserDAO dao = new UserDAO();
            try {
                User user = dao.findByUsername(username);
                if(user != null && user.getPwd().equals(pwd)){
                    //登录成功,跳转到主功能页面
                    //在session对象上绑订数据
                    //HttpSession session = request.getSession();
                    session.setAttribute("user", user);
                    response.sendRedirect("main.jsp");
                }else{
                    //登录失败,跳转到登录页面,提示原因
                    request.setAttribute("login_error", "用户名或密码错误");
                    request.getRequestDispatcher("login.jsp")
                    .forward(request, response);
                }
            } catch (Exception e) {
                e.printStackTrace();
                //让容器处理系统异常
                throw new ServletException(e);
            }

        }

    }

}
package web;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CheckcodeServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*
         * 一.绘图
         */
        //step1,创建内存映像对象(画布)
        BufferedImage image = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB);
        //宽,高,颜色类型

        //step2,获得画笔
        Graphics g = image.getGraphics();
        //step3,给笔设置颜色
        g.setColor(new Color(255,255,255));
        //step4,设置背景颜色
        g.fillRect(0, 0, 80, 30);
        //坐标,宽高(rect:矩形)

        //step5,设置前景颜色
        Random r = new Random();
        g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
        //随机颜色


        //step6,绘图
        g.setFont(new Font(null,Font.ITALIC,22));
        //字体,风格,大小(单位像素)

        String number=getNumber(5);
        System.out.println(number);
        //将验证码(number)绑订到session对象上
        HttpSession session = request.getSession();
        session.setAttribute("number", number);

        //画字符串,坐标(0,0)为矩形的左下角
        g.drawString(number, 5, 26);

        //step7,加一些干扰线
        for(int i=0;i<6;i++){
            g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30));
        }
        /*
         * 二.将图片压缩并发送给浏览器
         */
        response.setContentType("image/jpeg");
        OutputStream ops = response.getOutputStream();
        //write方法:会将原始图片(image)按照
        //指定的算法("jpeg")压缩,然后输出。
        javax.imageio.ImageIO.write(image, "jpeg", ops);
        ops.close();
    }
    public String getNumber(int size){
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String number = "";
        Random r = new Random();
        for(int i=0;i<size;i++){
            number += str.charAt(r.nextInt(str.length()));
        }
        return number;
    }

}

login.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
 <head>

 </head>
 <body>
   <form action="login.do" method="post">
     <fieldset>
       <legend>登陆</legend>
                        用户名:<input name="username"/>
         <%
           String msg = (String)request.getAttribute("login_error");
          %>
          <span style="color:red;"><%=msg==null ? "" : msg%></span>
         <br/>
                        密码:<input type="password" name="pwd"/><br/>
                       验证码:<input name="number"/>
         <img src="checkcode" border="1" id="img1"/>

         <!--src='checkcode?'+Math.random()
            是为了让JS认为每次的地址都不一样,所以每次点击都会访问 checkcode -->
         <a href="javascript:;" 
         onclick="document.getElementById('img1').src='checkcode?'+Math.random()">看不清,换一个</a>
          <%
           String msg2 = (String)request.getAttribute("number_error");
          %>
          <span style="color:red;"><%=msg2==null ? "" : msg2%></span>
         <br/>
         <input type="submit" value="提交"/>
     </fieldset>
   </form>

 </body>

</html>

main.jsp

<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%
  //session是一个隐含对象,可以直接使用
  Object object = session.getAttribute("user");
  if(object == null){
     //没登录成功,或者session超时
     response.sendRedirect("login.jsp");
     return;
  }

 %>
<h1>主功能页面.....</h1>
<%
   System.out.println("只有登录成功才执行的代码");
 %>

8过滤器
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <filter>
    <filter-name>filter1</filter-name>
    <filter-class>web.CommentFilter1</filter-class>
  </filter>
  <filter>
    <filter-name>filter2</filter-name>
    <filter-class>web.CommentFilter2</filter-class>
    <init-param>
       <param-name>size</param-name>
       <param-value>4</param-value>
    </init-param>
  </filter>
  <servlet>
    <servlet-name>SomeServlet</servlet-name>
    <servlet-class>web.SomeServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>CommentServlet</servlet-name>
    <servlet-class>web.CommentServlet</servlet-class>
  </servlet>


  <filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/comment</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern>/comment</url-pattern>
  </filter-mapping>

  <servlet-mapping>
    <servlet-name>SomeServlet</servlet-name>
    <url-pattern>/some</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CommentServlet</servlet-name>
    <url-pattern>/comment</url-pattern>
  </servlet-mapping>


</web-app>
package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CommentFilter1 implements Filter {
    private FilterConfig config;
    /**
     * 容器删除过滤器实例之前会调用
     * destroy方法
     */
    public void destroy() {
        System.out.println("filter1's destroy...");
    }
    /**
     * HttpServletRequest继承了接口ServletRequest
     * 
     * 容器会调用过滤器的doFilter方法来处理请求
     * (会将request对象和response对象作为参数传进来)
     * 
     * FilterChain也提供了一个doFilter方法,
     * 如果执行了该方法,容器会继续向后调用,
     * 否则,请求处理完毕,不再向后调用
     */
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        System.out.println("filter1's doFilter begin...");

        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //读取评论的内容
        String content = request.getParameter("content");
        //读取初始化参数
        String str = config.getInitParameter("str");
        //查看是否有敏感字

        //if(content.indexOf("呵呵") != -1){
        if(content.indexOf(str) != -1){
            //有敏感字,提示用户非法评论
            out.println("非法评论");
        }else{
            //没有敏感字,调用后续的过滤器或者servlet
            //调用过滤器链FilterChain的doFilter方法
            arg2.doFilter(arg0, arg1);
        }
        System.out.println("filter1's doFilter end...");
    }
    /**
     * 容器启动之后会立即创建过滤器实例
     * (只有一个实例)。
     * 接下来,会调用该实例的init方法
     * (容器会将FilterConfig对象作为参数传进来)
     * FilterConfig提供了getInitParameter
     * 方法来访问初始化参数
     */
    public void init(FilterConfig arg0) throws ServletException {
        config = arg0;
        System.out.println("filter1's init...");
    }
    public CommentFilter1(){
        System.out.println("filter1's construtor..");
    }

}
package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CommentFilter2 implements Filter{
    //过滤器的实例化,一启动就创建

    /*用来保存init的时候的FilterConfig对象,
    *以便获取初始化参数
    *(init()方法洗执行一次便被销毁,故。。)
    */
    private FilterConfig config;
    public void destroy() {

    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain chain) throws IOException, ServletException {
System.out.println("filter2's doFilter begin...");

        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //读取评论的内容
        String content = request.getParameter("content");
        //读取初始化参数
        String size = config.getInitParameter("size");

        //查看是否字数超限
        if(content.length()>Integer.parseInt(size)){
            //字数超限提示
            out.println("字数过多");
        }else{
            //没有超限,调用后续的过滤器或者servlet
            //调用过滤器链FilterChain的doFilter方法
            chain.doFilter(arg0, arg1);
        }
        System.out.println("filter2's doFilter end...");
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        //将容器传递过来的FilterConfig对象保存下来
        config = filterConfig;
    }

}
package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CommentServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("CommentServlet's service begin...");

        //过滤器加的话,下面可以不加,为了防止过滤器取消,加上为好。
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        String content = request.getParameter("content");
        out.println("您的评论是:"+content);
        //out.close();
        System.out.println("CommentServlet's service end...");
    }

}
package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SomeServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //获得session对象
        HttpSession session = request.getSession();
        //获得sessionIds
        String sessionId = session.getId();
        System.out.println(sessionId);


        Integer count = (Integer)session.getAttribute("count");
        if(count == null){
            //第一次访问,设定为1
            count = 1;
        }else{
            //非第一次,递增1
            count++;
        }
        session.setAttribute("count", count);

        out.println("您是第" + count + "次访问");
        //out.close();
    }

}

commentform.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>

<html>
 <head></head>
 <body>
   <form action="comment" method="post">
     <fieldset>
       <legend>评论</legend>
                  请输入您的评论:
       <input name="content"/>
       <input type="submit" value="提交"/>
     </fieldset>
   </form>
 </body>
</html>

test.jsp

<h1><a href="<%=response.encodeURL("some")%>">to someServlet</a></h1>

08_2监听器

package web;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class CountListener implements HttpSessionListener{
    /**
     * session对象创建时,会调用该方法
     */
    public void sessionCreated(HttpSessionEvent arg0) {
        System.out.println("sessionCreated...");
        //HttpSessionEvenet事件对象
        //人数加1
        //先找到session
        HttpSession session = arg0.getSession();
        //然后通过session找到servlet上下文
        ServletContext sctx = session.getServletContext();
        Integer count = (Integer)sctx.getAttribute("count");
        if(count == null){
            count = 1;
        }else{
            count++;
        }
        sctx.setAttribute("count", count);
    }
    /**
     * session对象销毁时,会调用该方法
     */
    public void sessionDestroyed(HttpSessionEvent arg0) {
        System.out.println("sessionDestroyed...");
        //人数减1
        //先找到session
        HttpSession session = arg0.getSession();
        ServletContext sctx = session.getServletContext();
        Integer count = (Integer)sctx.getAttribute("count");
        count--;
        sctx.setAttribute("count", count);
    }

}
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 javax.servlet.http.HttpSession;

public class LogoutServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpSession session = request.getSession();
        session.invalidate();
    }

}

jsp

<%@ page  pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
  <head>
  </head>

  <body>
         首页<br/>
         当前在线人数是:
         <!-- application:ServletContext对象(隐含对象) -->
         <%=application.getAttribute("count")%>
         <br/>
         <a href="logout">退出系统</a>
  </body>
</html>

9 jsp

a1

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <%-- <%! ... %> jsp声明,在servlet类里面添加属性方法 --%>
   <%!
      int i = 100;
    %>

    <%=i +1%>
    <%!
       int sum(int a1,int a2){
         return a1 + a2;
       }

     %>

     <%=sum(1,1)%>
 </body>

</html>

a2

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <%
      pageContext.setAttribute("city","北京");
    %>
   <%=pageContext.getAttribute("city")%>
 </body>

</html>

a3

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <!-- 每个jsp有各自的pageContext,只有自己能访问 -->
   <%=pageContext.getAttribute("city")%>

 </body>

</html>

a4

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<!--出错就访问a5.jsp -->
<%@page errorPage="a5.jsp"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <%
     Integer.parseInt("123a");
    %>

 </body>

</html>

a5

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>

<%@page isErrorPage="true"%>
<!-- 专门处理异常(很少用,一般 业务异常都在 
     java类处理(model中处理)
) -->

<html>
 <head></head>
 <body style="font-size:20px">
   <%=exception.getMessage()%>

 </body>

</html>

a6

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <!-- config:隐含对象,即
   ServletConfig,可以用来访问jsp的初始
                        化参数。

    -->
 公司名:<%=config.getInitParameter("company") %>
 </body>

</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>a6</servlet-name>
    <jsp-file>/a6.jsp</jsp-file>
    <init-param>
      <param-name>company</param-name>
      <param-value>IBM</param-value>
    </init-param>
  </servlet>
  <servlet>
    <servlet-name>SomeServlet</servlet-name>
    <servlet-class>web.SomeServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>a6</servlet-name>
    <url-pattern>/abc.html</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>SomeServlet</servlet-name>
    <url-pattern>/some</url-pattern>
  </servlet-mapping>
  <!-- 系统异常: 
  <error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
  </error-page>
  -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"
session="true"%>

<html>
 <head></head>
 <body style="font-size:20px">
   <%=session.getId()%>

 </body>

</html>
<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@page import="java.util.*" %>
<html>
 <head></head>
 <body style="font-size:20px">
   此注释可执行java代码(查看源代码):<!--<%=new Date()%>  -->
   <br/>
   本行不可执行java代码:<%--<%=new Date()%> --%>

 </body>

</html>

09_2

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@page import="bean.*"%>
<html>
 <head></head>
 <body style="font-size:20px"><br>

   <%--下面的代码本来应该放在servlet里面,
                  暂时放在这里 --%>
   <% 
      User user = new User(); 
       user.setName("Sally");
       user.setAge(23);
       user.setInterest(new String[]{"cooking","running"});
       request.setAttribute("user",user);

       User user2 = new User();
       user2.setName("Tom");
       user2.setAge(20);
       session.setAttribute("user",user2);
    %>

    <!-- 输出: -->
    name:<%--
       //User user1 = (User)request.getAttribute("user");
       //out.println(user1.getName());
     --%>
    <br/>
    <!-- 容器会依次从pageContext,request,session,application(ServletContext)找绑定对象, 
    去执行user.getName()方法。${user.name}是指setAttribute("user",user2)
         中那个带引号的"user"
      找不到就输出空字符串 (.后面的属性写错的话会报500错误)-->
    name:${user.name}<br/>

    <!-- 如果要指定查找范围,可使用:pageScope,
    requestScope,sessionScope ,applicationScope即可 -->
    指定从session对象上查找:<br/>
    name:${sessionScope.user.name}
    <br/>
    name4:${user["name"] }<br/>
    <%
      request.setAttribute("propname","name");
     %>
     <!-- 可以导入变量,也会依次从4个隐含对象里找绑定变量,最后找到name,
        执行getName()方法
      -->
    <%-- ${user[propname]} 等价于  ${user["name"] }  --%>
    5:  ${user[propname]}<br/>
    <!-- 可输出数组下标 -->
    爱好:${user.interest[0]}
 </body>

</html>

ActionServlet

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 bean.Employee;

public class ActionServlet extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String uri = request.getRequestURI();
        String action = uri.substring(uri.lastIndexOf("/")+1, 
                uri.lastIndexOf("."));
        if("view".equals(action)){
            Employee e = new Employee();
            e.setName("Eric");
            e.setSalary(20000);
            e.setAge(22);
            request.setAttribute("e", e);
            //转发
            request.getRequestDispatcher("a2.jsp")
            .forward(request, response);
        }
    }

}

a2.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"
 import="bean.*"%>
<html>
 <head></head>
 <body style="font-size:20px">
    name: ${e.name}<br/>
    <!-- el表达式可做简单的计算: -->
    salary: ${e.salary + 1000}<br/>
    年龄: ${e.age}<br/>
     ${e["name"]}<br/>

 </body>

</html>

a3.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@page import="java.util.*"%>
<html>
 <head></head>
 <body style="font-size:20px"> 
   e算数运算<br/>
   ${1+2}<br/>

   <%-- 会尝试转成数字: ${"abc" + "bcd" }--%>
   +号只能求和,不能连接字符串<br/>
     ${"111"+"222"}
   <br/>

   <%
     request.setAttribute("str",100);
    %>
    <!-- 依次查找那4个,取得值 -->
    ${str + "200"}<br/>
    <%--  ${sessionScope.str + "200"}
             结果位200
     --%>

     逻辑运算:<br/>
     ${ 1 < 0 && 2 > 1}
     <!-- 结果位false -->
     <br/>

     关系运算:<br/>
     <%
        request.setAttribute("str1","abc");
      %>
      ${str1 == "abc"}<br/>
      <!--结果: true -->

    empty运算:<br/>
    <%
      request.setAttribute("str2","");
      List list = new ArrayList();
      request.setAttribute("list1",list);
     %>
     ${empty str2}<br/>
     <!-- 结果:true -->

     ${empty list1}<br/>
     <!-- true -->
     null值:${empty null}<br/>
     找不到值:${empty aaa}


 </body>

</html>

a4.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <!--URL: .../a4.jsp?name=Tom&city=Bejing&city=Shanghai -->
    name:${param.name}
    <!-- 等价于request.getParametervalue("name") -->


    city:${paramValues.city}<br/>
    city1:${paramValues.city[0]}

 </body>

</html>

a5.jsp jsp标签 jstl标签 jstl是什么(java standard tag lib)

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"
 import="bean.*"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- uri:空间命名 ;   prefix:前缀 ,代表命名空间-->
<html>
 <head></head>
 <body style="font-size:20px">
   <% 
      User user = new User(); 
      user.setName("张三"); 
      user.setGender("f"); 
      request.setAttribute("user",user); 
    %>
 姓名:${user.name}<br/>
 性别:<%--${user.gender}<br/>--%>
   <c:if test="${user.gender == 'f'}"></c:if>
 </body>

</html>

(10)—————-
a1.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@page import="bean.*"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <% 
      User user  = new User(); 
      user.setName("张三"); 
      user.setGender("f"); 
      request.setAttribute("user",user); 
    %>
   姓名: ${user.name}<br/>
   性别: <c:if test="${user.gender == 'm'}"></c:if>
       <c:if test="${user.gender != 'm'}"></c:if>
 <br/>

 <%-- 下面的相当于 pageContext.setAtribute("rs","${user.gender == 'm'}") --%>
    <c:if test="${user.gender == 'm'}" 
    var="rs" scope="page"></c:if><br/>
    <c:if test="${!rs}"></c:if>
 </body>

</html>

a2.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@page import="bean.*"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <%
     User user = new User();
     user.setName("Rose");
     user.setGender("m");
     request.setAttribute("user",user);
    %>

   <c:choose>
     <c:when test="${user.gender == 'm'}"></c:when>
     <c:when test="${user.gender == 'f'}"></c:when>
     <c:otherwise>未知</c:otherwise>
   </c:choose>
 </body>

</html>

ListUserServlet

package web;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.User;

public class ListUsers extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        List<User> users = new ArrayList<User>();
        for(int i=0;i<8;i++){
            User user = new User();
            user.setName("user0"+(i+1));
            user.setGender("m");
            users.add(user);
        }
        request.setAttribute("users", users);
        request.getRequestDispatcher("a3.jsp")
        .forward(request, response);
    }

}

a3.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@page import="bean.*"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
 <head>
   <style>
     .row1{
       background-color:#fff8dc;
     }
     .row2{
       background-color:#f0f0f0;
     }
   </style>
 </head>
 <body style="font-size:20px">


 </body>
   <table width="60%" border="1" cellspacing="0" cellpadding="0">
     <tr><td>姓名</td><td>性别</td><td>index</td><td>count</td></tr>

     <!-- item="${requestScope.users}" -->
     <c:forEach items="${users}" var="u" varStatus="s">
       <tr class="row${s.index%2 + 1}">
         <td>${u.name}</td>
         <td>${u.gender}</td>
         <td>${s.index}</td>
         <td>${s.count}</td>
       </tr>
     </c:forEach>
   </table>
</html>

10_2
empList.jsp 使用标签代替java代码

<%@page contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>emplist</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" 
        href="css/style.css" />
    </head>
    <body>
        <div id="wrap">
            <div id="top_content"> 
            <!-- 包含header.jsp -->
                <%@include file="header.jsp"%>

                <div id="content">
                    <p id="whereami">
                    </p>
                    <h1>
                        Welcome!
                    </h1>
                    <table class="table">
                        <tr class="table_header">
                            <td>
                                ID
                            </td>
                            <td>
                                姓名
                            </td>
                            <td>
                                薪水
                            </td>
                            <td>
                                年龄
                            </td>
                            <td>
                                操作
                            </td>
                        </tr>
                        <!-- 使用c:forEach代替下面注释掉的代码 -->
                        <c:forEach items="${emplist}" var="e" varStatus="s">
                        <tr class="row${s.index%2 + 1}">
                            <td>${e.id}</td><!-- 调用getId()方法 -->
                            <td>${e.name}</td>
                            <td>${e.salary}</td>
                            <td>${e.age}</td>
                            <td>
                                <a href="del.do?id=${e.id}"
                                 onclick="return confirm('是否确定删除${e.name}');">刪除</a>
                                &nbsp;<a href="load.do?id=${e.id}">修改</a>
                            </td>
                        </tr>

                        </c:forEach>
                        <%--
                        <%
                            List<Employee> emps = (List<Employee>)request.getAttribute("emplist");
                             for(int i=0;i<emps.size();i++){
                            Employee e = emps.get(i);
                        %>
                        <tr class="row<%=i%2+1%>">
                            <td><%=e.getId()%></td>
                            <td><%=e.getName()%></td>
                            <td><%=e.getSalary()%></td>
                            <td><%=e.getAge()%></td>
                            <td>
                                <a href="del.do?id=<%=e.getId()%>"
                                 onclick="return confirm('是否确定删除<%=e.getName()%>');">刪除</a>
                                &nbsp;<a href="load.do?id=<%=e.getId()%>">修改</a>
                            </td>
                        </tr>
                        <%} %> --%>


                    </table>
                    <p>
                        <input type="button" class="button" value="添加员工" onclick="location='addEmp.jsp'"/>
                    </p>
                </div>
            </div>
            <%@include file="footer.jsp"%>
        </div>
    </body>
</html>

error.jsp

<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<html>
  <head></head>
  <body style="font-size:20px;color:red;">
  <%-- 
    <%
      String msg = (String)request.getAttribute("error_msg");
     %>
     <%=msg%>可能输出null
     --%>

     <!-- 不输出null -->
     ${error_msg}
  </body>
</html>

自定义标签:
step1,写一个java类,继承SimpleTagSupport类。
step2,在doTag方法里面,编写处理逻辑。
step3,在.tld文件当中,描述标签。
注:
.tld文件要放到WEB-INF下。

        HelloTag.java
package tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
/**
 * 标签类开发要点:
 * 1,继承SimpleTagSupport类
 * 2,override doTag方法,编写处理逻辑
 * 3.标签有哪些属性,标签类也要有相应的属性(属性名一致,
 *   类型要匹配,并提供相应的set方法)
 *
 */
public class HelloTag extends SimpleTagSupport{
    private String info;
    private int qty;

    public HelloTag() {
        System.out.println("HelloTag's construction...");
    }
    public void setInfo(String info) {
        System.out.println("setInfo...");
        this.info = info;
    }
    public void setQty(int qty) {
        System.out.println("setQty...");
        this.qty = qty;
    }

    @Override
    public void doTag() throws JspException, IOException {
        System.out.println("HelloTag's doTag()....");
        //通过SimpleContext提供的方法getJspcontext来获得PageContext:

        PageContext ctx = (PageContext)getJspContext();
        //PageContext提供了获得其他隐含对象的方法
        //PageContext 可获得其他8个隐含对象
        JspWriter out = ctx.getOut();

        for(int i=0;i<qty;i++){
            out.println(info+"<br/>");
        }
    }

}

DataTag.java

package tag;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;


public class DateTag extends SimpleTagSupport{
    private String pattern;

    public void setPattern(String pattern) {
        this.pattern = pattern;
    }

    @Override
    public void doTag() throws JspException, IOException {
        PageContext ctx = (PageContext)getJspContext();
        JspWriter out = ctx.getOut();

        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        out.println(sdf.format(date));
    }

}

mytag.tld

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
  <tlib-version>1.1</tlib-version>
  <short-name>c1</short-name>
  <uri>http://baidu.com</uri>
  <tag>
    <name>hello</name>
    <tag-class>tag.HelloTag</tag-class>
    <body-content>empty</body-content> <!-- 标签体empty(即没有后面的</...>) -->
    <attribute>
        <name>info</name>
        <required>true</required>  <!-- 必须有 -->
        <rtexprvalue>false</rtexprvalue> <!-- 可不可动态赋值(是否可以用el表达式赋值) -->
    </attribute>
    <attribute>
        <name>qty</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>

    <tag>
    <name>date</name>
    <tag-class>tag.DateTag</tag-class>
    <body-content>empty</body-content> <!-- 标签体empty(即没有后面的</...>) -->
    <attribute>
        <name>pattern</name>
        <required>true</required>  <!-- 必须有 -->
        <rtexprvalue>false</rtexprvalue> <!-- 可不可动态赋值(是否可以用el表达式赋值) -->
    </attribute>
  </tag>
</taglib>

使用自定义标签
header.jsp

<%--@page import="java.util.*,java.text.*" --%>
<%@taglib uri="http://baidu.com" prefix="c1"%>
<div id="header">
    <div id="rightheader">
        <p>

        <c1:date pattern="yyyy-MM-dd"/>
        <%--
            <%
              Date date = new Date();
              SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             %>
             <%=sdf.format(date)%>
              --%>
            <br />
        </p>
    </div>
    <div id="topheader">
        <h1 id="title">
            <a href="#">Main</a>
        </h1>
    </div>
    <div id="navigation">
    </div>
</div>

hello1.jsp(没使用自定义标签)

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <%
     for(int i=0;i<100;i++){
        out.println("Hello Kitty<br/>");
     }
    %>

 </body>

</html>

hello2.jsp 使用自定义标签

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@taglib uri="http://baidu.com" prefix="c1"%>
<html>
 <head></head>
 <body style="font-size:20px">
   <c1:hello info="Hello World" qty="${1+8}"/>

 </body>

</html>

updateEmp.jsp

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%--<%@page import="entity.*"--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>update Emp</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css"
            href="css/style.css" />
    </head>

    <body>
        <div id="wrap">
            <div id="top_content">
                    -<%@include file="header.jsp"%>
                <div id="content">
                    <p id="whereami">
                    </p>
                    <h1>
                        修改员工:
                    </h1>
                    <%-- 
                    <%
                       Employee e = (Employee)request.getAttribute("e");
                     %>--%>

                     <!-- servlet里绑定了e,所以el表达式直接拿来用 -->
                    <form action="modify.do?id=${e.id}" method="post">
                        <table cellpadding="0" cellspacing="0" border="0"
                            class="form_table">
                            <tr>
                                <td valign="middle" align="right">
                                    id:
                                </td>
                                <td valign="middle" align="left">
                                    ${e.id}
                                </td>
                            </tr>
                            <tr>
                                <td valign="middle" align="right">
                                    name:
                                </td>
                                <td valign="middle" align="left">
                                    <input type="text" class="inputgri" name="name" value="${e.name}"/><%-- el表达式代替<%=e.gayName()%> --%>
                                </td>
                            </tr>
                            <tr>
                                <td valign="middle" align="right">
                                    salary:
                                </td>
                                <td valign="middle" align="left">
                                    <input type="text" class="inputgri" name="salary" value="${e.salary}"/>
                                </td>
                            </tr>
                            <tr>
                                <td valign="middle" align="right">
                                    age:
                                </td>
                                <td valign="middle" align="left">
                                    <input type="text" class="inputgri" name="age" value="${e.age}"/>
                                </td>
                            </tr>
                        </table>
                        <p>
                            <input type="submit" class="button" value="提交" />
                        </p>
                    </form>
                </div>
            </div>
            <%@include file="footer.jsp"%>
        </div>
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值