(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>
<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>
<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>