Java III Web [A]


Java Web

在这里插入图片描述

Java Web 1: Web Intro & JSP Intro

  • Tomcat
  • idealIU
    在这里插入图片描述
  • linux
    在这里插入图片描述
  • linux
    在这里插入图片描述
  • URL: Uniform Resource Locator
    +
  • Client/server
    在这里插入图片描述
  • Browser/server
    在这里插入图片描述
  • Browse/Client: App Server to Data Server
    在这里插入图片描述
    在这里插入图片描述
  • Nginx: Open Source Web Server ,reverse proxy, HTTP cache, and load balancer
  • tomcat Edit: apache-tomcat\conf\server.xml
    在这里插入图片描述
    +
  • Environment variable setup
    在这里插入图片描述
  • run bat files
D:\Program Files\Tomcat9\bin>catalina.bat
D:\Program Files\Tomcat9\bin>startup.bat
  • installed!
    在这里插入图片描述
    在这里插入图片描述
  • test
  • Tomcat9/webapps/javamysql/index.jsp
<html>
<head>
<title>Web App</title>
</head>
<body>
	HTML for Java & Mysql created by user
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • testing Tomcat
D:\Program Files\Tomcat9\bin>startup.bat
Using CATALINA_BASE:   "D:\Program Files\Tomcat9"
Using CATALINA_HOME:   "D:\Program Files\Tomcat9"
Using CATALINA_TMPDIR: "D:\Program Files\Tomcat9\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_112\"
Using CLASSPATH:       "D:\Program Files\Tomcat9\bin\bootstrap.jar;D:\Program Files\Tomcat
9\bin\tomcat-juli.jar"
D:\Program Files\Tomcat9\bin>startup.bat
Using CATALINA_BASE:   "D:\Program Files\Tomcat9"
Using CATALINA_HOME:   "D:\Program Files\Tomcat9"
Using CATALINA_TMPDIR: "D:\Program Files\Tomcat9\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_112\"
Using CLASSPATH:       "D:\Program Files\Tomcat9\bin\bootstrap.jar;D:\Program Files\Tomcat
9\bin\tomcat-juli.jar"
D:\Program Files\Tomcat9\bin>shutdown.bat
Using CATALINA_BASE:   "D:\Program Files\Tomcat9"
Using CATALINA_HOME:   "D:\Program Files\Tomcat9"
Using CATALINA_TMPDIR: "D:\Program Files\Tomcat9\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_112\"
Using CLASSPATH:       "D:\Program Files\Tomcat9\bin\bootstrap.jar;D:\Program Files\Tomcat
9\bin\tomcat-juli.jar"
D:\Program Files\Tomcat9\bin>ca

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • put javamysql file under D: drive
    在这里插入图片描述
  • run startup.bat
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • run startup.bat
  • install intellij
    +
    在这里插入图片描述
  • Edit> Find> Find in Path
  • VCS>VCS Operations Popup: github, svn, cvs
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • create UserDao.java under src
public class UserDao {
    //psvm+tab
    public static void main(String[] args) {
        //sout+tab
        System.out.println();
    }
}

在这里插入图片描述

  • JSP: Java Server Pages
    在这里插入图片描述
  • web.xml: add welcome file
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <welcome-file-list>
<welcome-file>wzm.jsp</welcome-file>
    </welcome-file-list>
</web-app>

在这里插入图片描述
在这里插入图片描述

  • create list.html under web
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>News List</title>
</head>
<body>
WEB-INF List.html
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • web/index.jsp
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;
charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<!--html comment-->
<%--JSP comment--%>
<%
    out.println("this is JSP code");
%>
<%
    String title = "News";
%>
<%=title%>
<%--date/time--%>
<%=new Date()%>
<%--time format--%>
<%
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String curDate = sdf.format(new Date());
%>
<%=curDate%>
<%="\"News Title\""%>
<%--global var--%>
<%!String global="This is a GLOBAL var";%>
<%--class var used if same name as global var--%>
<%String global="This is a global var";%>
<%=global%>
<%! int num=2;%>
<% int num=0;%>
<%=num++%><%--0--%>
<%=this.num++%><%--2 Use global var with this--%>
<%--method use !--%>
<%!
public String method(){
    return "Method";
}
%>
<%=method()%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • request
    在这里插入图片描述
    在这里插入图片描述
  • web/regQQ.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>regQQ</title>
</head>
<body>
<form action="reg_success.jsp" method="post">
    Name: <input type="text" name="nameID"/><br/>
    Subjects: <input type="checkbox" name="sub" value="BigData"/>Big Data
    <input type="checkbox" name="sub" value="Java"/>Java
    <input type="checkbox" name="sub" value="FrontEnd"/>FrontEnd<br/>
    Gender: <input type="radio" name="gender" value="female">female
    <input type="radio" name="gender" value="male">male<br/>
    Description: <textarea row="5" cols="30" name="desc"></textarea><br/>
    <input type="submit" value="sub"/>
    Region: <select name="reg">
    <option value="-1">==choose==</option>
    <option value="Shanghai">Shanghai</option>
    <option value="NYC">NYC</option>
    <option value="Rome">Rome</option><br/>
</select><br/>
</form>
</body>
</html>
  • web/reg_success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>reg_success</title>
</head>
<body>
Success!
QQ: 123456789
<%
    request.setCharacterEncoding("utf-8");
    String nameID = request.getParameter("nameID");
    String[] subs = request.getParameterValues("sub");
    String gen = request.getParameter("gender");
    String desc = request.getParameter("desc");
    String reg = request.getParameter("reg");
%>
name: <%=nameID%><br/>
subject:
<% if (subs != null && subs.length > 0) {%>
<% for (int i = 0; i < subs.length; i++) {%>
<%=subs[i]%>
<%}%>
<%}else{%>
<%="Subject Not Selected"%>
<%}%><br/>
gender: <%=gen%><br/>
description: <%=desc%><br/>
region: <%=reg%><br/>
<%--print time table--%>
<% for (int i = 1; i <= 9; i++) { %>
<% for (int j = 1; j <= i; j++) { %>
<% out.print(i + " * " + j + " = " + (i * j) + "\t");%>
<% }%>
<br/>
<% }%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • V:pageContext: current page: pageContext.setAttribute(“key”, value); pageContext.getAttribute(“key”);
  • V: request: within same request page: request.setAttribute(“key”, value); User u=(User)request.getAttribute(“curU”);
  • V: session: within same session: session.setAttribute(“key”, value);
  • +: application: within same server: application.setAttribute(“key”, value);
    在这里插入图片描述
  • Response
  • page/Login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
<form action="doLogin.jsp" method="post">
    User name: <input type="text" name="uname"/>
    Password: <input type="password" name="pwd"/>
    <input type="submit" value="Submit">
</form>
</body>
</html>
  • page/DoLogin.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
    String uname=request.getParameter("uname");
    request.setAttribute("uname",uname);
    String pwd=request.getParameter("pwd");
    request.setAttribute("pwd", pwd);
    User user=new User(uname, pwd); //add attributes to user
    request.setAttribute("curUser", user);
    request.getRequestDispatcher("login_success.jsp").
            forward(request,response); //transfer, address does not change
   // response.sendRedirect("login_success.jsp");
    // address changes, transfer without transfer data values
%>
  • page/Login_success.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login_success</title>
</head>
<body>
Welcome [<%=request.getAttribute("uname")%>] back!
Welcome [<%=request.getAttribute("curUser")%>] back!
Welcome [<% User user=(User)request.getAttribute("curUser");%>
<%=user.getUsername()%>] back!
</body>
</html>

+com.abc.web.model/User.java

package com.abc.web.model;
public class User {
    private String username;
    private String password;
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    public User(){}

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

Java Web 2: JSP Data Delivery & Save

  • Forward

  • request.getRequestDispatcher(“login_success.jsp”).forward(request, response); //address: http://localhost:8080/page/doLogin.jsp //fast //single request/response //address does not change //save values
    在这里插入图片描述

  • redirect

  • response.sendRedirect(“login_success.jsp”); //address: http://localhost:8080/page/login_success.jsp //slow //two request/response //address changes //does not save values
    在这里插入图片描述

在这里插入图片描述

  • task/doLogin.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    String uname = request.getParameter("uname");
    String pwd = request.getParameter("pwd");
%>
<%
    if ("Admin".equals(uname) && "123".equals(pwd)) {
        request.setAttribute("uname", uname);
        request.setAttribute("pwd", pwd);
        request.getRequestDispatcher("login_success.jsp").
                forward(request, response);
        System.out.println("This is forwarding");
        out.write("<script>alert(123)</script>");
    } else {
        request.setAttribute("errorMsg", "Incorrect Username or password");
        response.sendRedirect("login.jsp");
        System.out.println("This is redirect");
        out.write("<script>alert(123)</script>");
    }
%>
  • task/login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
<div id="container">
    <div class="content">
        <form action="doLogin.jsp" method="post">
            <div>
                <div>User Login</div>
                <div>Username<input type="text" name="uname"/></div>
                <div>Password<span class="pwd"><input type="password" name="pwd"/></span></div>
                <div><input type="submit" value="Enter"/></div>
            </div>
        </form>
        <%
            String errorMsg=(String)request.getAttribute("errorMsg");
            if(errorMsg !=null){
        %>
        <%=errorMsg%>
        <%}%>
    </div>
</div>
</body>
</html>
  • task/login_success.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login_success</title>
</head>
<body>
<%
    String uname=(String)request.getAttribute("uname");
    String pwd= (String)request.getAttribute("pwd");
    if(uname!=null && pwd !=null){
%>
<%="WELCOME, SUCCESS LOGIN"%><br/>
<%=uname%></br>
<%=pwd%></br>
<%}%>
</body>
</html>
  • session, cookie, application

  • request, session, application can all store attributes
    在这里插入图片描述
    在这里插入图片描述

  • 在这里插入图片描述

  • JSESSIONID=ABC123ABC> produced whenever new session created

  • browser visit server: produce session> session.setAttribute(“curUser”, user);

  • enter info in browser: session save data> session. getAttribute(“curUser”);

  • within session limit>session.setMaxInactiveInterval(60); //if recreate session at 59s, restart 60s count

  • close server at limit: end session> < session-config>< session-timeout>1< /session-timeout>< /session-config>

  • server end session:session ends>

  • end session, delete attributes> session.removeAttribute(“curUser”);

  • session data deleted>session.invalidate();
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • session does not ends when browser closes, produces new sessionid
    在这里插入图片描述

  • must import servlet-api.jar when using cookie, put under WEB-INF/lib : add as library
    在这里插入图片描述
    在这里插入图片描述

  • add as library
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • User.java

package com.abc.web.model;
public class User {
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    public User(){}
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
  • page/doLogin.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
    String uname=request.getParameter("uname");
    session.setAttribute("uname",uname);
    String pwd=request.getParameter("pwd");
    session.setAttribute("pwd", pwd);
    User user=new User(uname, pwd); //add attributes to user
    //request.setAttribute("curUser", user);
    session.setAttribute("curUser",user);
    session.setMaxInactiveInterval(10); //set 60 seconds
    session.setAttribute("now",new Date());
    request.getRequestDispatcher("login_success.jsp").
            forward(request,response); //transfer, address does not change
    // response.sendRedirect("login_success.jsp");
    // address changes, transfer without transfer data values
%>
  • page/lastLogin.jsp
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/7/23
  Time: 19:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>lastLogin</title>
</head>
<body>
<%
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
    String date = sdf.format(new Date());
    date.trim().replaceAll(" ", "");
    Cookie cookie = new Cookie("lastLogin", date);
    //cookie.setPath("/"); //determine path
    //cookie.setDomain(".abc.web."); //name
    //response.addCookie(cookie);
%>
<%=cookie.getName() + " 1:" + cookie.getValue()%><br/>
<%
    Cookie[] cookies = request.getCookies();
    boolean isFirst = true;
    for (Cookie ck : cookies) {
        if ("lastLogin".equals(ck.getName())) {
%>
<%="last Login 2:" + ck.getValue()%><br/>
<%
            date = sdf.format(new Date());
            date.trim().replaceAll(" ", "");
            ck.setValue(date); //update value
            //ck.setMaxAge(0); //set limit
            isFirst = false;
        } else {
            isFirst = true;
        }
        if (isFirst) {
            cookie.setValue(date);
            response.addCookie(cookie);
        }
    }
%>
</body>
</html>
  • page/login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
<form action="doLogin.jsp" method="post">
    User name: <input type="text" name="uname"/>
    Password: <input type="password" name="pwd"/>
    <input type="submit" value="Submit">
</form>
</body>
</html>
  • page/login_success.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login_success</title>
</head>
<body>
Welcome <%=session.getAttribute("uname")%> back!
Welcome <%=session.getAttribute("curUser")%> back!
Welcome <% //User user=(User)request.getAttribute("curUser");
        User user=(User)session.getAttribute("curUser");%>
<%=user.getUsername()%> back!

</body>
</html>
  • page/logout.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>logout</title>
</head>
<body>
<%
    session.removeAttribute("curUser"); //remove specific session
    //session.invalidate();//destroy all sessions //cannot access session
%>
</body>
</html>
  • page/manager.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>manager</title>
</head>
<body>
Welcome
<%User user=(User)session.getAttribute("curUser");%>
<%//if (session.isNew()) {%>
<%if (user==null){%>
Not logged in
<%=session.getAttribute("now")%>
<%} else {%>
<%=user.getUsername()%>
back! logged in, This is manager.jsp
<%=session.getAttribute("now")%>
<a href="logout.jsp">logout</a>
<%}%>
</body>
</html>
  • page2/doLogin_cookie.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
    String uname=request.getParameter("uname");
    String pwd=request.getParameter("pwd");
    User user=new User(uname, pwd); //add attributes to user
    String save=request.getParameter("validate");//get save result
    if (save!=null && !"".equals(save)){
        System.out.println(save);
        int validate=Integer.parseInt(save);
        Cookie cookie = new Cookie("user","user"); //create cookie
        cookie.setValue(uname);
        cookie.setMaxAge(validate*60);
        response.addCookie(cookie);//add cookie
    }
    request.getRequestDispatcher("login_success_cookie.jsp").
            forward(request,response); //transfer, address does not change
%>
  • page2/login_cookie.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
<form action="doLogin_cookie.jsp" method="post">
    User name: <input type="text" name="uname"/>
    Password: <input type="password" name="pwd"/><br/>
    1 Min: <input type="radio" name="validate" value="1"/>
    2 Min: <input type="radio" name="validate" value="2"/>
    3 Min: <input type="radio" name="validate" value="3"/>
    <input type="submit" value="Submit">
</form>
</body>
</html>
  • page2/login_success_app.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>appSuccess</title>
</head>
<body>
<%
    int count=0;
    Integer c=(Integer) application.getAttribute("count");
    if(c!=null){
        c++;
    }else{
        c=1;
    }
    application.setAttribute("count",c);
    application.removeAttribute("count"); //stop application
    out.println(c);
    out.println("123.456.1.4:8080/javaweb01_war_exploded/page2/login_success_app.jsp");
%>
</body>
</html>
  • page2/login_success_cookie.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login_success</title>
</head>
<body>
<%
    Cookie[] cookies=request.getCookies();
    for(int i=0; i<cookies.length; i++){
        Cookie cookie= cookies[i];
        if("user".equals(cookie.getName())){
            out.println("welcome "+cookie.getValue()+" back!");
        }else{
            out.println(cookie.getName()+":"+cookie.getValue()+"\n");
        }
    }
%>
</body>
</html>
  • WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <welcome-file-list>
<welcome-file>wzm.jsp</welcome-file>
    </welcome-file-list>
    <!--set session timeout-->
    <session-config>
        <!--1min-->
        <session-timeout>1</session-timeout>
    </session-config>
</web-app>
  • use myEclipse
    在这里插入图片描述
  • add tomcat
    在这里插入图片描述
  • add jdk
    在这里插入图片描述
  • run jsp files
    在这里插入图片描述
  • jar ; war
  • pacakge: jar -cvf target.war ./*
  • package: jar -cvf target.war WebRoot
  • unpack: jar -xvf target.war ./*
C:\Users\Administrator>jar --help
D:\MEWorkspace\news>jar -cvf news.war ./*

在这里插入图片描述

  • Eclipse files
    在这里插入图片描述
  • login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>Login</title>
  </head>
  <body>
<form action="page/doLogin.jsp" method="post">
	User: <input type="text" name="uname"/><br/>
	Password: <input type="password" name="pwd"/><br/>
	<input type="submit" name="sub" value="submit"/>
	<%
		String msg= (String)session.getAttribute("msg");
		if(msg!=null && !"".equals(msg)){
			out.println(msg);
		}else{
			out.println("uname empty");
		}
	 %>
</form>
  </body>
</html>
  • doLogin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.abc.news.model.User" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<% 
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	response.setContentType("text/html; charset=utf-8");
	//request.getParameterValues("sub");
	String uname=request.getParameter("uname");//get name
	String pwd=request.getParameter("pwd"); //get pwd
	User user= new User(uname, pwd); //create User
	if("admin".equals(uname) && "123".equals(pwd)){ //set curUser
		session.setAttribute("curUser",user); //session save
		request.getRequestDispatcher("login_success.jsp")
		.forward(request,response); //jump to another page
	}else if (!"".equals(uname)){
		session.setAttribute("msg","incorrect"); //session save
		request.getRequestDispatcher("login.jsp")
		.forward(request,response); //jump to another page
	}else{
		session.setAttribute("msg",null);
		request.getRequestDispatcher("login.jsp")
		.forward(request,response); //jump to another page
	}
%>
  • login_success.jsp
<%@ page import="com.abc.news.model.User" %>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>login_success</title>
  </head>
  <body>
<%
	User user= (User)session.getAttribute("curUser");
	if(user !=null){
		out.println("welcome["+user.getUsername()+"]!"
		+"<a href=‘logout.jsp'>logout</a>"); 
		//"<a href='javascript:void(0)' onlick='logout()'>logout</a>"
	} 
%>
  </body>
</html>
  • Intellij open Eclipse news
  • file/ project structure
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • fix/ create artifact
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • run server, run jsp
    在这里插入图片描述
  • Error: java.lang.IllegalArgumentException: control character in cookie value or attribute
  • Solved by changing character Encoding: URLEncoder.encode(uname,“utf-8”));
  • Under Web folder
    在这里插入图片描述
  • task/doLogin.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    String uname = request.getParameter("uname");
    String pwd = request.getParameter("pwd");
%>
<%
    if ("Admin".equals(uname) && "123".equals(pwd)) {
        request.setAttribute("uname", uname);
        request.setAttribute("pwd", pwd);
        request.getRequestDispatcher("login_success.jsp").
                forward(request, response);
        //addition
        Cookie cookie= new Cookie("c_uname",
                URLEncoder.encode(uname,"utf-8"));
        cookie.setMaxAge(2*60);//2min
        response.addCookie(cookie);
        //addition
        System.out.println("This is forwarding");
    } else {
        request.setAttribute("errorMsg", "Incorrect Username or password");
        request.getRequestDispatcher("login.jsp")
                .forward(request,response);
        System.out.println("This is forwarding");
        //out.write("<script>alert(123)</script>");
    }
%>
  • task/login.jsp
<%@ page import="java.net.URLDecoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
    <style type="text/css">
        .content{
            text-align: center;
            width: 500px;
        }
        .pwd{
            margin-left: 10px;
        }
        div{
            margin-bottom: 5px;
        }
    </style>
</head>
<body>
<div id="container">
    <div class="content">
        <form action="doLogin.jsp" method="post">
            <div>
                <div>User Login</div>
                <div>Username <input type="text" name="uname"
                                    value="<%=c_uname%>"/></div>
                <div>Password <span class="pwd"><input type="password" name="pwd"/></span></div>
                <div><input type="submit" value="Enter"/></div>
            </div>
        </form>
        <%!String c_uname="";%>
        <%
            //addition
            Cookie[] cookies=request.getCookies();
            for(Cookie c: cookies){
                if("c_uname".equals(c.getName())){
                    c_uname= URLDecoder.decode(c.getValue(),"utf-8");
                }
            }
            //application
            Integer c=(Integer)application.getAttribute("count");
            if(c!=null){
                c++;
            }else{
                c=1;
            }
            application.setAttribute("count",c++);
            //addition
            String errorMsg=(String)request.getAttribute("errorMsg");
            if(errorMsg !=null){
        %>
        <%=errorMsg%></br>
        <%}%>
    </div>
</div>
<%="page visited: "+application.getAttribute("count")%>
</body>
</html>
  • task/login_success.jsp
<%@ page import="com.abc.web.model.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login_success</title>
</head>
<body>
<%
    String uname=(String)request.getAttribute("uname");
    String pwd= (String)request.getAttribute("pwd");
    if(uname!=null && pwd !=null){
%>
<%="WELCOME, SUCCESS LOGIN"%><br/>
<%=uname%></br>
<%=pwd%></br>
<%}%>
</body>
</html>

在这里插入图片描述

  • token through session & javascript
  • formsub/doReg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>doReg</title>
</head>
<body>
<%
    String name=request.getParameter("uname");
    //get token from javascript
    String client_token=request.getParameter("client_token");
    //get token from session
    String server_token=(String)session.getAttribute("token");
    if(client_token==null){
        System.out.println("client_token null do not sumbit again");
        return;
    }
    if(server_token==null){
        System.out.println("server_token null do not sumbit again");
        return;
    }
    if(!client_token.equals(server_token)){
        System.out.println("!client_token.equals(server_token) do not sumbit again");
        return;
    }
    System.out.println("client_token: "+client_token);
    System.out.println("Server_token: "+server_token);
    System.out.println("Registered User: "+name);
    session.removeAttribute("token");
%>
</body>
</html>
  • formsub/preReg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>preReg</title>
</head>
<body>
<!--Create Token-->
<%
    String token=System.currentTimeMillis()+"";
    //save into session
    session.setAttribute("token",token);
    //forward to Reg.jsp
    request.getRequestDispatcher("Reg.jsp").
            forward(request,response);
%>
</body>
</html>
  • formsub/Reg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Reg</title>
    <script type="text/javascript">
        var submit=false;
        function do_submit(){
            if(!submit){
                submit=true;
                return true;
            }else{
                return false;
            }
        }
    </script>
</head>
<body>
<form action="doReg.jsp" method="post" onsubmit="return do_submit()">
  <!--save token into form-->
    <input type="hidden" name="client_token"
           value="<%=session.getAttribute("token")%>"/>
    User name: <input type="text" name="uname"/>
    <input type="submit" value="SUBMIT"/>
</form>

</body>
</html>

Java Web 3: JDBC & JavaBean access DB

  • jdk api
    在这里插入图片描述

  • open mySQL 在这里插入图片描述
    在这里插入图片描述

  • create new web Project in Eclipse

  • import mysql-connector-java-5.1.5-bin.jar into WEB-INF/lib> build path/ configure build path/ source path
    在这里插入图片描述

  • <%@ page import=“java.sql.*” %>

  • Class.forName(“com.mysql.jdbc.Driver”);

  • java.sql: Interface Connection; Interface Driver: Class DriverManager; Interface Statement; Interface ResultSet

  • <%@ page import=“java.io.*” %>

  • <%@ page import=“java.util.*”%>

  • java.util: Class Properties

    1. import jar package: mysql-connector-java-5.1.20-bin.jar
    1. add drive: Class.forName(“com.mysql.jdbc.Driver”);
    1. Get Connectio package: <%@page import=“java.sql.Connection”%>
  • PreparedStatement: executeUpdate()

    1. SQL: String sql ="select * from user where name= “+name+” and password=“pwd” or 1=1;
      在这里插入图片描述
  • news
    在这里插入图片描述

  • NewsDao.java

package com.abc.news.dao;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.abc.news.util.ConfigManager;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
//news dao
public class NewsDao {
	public static void main(String[] args) {
		int result=new NewsDao().addNews();
		if(result>0)
			new NewsDao().getNews();
	}
	// service: find
	public void getNews() {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// Class.forName("com.mysql.jdbc.Driver");
			Class.forName(ConfigManager.getValue("driver"));
			// conn=(Connection)
			// DriverManager.getConnection("jdbc:mysql://localhost:3306/news",
			// "root","123abc");
			conn = (Connection) DriverManager.getConnection(ConfigManager.getValue("url"),
					ConfigManager.getValue("username"), ConfigManager.getValue("password"));
			ps = (PreparedStatement) conn.prepareStatement("select * from news_detail");
			rs = ps.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getInt(1));
				System.out.println(rs.getInt(2));
				System.out.println(rs.getString(3));
				System.out.println(rs.getString(4));
				System.out.println(rs.getString(5));
				System.out.println(rs.getString(6));
				System.out.println(rs.getString(7));
				System.out.println(rs.getDate(8));
				System.out.println(rs.getDate(9));
				System.out.println("*************");
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (ps != null)
					ps.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	// dao: get
	public int addNews() {
		int result = 0;
		try {
			Class.forName(ConfigManager.getValue("driver"));
			Connection conn = (Connection) DriverManager.getConnection(ConfigManager.getValue("url"),
					ConfigManager.getValue("username"), ConfigManager.getValue("password"));
			String sql = "insert into news_detail(id, categoryId, title, summary, content, "
					+ "picPath, author, createDate,modifyDate) values(?,?,?,?,?,?,?,?,?)";
			PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
			ps.setInt(1, 3);
			ps.setInt(2, 2);
			ps.setString(3, "Sports");
			ps.setString(4, "football");
			ps.setString(5, "someone wins");
			ps.setString(6, null);
			ps.setString(7, "admin");
			ps.setDate(8, new Date(System.currentTimeMillis()));
			ps.setDate(9, null);
			//update
			result=ps.executeUpdate();

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
}
  • ConfigManager.java
package com.abc.news.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManager {
	public static String getValue(String name) {
		Properties prop = new Properties();
		InputStream is = ConfigManager.class.getClass()
				.getResourceAsStream("/database.properties");
		try {
			prop.load(is);
			return prop.getProperty(name);
		} catch (IOException e) {
			throw new RuntimeException();
		}
	}
}
  • database.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/news
username=root
password=123abc
  • javaweb_jdbc01
  • use jsp to select elements in html: <%if(stu.getSex()==1){%> checked=“checked” <%}%>/> male
  • confirm use jsp in html: < a href=“doDel.jsp?sno=<%=stu.getStudentNo()%>” οnclick=“javascript:return confirm(‘Delete?’)”>delete
    在这里插入图片描述
  • BaseDao.java
package com.abc.jdbc.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.abc.jdbc.util.ConfigUtil;
//Data Access Object
public class BaseDao {
	static Connection conn=null;
	static PreparedStatement ps=null;
	 static ResultSet rs=null;
	//static block
	static{
		try{
			Class.forName(ConfigUtil.getValue("driver"));
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}
	}
	//search
	public  ResultSet search(String sql){
		try {
			rs = ps.executeQuery();
			return rs;
		} catch (SQLException e) {
			throw new RuntimeException();
		}
	}
	//get Connection
	public static  Connection getConn(){
		try {
			conn=DriverManager.getConnection(
					ConfigUtil.getValue("url"),
					ConfigUtil.getValue("username"),
					ConfigUtil.getValue("password"));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	//modify
	public  int modify(){
		try{
			return ps.executeUpdate();
		}catch(SQLException e){
			throw new RuntimeException();
		}
	}
	//close
	public static void close(ResultSet rs, PreparedStatement ps,Connection conn){
		try{
			if(rs !=null) rs.close();
			if(ps !=null) ps.close();
			if(conn != null) conn.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
}
  • StudentDao.java
package com.abc.jdbc.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.abc.jdbc.model.Student;
import java.sql.PreparedStatement;
public class StudentDao {
	 static PreparedStatement ps = null;
	 static Connection conn=null;
	// get stu
	public Student getStuByStuNo(String stuNo) {
		Student stu = null;
		String sql = "select * from student where studentNo=?";
		try {
			conn=BaseDao.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, stuNo);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) { //use while if there's multiple answers
				stu=new Student();
				String sno = rs.getString("studentNo");
				String stuName = rs.getString("studentName");
				String loginPwd = rs.getString("loginPwd");
				String email = rs.getString("email");
				int gender = rs.getInt("sex");
				String birth = rs.getString("birthDate");
				stu.setStudentNo(sno);
				stu.setStudentName(stuName);
				stu.setLoginPwd(loginPwd);
				stu.setEmail(email);
				stu.setSex(gender);
				stu.setBirthDate(birth);
			}
			System.out.println("getStuByStuNo.java= stuNo: " + stuNo);
		} catch (SQLException e) {																																																																																																																																																																																				
			e.printStackTrace();
		}finally{
		//	BaseDao.close(null, ps,conn);
		}
		System.out.println("getStuByStuNo.java= student: " + stu);
		return stu;
	}
	// update stu
	public static int updateStu(Student stu) {
		String sql = "update student "
				+ "set studentName=?, sex=?,email=?,birthDate=?,loginPwd=?"
				+ "where studentNo=?";
		System.out.println("update.java= stu: " + stu);
		try {
			conn=BaseDao.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, stu.getStudentName());
			ps.setInt(2, stu.getSex());
			ps.setString(3, stu.getEmail());
			ps.setString(4, stu.getBirthDate());
			ps.setString(5, stu.getLoginPwd());
			ps.setString(6, stu.getStudentNo());
			return ps.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException();
		} finally {
	//	BaseDao.close(null, ps,conn);
		}
	}
	//delete Student
	public int delStu(String stuNo){
		String sql="delete from student where studentNo=?";
		try {
			conn=BaseDao.getConn();
			ps=conn.prepareStatement(sql);
			ps.setString(1, stuNo);
			return ps.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException();
		}
	}
}
  • Student.java
package com.abc.jdbc.model;
public class Student {
	private String studentNo;
	private String loginPwd;
	private String studentName;
	private int sex;
	private int gradeID;
	private String Phone;
	private String Address;
	private String birthDate;
	private String email;
	private String idCard;
	//constructors	
	public Student(){}
	public Student(String studentNo, String loginPwd, 
			String studentName, int sex, int gradeID, String phone,
			String address, String birthDate, String email,
			String idCard) {
		super();
		this.studentNo = studentNo;
		this.loginPwd = loginPwd;
		this.studentName = studentName;
		this.sex = sex;
		this.gradeID = gradeID;
		Phone = phone;
		Address = address;
		this.birthDate = birthDate;
		this.email = email;
		this.idCard = idCard;
	}
	//getter setters
	public String getStudentNo() {
		return studentNo;
	}
	public void setStudentNo(String studentNo) {
		this.studentNo = studentNo;
	}
	public String getLoginPwd() {
		return loginPwd;
	}
	public void setLoginPwd(String loginPwd) {
		this.loginPwd = loginPwd;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public int getSex() {
		return sex;
	}
	public void setSex(int sex) {
		this.sex = sex;
	}
	public int getGradeID() {
		return gradeID;
	}
	public void setGradeID(int gradeID) {
		this.gradeID = gradeID;
	}
	public String getPhone() {
		return Phone;
	}
	public void setPhone(String phone) {
		Phone = phone;
	}
	public String getAddress() {
		return Address;
	}
	public void setAddress(String address) {
		Address = address;
	}
	public String getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(String birthDate) {
		this.birthDate = birthDate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getIdCard() {
		return idCard;
	}
	public void setIdCard(String idCard) {
		this.idCard = idCard;
	}
	//toString
	@Override
	public String toString() {
		return "Student [studentNo=" + studentNo + ", loginPwd=" + loginPwd + ", studentName=" + studentName + ", sex="
				+ sex + ", gradeID=" + gradeID + ", Phone=" + Phone + ", Address=" + Address + ", birthDate="
				+ birthDate + ", email=" + email + ", idCard=" + idCard + "]";
	}
}
  • ConfigUtil.java
package com.abc.jdbc.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigUtil {
	//use Key to get Value
	public static String getValue(String key){
		//get properties
		Properties pro = new Properties();
		//get inputstream
		InputStream is=ConfigUtil.class.getResourceAsStream("/jdbc.properties");
		try {
			//add inputstream is
			pro.load(is);
			//return value searched by key
			return pro.getProperty(key);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException();
		}
	}
	public static void main(String[] args) {
		System.out.println( ConfigUtil.getValue("url"));
	}
}
  • jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/myschool
username=root
password=******
  • addStu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>addStu.jsp</title>
</head>
<body>
	<form action="doSave.jsp" method="post">
		<table border="1px" align="center" cellspacing="5px">
			<tr>
				<td>studentNo:</td>
				<td><input type="text" name="stuNo" /></td>
			</tr>
			<tr>
				<td>password:</td>
				<td><input type="password" name="pwd" /></td>
			</tr>
			<tr>
				<td>studentName:</td>
				<td><input type="text" name="stuName" placeholder="enter name" /></td>
			</tr>
			<tr>
				<td>gender:</td>
				<td align="center"><input type="radio" name="gender" value="1" />male
					<input type="radio" name="gender" value="2"/>female</td>
			</tr>
			<tr>
				<td>email:</td>
				<td><input type="email" name="email" /></td>
			</tr>
			<tr>
				<td>birthDate:</td>
				<td><input type="date" name="birth" /></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
				<input type="submit"	value="save" /> 
				<input type="button" value="back" />
				</td>
			</tr>
		</table>
	</form>
</body>
</html>
  • doDel.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import ="com.abc.jdbc.dao.StudentDao" %>
<%
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");

	String sno = request.getParameter("sno");
	System.out.println("doDel.jsp= sno: " +sno);
	StudentDao stuDao = new StudentDao();
	int result = stuDao.delStu(sno);
	if (result > 0) {
		System.out.println("Deleted");
	} else {
		System.out.println("Not Deleted");
	}
	request.getRequestDispatcher("doList.jsp").forward(request, response);
%>```

+ doList.jsp

```java
<%@	page import="java.sql.*" %>
<%@	page import="java.io.*" %>
<%@	page import="com.abc.jdbc.model.Student" %>
<%@	page import="com.abc.jdbc.util.ConfigUtil" %>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	//1. Add driver
	//Class.forName(driver);
//Class.forName("com.mysql.jdbc.Driver");
Class.forName(ConfigUtil.getValue("driver"));
	//2. create sql connector
	//http://localhost:8080/news/index.jsp
	//child agreement
	//jdbc:mysql:localhost:3306/myschool
	//	Connection conn=DriverManager.getConnection(url, user,password);
//Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","111111");
Connection conn= DriverManager.getConnection(ConfigUtil.getValue("url"),
ConfigUtil.getValue("username"),ConfigUtil.getValue("password"));
	//3. manipulate database
	//Parent p= new Child();
	//Interface p= new interface();
	//USB p= new MouseUSB();
	//Use conn to createStatement
	Statement st=conn.createStatement();
	//execute Query
	//execute sql
	String sql="select * from student;";
	ResultSet rs=st.executeQuery(sql);
	//4.get value back
	//if one column
	//use: select count(*) from student;
	//can also use if(rs.next())
	//create Student list
	List<Student> stuList=new ArrayList<Student>();
	while(rs.next()){
	//or rs.getString(1);
	String stuNo=rs.getString ("studentNo");
	String stuName=rs.getString("studentName");
	int gid=rs.getInt("gradeID");
	String email=rs.getString("email");
	//Give values to Student
	Student stu= new Student();
	stu.setStudentNo(stuNo);
	stu.setStudentName(stuName);
	stu.setGradeID(gid);
	stu.setEmail(email);	
	//add Student into stuList
	stuList.add(stu);
	}
	//5. close connections
	//determine if set is empty
	if(rs!=null){
	rs.close();
	}
	if(st!=null){
	st.close();
	}
	if(conn!=null){
	conn.close();
	}
	//6. save & send data 
	//save stuList into request
	request.setAttribute("list", stuList);
	//forward to stulist.jsp
	request.getRequestDispatcher("stulist.jsp").forward(request, response);
%>```

+ doSave.jsp

```java
<%@	page import="java.sql.*"%>
<%@	page import="java.io.*"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="com.abc.jdbc.util.ConfigUtil"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	// get parameters from addStu.jsp
	String stuNo = request.getParameter("stuNo");
	String stuName = request.getParameter("stuName");
	String stuPwd = request.getParameter("pwd");
	String birth = request.getParameter("birth");
	String email = request.getParameter("email");
	String gender = request.getParameter("gender");
	//1. Add driver
	Class.forName(ConfigUtil.getValue("driver"));
	//2. create sql connector
	String url = ConfigUtil.getValue("url");
	String uname = ConfigUtil.getValue("username");
	String pwd = ConfigUtil.getValue("password");
	Connection conn = DriverManager.getConnection(url, uname, pwd);
	//3. manipulate database
	String sql = "insert into student" + "(studentNo,loginPwd, studentName, sex, email, birthDate)"
			+ "values(?,?,?,?,?,?);";
	PreparedStatement ps = conn.prepareStatement(sql);
	//give ? values
	ps.setString(1, stuNo);
	ps.setString(2, stuPwd);
	ps.setString(3, stuName);
	//set gender
	Integer sex = 0;
	if (gender != null && !"".equals(gender)) {
		sex = Integer.parseInt(gender);
	}
	ps.setInt(4, sex);
	ps.setString(5, email);
	ps.setString(6, birth);
	//check ps & sql statement
	System.out.println(sql);
	System.out.println(ps);
	//4. execute
	int result = ps.executeUpdate();
	if (result > 0) {
		request.getRequestDispatcher("doList.jsp").forward(request, response);
		System.out.println("Saved");
	} else {
		request.getRequestDispatcher("addStu.jsp").forward(request, response);
		System.out.println("Not Saved");
	}
	//5. close connections
	if (ps != null)
		ps.close();
	if (conn != null)
		conn.close();
%>
  • doUpdate.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="com.abc.jdbc.dao.StudentDao"%>
<%
	//characterEncoding
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	//get information from frontend
	String stuNo = request.getParameter("stuNo");
	String stuName = request.getParameter("stuName");
	String stuPwd = request.getParameter("pwd");
	String birth = request.getParameter("birth");
	String email = request.getParameter("email");
	String gender = request.getParameter("gender");
	System.out.println("doUpdate.jsp= stuNo: " + stuNo);
	System.out.println("doUpdate.jsp= stuName: " + stuName);
	System.out.println("doUpdate.jsp= stuPwd: " + stuPwd);
	System.out.println("doUpdate.jsp= birth: " + birth);
	System.out.println("doUpdate.jsp= email: " + email);
	System.out.println("doUpdate.jsp= gender: " + gender);

	StudentDao stuDao = new StudentDao();
	Student stu = new Student();
	stu.setStudentNo(stuNo);
	stu.setStudentName(stuName);
	stu.setLoginPwd(stuPwd);
	stu.setEmail(email);
	stu.setBirthDate(birth);
	int sex = 0;
	if (gender != null && !"".equals(gender)) {
		sex = Integer.parseInt(gender);
	}
	stu.setSex(sex);
	System.out.println("doUpdate.jsp= stu: " + stu);
	int result=stuDao.updateStu(stu);
	System.out.println("doUpdate.jsp= result: " + result);
	if (result > 0) {
		request.getRequestDispatcher("doList.jsp").forward(request, response);
		System.out.println("updated");
	} else {
		request.getRequestDispatcher("updateStu.jsp?sno="+stuNo).forward(request, response);
		System.out.println("not updated");
	}
%>
  • stulist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="java.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>stulist.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	<%
		//get student list, display 
		List<Student> stuList = (List<Student>) request.getAttribute("list");
	%>
	<a href="addStu.jsp">Register Student Info</a>
	<table width="100%" border="1px">
		<tr>
			<th>studentNo</th>
			<th>studentName</th>
			<th>gradeID</th>
			<th>email</th>
			<th>edit</th>
		</tr>
		<%
			if (stuList != null && stuList.size() > 0) {
				for (Student stu : stuList) {
		%>
		<tr>
			<td><%=stu.getStudentNo()%></td>
			<td><%=stu.getStudentName()%></td>
			<td><%=stu.getGradeID()%></td>
			<td><%=stu.getEmail()%></td>
			<td><a href="updateStu.jsp?sno=<%=stu.getStudentNo()%>">edit</a> 
			| <a href="doDel.jsp?sno=<%=stu.getStudentNo()%>"
			onclick="javascript:return confirm('Delete?')">delete</a></td>
		</tr>
		<%  }
			} else {
		%>
		<tr>
			<td colspan="4" align="center">no data</td>
		</tr>
		<%}%>
	</table>
</body>
</html>```

+ updateStu.jsp

```java
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.abc.jdbc.dao.StudentDao"%>
<%@ page import="com.abc.jdbc.model.Student"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
	// encoding
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	//send request
	String stuNo = request.getParameter("sno");
	System.out.println("updateStu.jsp= stuNo: " + stuNo);
	//create StudentDao
	StudentDao stuDao = new StudentDao();
	Student stu = stuDao.getStuByStuNo(stuNo);//create student
	System.out.println("updateStu.jsp= student: " + stu);
	if (stu != null) {
		request.setAttribute("stu", stu); //save stu into attribute in request
	}
%>

<html>
<head>
<base href="<%=basePath%>">
<title>updatStu.jsp</title>
</head>

<body>
	<form action="page/doUpdate.jsp" method="post">
		<table border="1px" align="center" cellspacing="5px">
			<tr>
				<td>studentNo:</td>
				<td><input type="text" name="stuNo" readonly="readonly"
				value="<%=stu.getStudentNo()%>" /></td>
			</tr>
			<tr>
				<td>password:</td>
				<td><input type="password" name="pwd" 
				value="<%=stu.getLoginPwd()%>"/></td>
			</tr>
			<tr>
				<td>studentName:</td>
				<td><input type="text" name="stuName" 
				value="<%=stu.getStudentName() %>" /></td>
			</tr>
			<tr>
				<td>gender:</td>
				<td align="center">
				<input type="radio" name="gender" value="1" 
				<%if(stu.getSex()==1){%> checked="checked" <%}%>/> male
				<input type="radio" name="gender" value="2"
				<%if(stu.getSex()==2){%> checked="checked" <%}%>/>female
				</td>
			</tr>
			<tr>
				<td>email:</td>
				<td><input type="email" name="email" 
				value="<%=stu.getEmail()%>" /></td>
			</tr>
			<tr>
				<td>birthDate:</td>
				<td><input type="text" name="birth" 
				value="<%=stu.getBirthDate()%>" /></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
				<input type="submit"	value="save" /> 
				<input type="button" value="back" />
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Regular request response process
    在这里插入图片描述

  • request response process with pooling where client wait synchronously
    在这里插入图片描述

  • data pool (DB): Buffer Pool : cannot automatically recycle connection: stable: Tomcat

  • C3P0: Hibernate, Spring, Durid

  • thread pool

    1. Import & configure
  • commons-dbcp2-2.7.0

  • commons-pool2-2.8.1

  • commons-logging-1.2

    1. edit jdbc.properties file
  • dbcp : apache: drivers

  • username - The connection user name to be passed to our JDBC driver to establish a connection.

  • password - The connection password to be passed to our JDBC driver to establish a connection.

  • url - The connection URL to be passed to our JDBC driver to establish a connection.

  • driverClassName - The fully qualified Java class name of the JDBC driver to be used.

  • connectionProperties - The connection properties that will be sent to our JDBC driver when establishing new connections.

    1. create DBCPUtil class
  • ds=BasicDataSrouceFactory.createDataSource(prop)
    在这里插入图片描述
    在这里插入图片描述

  • DbcpUtil.java (pool)
    在这里插入图片描述

  • DbcpUtil.java

package com.abc.jdbc.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
/*** DBCP DB Utility class **/
public class DbcpUtil {
	//pool dataSource
	static DataSource ds = null;
	static {
		try {
			Properties prop = new Properties();
			InputStream is = DbcpUtil.class.getResourceAsStream("/jdbc.properties");
			prop.load(is);
			System.out.println(prop.getProperty("driver"));
			System.out.println(prop.getProperty("url"));
			System.out.println(prop.getProperty("username"));
			System.out.println(prop.getProperty("password"));
			System.out.println(prop.getProperty("initialSize"));
			System.out.println(prop.getProperty("maxIdle"));
			System.out.println(prop.getProperty("minIdle"));
			// DBCP DB Pool
			ds = BasicDataSourceFactory.createDataSource(prop);
			System.out.println(ds.toString());
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/*** Get Connection */
	public static Connection getConn() {
		Connection con=null;
		try {
			con=ds.getConnection();
			return con;
		} catch (SQLException e) {
			throw new RuntimeException();
		}
	}
	/*** Release Connection */
	public void release(Connection conn) {
		try {
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
public static void main(String[] args) throws Exception {
	Connection conn=getConn();
	System.out.println(conn.hashCode());
	String sql="insert into student(studentNo) values('1234')";
		PreparedStatement ps=conn.prepareStatement(sql);
		ps.executeUpdate();
}
}
  • jdbc.properties
#driver=com.mysql.jdbc.Driver
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool
username=root
password=12345
initialSize=10
maxIdle=30
minIdle=3

Java Web 4: Third-party Control & Page Search

  1. Add driver
    Class.forName(ConfigUtil.getValue(“driver”=“com.mysql.jdbc.Driver”));
  2. create sql connector
    Connection conn = DriverManager.getConnection(url, uname, pwd=“jdbc:mysql://localhost:3306/myschool”,“root”,“111111”);
  3. manipulate database
    • Statement st=conn.createStatement();
    • PreparedStatement ps = conn.prepareStatement(sql =“insert into student (studentNo) values(?);”);
      give ? values ps.setString(1, stuNo);
  4. execute
    • ResultSet rs=st.executeQuery(sql);
      List stuList=new ArrayList();
      while(rs.next()){ Student stu= new Student(); stuList.add(stu);
    • int result = ps.executeUpdate();
      if (result > 0) { System.out.println(“Saved”); } else { System.out.println(“Not Saved”);
  5. close connections
    ps.close(); conn.close(); rs.close();
  6. save & send data
    request.setAttribute(“list”, stuList);
    request.getRequestDispatcher(“stulist.jsp”).forward(request, response);
  • CRUD : Create, Read, Update and Delete

  • Java Reflection: get info from class in dynamic setting:

  • Hibernate: hibernate.cfg.xml save, Structs: struts.xml

  • Class -> Attributes <> Table -> Column

  • Static Edit: edit at declaration of class (int[])

  • Decompile: .class -> .java

  • Dynamic Edit: edit during runtime

  • Writing Dao in java instead of Jsp
    在这里插入图片描述

  • BaseDao02.java

package com.abc.jdbc.dao;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.abc.jdbc.util.ConfigUtil;

//JDBC: DAO
public class BaseDao02 {
	static {
		try {
			Class.forName(ConfigUtil.getValue("driverClassName"));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// get Connection
	private static Connection getConn() {
		try {
			return DriverManager.getConnection(ConfigUtil.getValue("url"), ConfigUtil.getValue("username"),
					ConfigUtil.getValue("password"));
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	// close
	private static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
		try {
			if (rs != null)
				rs.close();
			if (ps != null)
				ps.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	// Read
	// sql DQL
	// param: attribute
	// clz class
	// clz object
	public static Object search(String sql, Object[] param, Class<?> clz) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		// select * from student where studentNo=1234;
		try {
			conn = getConn();
			System.out.println(conn);
			ps = conn.prepareStatement(sql);
			System.out.println(ps);
			if (param != null && param.length > 0) {
				for (int i = 0; i < param.length; i++) {
					ps.setObject(i + 1, param[i]);
				}
			}
			rs = ps.executeQuery();
			System.out.println(rs);
			if (!rs.next()) {
				return null;
			}
			return doResultSet(rs, clz);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			close(rs,ps,conn);
		}
		return null;
	}
	//
	public static List<?> searchList(String sql, Object[] param, Class<?> clz) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = getConn();
			ps = conn.prepareStatement(sql);
			if (param != null && param.length > 0) {
				for (int i = 0; i < param.length; i++) {
					ps.setObject(i + 1, param[i]);
				}
			}
			rs = ps.executeQuery();
			return doResultSetList(rs, clz);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			close(rs,ps,conn);
		}
		return null;
	}
	// Reflection to get object and obj attributes
	// CRUD : Create, Read, Update and Delete
	// Q: how to find: Column Num? Column Label? Object?
	// rs.getObject(columnLabel)
	// Attribute name and column name must be same
	private static Object doResultSet(ResultSet rs, Class<?> clz) {
		try {
			ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();
			int colCount = metaData.getColumnCount(); // get column count
			Object bean = clz.newInstance();
			for (int i = 0; i < colCount; i++) {
				Object colValue = rs.getObject(i + 1);
				String colName = metaData.getColumnName(i + 1); // get Column
																// name
				Field f = clz.getDeclaredField(colName);
				f.setAccessible(true);
				f.set(bean, colValue);
			}
			return bean;
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
		return null;
	}
	// return list
	private static List<Object> doResultSetList(ResultSet rs, Class<?> clz) {
		List<Object> list = new ArrayList<Object>();
		try {
			while (rs.next()) {
				ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();
				int colCount = metaData.getColumnCount(); // get column count
				Object bean = clz.newInstance();
				for (int i = 0; i < colCount; i++) {
					Object colValue = rs.getObject(i + 1);
					String colName = metaData.getColumnName(i + 1); // get Column name
					Field f = clz.getDeclaredField(colName);
					f.setAccessible(true);
					f.set(bean, colValue);
				}
				list.add(bean);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
		return list;
	}
	// update
	public static void update(String sql, Object[] param) {
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			conn = getConn();
			ps = conn.prepareStatement(sql);
			if (param != null && param.length > 0) {
				for (int i = 0; i < param.length; i++) {
					ps.setObject(i + 1, param[i]);
				}
			}
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			close(null, ps, conn);
		}
	}
}
  • Grade.java
package com.abc.jdbc.model;
public class Grade {
	private int gradeID;
	private String gradeName;
	private String descript;
	public int getGradeID() {
		return gradeID;
	}
	public void setGradeID(int gradeID) {
		this.gradeID = gradeID;
	}
	public String getGradeName() {
		return gradeName;
	}
	public void setGradeName(String gradeName) {
		this.gradeName = gradeName;
	}
	public String getDescript() {
		return descript;
	}
	public void setDescript(String descript) {
		this.descript = descript;
	}
	@Override
	public String toString() {
		return "Grade [gradeID=" + gradeID + ", gradeName=" + gradeName +
				", descript=" + descript + "]\n";
	}
}
  • BaseDao2Test.java
package com.ibeifeng.jdbc.test;
import java.util.List;
import com.abc.jdbc.dao.BaseDao02;
import com.abc.jdbc.model.Grade;
public class BaseDao2Test {
public static void main(String[] args) {
	String sql="insert into Student(StudentNo, StudentName)"
			+ " values(?,?)";
	//String stuNo=request.getParameter("stuNo");
	//String stuName=request.getParameter("stuName");
	//Object[] param={stuNo, stuName};
 	Object[] param0={"1234","Poppy"};
	BaseDao02.update(sql, param0);
	//test single search
	 sql="select * from grade where gradeID=?";
	Object[] param={4};
	Grade grade=(Grade)BaseDao02.search(sql, param, Grade.class);
	System.out.println(grade);
	//test SearchList
	sql = "select * from grade";
	List<Grade> list= (List<Grade>)BaseDao02.searchList(sql,null, Grade.class);
	System.out.println(list);
		//test SearchList
	sql = "select * from grade where gradeID=?";
	Object[] param2={5};
	List<Grade> gradeList= (List<Grade>)BaseDao02.searchList(sql, param2, Grade.class);
	System.out.println(gradeList);
}
}
  • JDBC pools: import oracle-thin-extras for oracle operations
  • import c3p0 & Mchange, configure build path, add build path
  • c3p0-0.9.5.5.src.zip
  • C3P0 » 0.9.5.5
  • Mchange Commons Java » 0.2.3.4
  • write c3p0-config.xml from c3p0-0.9.5.5/doc/index.html
  • C3P0: A class whichs adapt traditional DriverManager-based JDBC drivers to the newer javax.sql.DataSource scheme for acquiring database Connections.
  • C3P0: Transparent pooling of Connection and PreparedStatements behind DataSources which can “wrap” around traditional drivers or arbitrary unpooled DataSources.
    在这里插入图片描述
    在这里插入图片描述
  • java.sql.SQLException: Unknown system variable ‘tx_isolation’ : update Mysql-connector-java.jar file to higher version
  • mysql-connector-java/8.0.20
  • java.sql.SQLException: The server time zone value ‘xxxxxxx’ is unrecognized or represents more :
  • +?serverTimezone=UTC: url=jdbc:mysql://localhost:3306/myschool?serverTimezone=UTC
    在这里插入图片描述
  • C3P0Util.java
package com.abc.jdbc.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Util {
	static ComboPooledDataSource ds = null;
	static {
		ds = new ComboPooledDataSource("jdbc_c3p0");
	}
	/*** Get Connection */
	public static Connection getConn() {
		try {
			return ds.getConnection();
		} catch (SQLException e) {
			throw new RuntimeException();
		}
	}
	/*** Release Connection */
	public static void release(Connection conn) {
		try {
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) throws Exception {
		Connection conn = getConn();
		System.out.println(conn.hashCode());

		String sql = "insert into student(studentNo) values('1030')";
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.executeUpdate();
		release(conn);
	}
}
  • c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- default -->
	<default-config>
		<property name="initialPoolSize">10</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/myschool?serverTimezone=UTC</property>
		<property name="user">root</property>
		<property name="password">123abc</property>
	</default-config>
	<!-- custom -->
	<named-config name="jdbc-c3p0">
		<property name="initialPoolSize">10</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/myschool?serverTimezone=UTC</property>
		<property name="user">root</property>
		<property name="password">123abc</property>
	</named-config>
</c3p0-config>
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
	name="mysql/jdbc"
	auth="Container"
	type="javax.sql.DataSource"
	url="jdbc:mysql://localhost:3306/myschool?serverTimezone=UTC"
	driverClassName="com.mysql.cj.jdbc.Driver"
	username="root"
	password="12345"
	maxActive="8"
	maxIdle="4"
/>
</Context>
  • JndiUtil.java
package com.abc.jdbc.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class JndiUtil {
	static DataSource ds=null;
	static{
/*		// Obtain our environment naming context
		Context initCtx = new InitialContext();
		Context envCtx = (Context) initCtx.lookup("java:comp/env");
		// Look up our data source
		DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB");
		// Allocate and use a connection from the pool
		Connection conn = ds.getConnection();
		... use this connection to access the database ...
		conn.close();*/
		try {
			Context initCtx= new InitialContext();
			Context envCtx=(Context)initCtx.lookup("java:comp/env");
			ds=(DataSource)envCtx.lookup("mysql/jdbc"); 
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/*** Get Connection */
	public static Connection getConn() {
		try {
			return ds.getConnection();
		} catch (SQLException e) {
			throw new RuntimeException();
		}
	}
	/*** Release Connection */
	public static void release(Connection conn) {
		try {
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
  • StudentDao.java
package com.abc.jdbc.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.abc.jdbc.model.Student;
import com.abc.jdbc.util.JndiUtil;
import java.sql.PreparedStatement;
public class StudentDao {
	 static PreparedStatement ps = null;
	 static Connection conn=null;
	// get stu
	public Student getStuByStuNo(String stuNo) {
		Student stu = null;
		String sql = "select * from student where studentNo=?";
		try {
			//conn=BaseDao.getConn();
			conn=JndiUtil.getConn();
			System.out.println("using JNDI...");
			ps = conn.prepareStatement(sql);
			ps.setString(1, stuNo);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) { //use while if there's multiple answers
				stu=new Student();
				String sno = rs.getString("studentNo");
				String stuName = rs.getString("studentName");
				String loginPwd = rs.getString("loginPwd");
				String email = rs.getString("email");
				int gender = rs.getInt("sex");
				String birth = rs.getString("birthDate");
				stu.setStudentNo(sno);
				stu.setStudentName(stuName);
				stu.setLoginPwd(loginPwd);
				stu.setEmail(email);
				stu.setSex(gender);
				stu.setBirthDate(birth);
			}
			System.out.println("getStuByStuNo.java= stuNo: " + stuNo);
		} catch (SQLException e) {																																																																																																																																																																																				
			e.printStackTrace();
		}finally{
		//	BaseDao.close(null, ps,conn);
		}
		System.out.println("getStuByStuNo.java= student: " + stu);
		return stu;
	}
	// update stu
	public static int updateStu(Student stu) {
		String sql = "update student "
				+ "set studentName=?, sex=?,email=?,birthDate=?,loginPwd=?"
				+ "where studentNo=?";
		System.out.println("update.java= stu: " + stu);
		try {
			conn=BaseDao.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, stu.getStudentName());
			ps.setInt(2, stu.getSex());
			ps.setString(3, stu.getEmail());
			ps.setString(4, stu.getBirthDate());
			ps.setString(5, stu.getLoginPwd());
			ps.setString(6, stu.getStudentNo());
			return ps.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException();
		} finally {
	//	BaseDao.close(null, ps,conn);
		}
	}
	//delete Student
	public int delStu(String stuNo){
		String sql="delete from student where studentNo=?";
		try {
			conn=BaseDao.getConn();
			ps=conn.prepareStatement(sql);
			ps.setString(1, stuNo);
			return ps.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException();
		}
	}
}
  • < jsp: useBean= “name” class= “package.class” scope=" scope" >

  • < jsp:useBean id=“stuDao” class=“com.abc.jdbc.dao.StudentDao” scope=“page”>< /jsp:useBean >

  • updateStu.jsp

 
  • < jsp: include page=“URL” > : embed page into another page
  • < %@ include file="/inc/footer.jsp"%> include first then process ( static process)
  • < jsp:include page="/inc/footer.jsp" /> process first, then include (dynamic process)
    在这里插入图片描述
  • footer.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'footer.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--<link rel="stylesheet" type="text/css" href="styles.css">-->
</head>
<hr />
<body>
<center>Copyright &copy; 2019 xxx company</center>
</body>
</html>

  • stulist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="java.sql.*"%>
< %@ include file="/inc/footer.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>stulist.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	<%
		//get student list, display 
		List<Student> stuList = (List<Student>) request.getAttribute("list");
	%>
	<a href="addStu.jsp">Register Student Info</a>
	<table width="100%" border="1px">
		<tr>
			<th>studentNo</th>
			<th>studentName</th>
			<th>gradeID</th>
			<th>email</th>
			<th>edit</th>
		</tr>
		<%
			if (stuList != null && stuList.size() > 0) {
				for (Student stu : stuList) {
		%>
		<tr>
			<td><%=stu.getStudentNo()%></td>
			<td><%=stu.getStudentName()%></td>
			<td><%=stu.getGradeID()%></td>
			<td><%=stu.getEmail()%></td>
			<td><a href="updateStu.jsp?sno=<%=stu.getStudentNo()%>">edit</a> 
			| <a href="doDel.jsp?sno=<%=stu.getStudentNo()%>"
			onclick="javascript:return confirm('Delete?')">delete</a></td>
		</tr>
		<%  }
			} else {
		%>
		<tr>
			<td colspan="4" align="center">no data</td>
		</tr>
		<%}%>
	</table>
	<jsp:include page="/inc/footer.jsp"/>
</body>
</html>
  • page jump: forward: request.getRequestDispatcher().forward()

  • pagejump: redirect: response.sendRedirect()

  • < jsp:forward page=“URL”>: address does not change, forward to included page

  • < jsp:forward page="/page/doList.jsp">< /jsp:forward>

  • can include parameters
    在这里插入图片描述

  • index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
<jsp:forward page="/page/doList.jsp">
	<jsp:param value="hi" name="greet"/>
</jsp:forward>
  </body>
</html>
  • doList.jsp
<%@	page import="java.sql.*"%>
<%@	page import="java.io.*"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="com.abc.jdbc.util.ConfigUtil"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	//receive from index.jsp using forward sent ("hi")
	String hi=request.getParameter("greet");
	System.out.println(hi);
	//1. Add driver
	//Class.forName(driver);
	//Class.forName("com.mysql.jdbc.Driver");
	Class.forName(ConfigUtil.getValue("driverClassName"));
	//2. create sql connector
	//http://localhost:8080/news/index.jsp
	//child agreement
	//jdbc:mysql:localhost:3306/myschool
	//	Connection conn=DriverManager.getConnection(url, user,password);
	//Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","111111");
	Connection conn = DriverManager.getConnection(ConfigUtil.getValue("url"), ConfigUtil.getValue("username"),
			ConfigUtil.getValue("password"));
	//3. manipulate database
	//Parent p= new Child();
	//Interface p= new interface();
	//USB p= new MouseUSB();
	//Use conn to createStatement
	Statement st = conn.createStatement();
	//execute Query
	//execute sql
	String sql = "select * from student;";
	ResultSet rs = st.executeQuery(sql);
	//4.get value back
	//if one column
	//use: select count(*) from student;
	//can also use if(rs.next())
	//create Student list
	List<Student> stuList = new ArrayList<Student>();
	while (rs.next()) {
		//or rs.getString(1);
		String stuNo = rs.getString("studentNo");
		String stuName = rs.getString("studentName");
		int gid = rs.getInt("gradeID");
		String email = rs.getString("email");
		//Give values to Student
		Student stu = new Student();
		stu.setStudentNo(stuNo);
		stu.setStudentName(stuName);
		stu.setGradeID(gid);
		stu.setEmail(email);
		//add Student into stuList
		stuList.add(stu);
	}
	//5. close connections
	//determine if set is empty
	if (rs != null) {rs.close();}
	if (st != null) {st.close();}
	if (conn != null) {conn.close();}
	//6. save & send data 
	//save stuList into request
	request.setAttribute("list", stuList);
	//forward to stulist.jsp
	request.getRequestDispatcher("stulist.jsp").forward(request, response);
%>

在这里插入图片描述

  • page indexing ( limit): select * from tableName where (param) limit ( current page -1) * page content, page content

  • BaseDao02.java changed to JdbcDao.java

  • BaseDao02Test.java changed to JdbcDaoTest.java
    在这里插入图片描述

  • studentDao.jsp

package com.abc.jdbc.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import com.abc.jdbc.model.Page;
import com.abc.jdbc.model.Student;
import com.abc.jdbc.util.JndiUtil;
import java.sql.PreparedStatement;
public class StudentDao {
	 static PreparedStatement ps = null;
	 static Connection conn=null;
	// get stu
	public Student getStuByStuNo(String stuNo) {
		Student stu = null;
		String sql = "select * from student where studentNo=?";
		try {
			//conn=BaseDao.getConn();
			conn=JndiUtil.getConn();
			System.out.println("using JNDI...");
			ps = conn.prepareStatement(sql);
			ps.setString(1, stuNo);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) { //use while if there's multiple answers
				stu=new Student();
				String sno = rs.getString("studentNo");
				String stuName = rs.getString("studentName");
				String loginPwd = rs.getString("loginPwd");
				String email = rs.getString("email");
				int gender = rs.getInt("sex");
				Date birth = rs.getDate("birthDate");
				stu.setBirthDate(birth);
				stu.setStudentNo(sno);
				stu.setStudentName(stuName);
				stu.setLoginPwd(loginPwd);
				stu.setEmail(email);
				stu.setSex(gender);
			}
			System.out.println("getStuByStuNo.java= stuNo: " + stuNo);
			System.out.println("getStuByStuNo.java= student: " + stu);
		} catch (SQLException e) {																																																																																																																																																																																				
			e.printStackTrace();
		}finally{
		//	BaseDao.close(null, ps,conn);
		}
		return stu;
	}
	// update stu
	public static int updateStu(Student stu) {
		String sql = "update student "
				+ "set studentName=?, sex=?,email=?,loginPwd=?"
				+ "where studentNo=?";
		System.out.println("update.java= stu: " + stu);
		try {
			conn=BaseDao.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, stu.getStudentName());
			ps.setInt(2, stu.getSex());
			ps.setString(3, stu.getEmail());
			//ps.setDate(4, (java.sql.Date) stu.getBirthDate());
			ps.setString(4, stu.getLoginPwd());
			ps.setString(5, stu.getStudentNo());
			return ps.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException();
		} finally {
	//	BaseDao.close(null, ps,conn);
		}
	}
	
	//count Stu
	public Long countStu(){
		String  sql="select count(studentNo) as total from student";
		Page pages=(Page)JdbcDao.search(sql, null, Page.class);
		if(pages!=null){
			return pages.getTotal();
		}
		return 0L;
	}
	//count Stu by name
	public Long countStu(String stuName){
		System.out.println("countStu="+stuName);
		String  sql="select count(studentNo) as total from student"
				+ " where studentName like ? ";
		Object[] param={"%"+stuName+"%"};
		Page pages=(Page)JdbcDao.search(sql, param, Page.class);
		if(pages!=null){
			return pages.getTotal();
		}
		return 0L;
	}
	//delete Student
	public int delStu(String stuNo){
		String sql="delete from student where studentNo=?";
		try {
			conn=BaseDao.getConn();
			ps=conn.prepareStatement(sql);
			ps.setString(1, stuNo);
			return ps.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException();
		}
	}
	
	//page separation
	//pageIndex : current page
	//pageSize: amount on one page
	public List<Student> pageStu(int pageIndex, int pageSize, String stuName){
		String sql="select * from student where studentName like ?  limit ?, ?";
		int lim=(pageIndex-1)*pageSize; 
		Object[] params={"%"+stuName+"%", lim,pageSize};
		List<Student> list= (List<Student>) JdbcDao.searchList(sql,params, Student.class);
		return list;
	}
}
  • Page.java
package com.abc.jdbc.model;
public class Page {
	private Long total;
	public Long getTotal() {
		return total;
	}
	public void setTotal(Long total) {
		this.total = total;
	}
}
  • Student.java
package com.abc.jdbc.model;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Student {
	private String studentNo;
	private String loginPwd;
	private String studentName;
	private int sex;
	private int gradeID;
	private String Phone;
	private String Address;
	private Date birthDate;
	private String email;
	private int idCard;
	//constructors	
	public Student(){}
	public Student(String studentNo, String loginPwd, 
			String studentName, int sex, int gradeID, String phone,
			String address, Date birthDate, String email,
			int idCard) {
		super();
		this.studentNo = studentNo;
		this.loginPwd = loginPwd;
		this.studentName = studentName;
		this.sex = sex;
		this.gradeID = gradeID;
		Phone = phone;
		Address = address;
		this.birthDate = (java.sql.Date) birthDate;
		this.email = email;
		this.idCard = idCard;
	}
	//getter setters
	public String getStudentNo() {
		return studentNo;
	}
	public void setStudentNo(String studentNo) {
		this.studentNo = studentNo;
	}
	public String getLoginPwd() {
		return loginPwd;
	}
	public void setLoginPwd(String loginPwd) {
		this.loginPwd = loginPwd;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public int getSex() {
		return sex;
	}
	public void setSex(int sex) {
		this.sex = sex;
	}
	public int getGradeID() {
		return gradeID;
	}
	public void setGradeID(int gradeID) {
		this.gradeID = gradeID;
	}
	public String getPhone() {
		return Phone;
	}
	public void setPhone(String phone) {
		Phone = phone;
	}
	public String getAddress() {
		return Address;
	}
	public void setAddress(String address) {
		Address = address;
	}
	//get return Date
	public Date getBirthDate() {
		return  birthDate;
	}
	//set takes Date
	public void setBirthDate(Date birth) {
		this.birthDate=birth;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getIdCard() {
		return idCard;
	}
	public void setIdCard(int idCard) {
		this.idCard = idCard;
	}
	//toString
	@Override
	public String toString() {
		return "Student [studentNo=" + studentNo + ", loginPwd=" + loginPwd + ", studentName=" + studentName + ", sex="
				+ sex + ", gradeID=" + gradeID + ", Phone=" + Phone + ", Address=" + Address + ", birthDate="
				+ birthDate + ", email=" + email + ", idCard=" + idCard + "]";
	}
}
  • doListPage.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<!-- import StudentDao as stuDao -->
<jsp:useBean id="stuDao" class="com.abc.jdbc.dao.StudentDao"
	scope="page"></jsp:useBean>
<%
	request.setCharacterEncoding("utf-8");
	//get info from index
	String hi = request.getParameter("greet");
	System.out.println("doList page get from index:" + hi);
	//get parameter from stulist
	String index = request.getParameter("pageIndex");
	int pageIndex = 1;
	if (index != null && !"".equals(index)) {
		pageIndex = Integer.parseInt(index);
	}
	String num = request.getParameter("num");
	int showNum = 5;
	if (num != null && !"".equals(num)) {
		showNum = Integer.parseInt(num);
	}
	String name = null;
	name = request.getParameter("name");
	System.out.println("doListPage.jsp name=" + name);
	List<Student> stuList;
	if (name == null || name=="") {
		name = "";
			 stuList = stuDao.pageStu(pageIndex, showNum, name);
	}else{
		 stuList = stuDao.pageStu(pageIndex, 500, name);
	}
	Long count = stuDao.countStu(name);
	System.out.println("doListPage.jsp pageIndex=" + pageIndex + "showNum=" + showNum);
	request.setAttribute("count", count);
	Long totalPage = count % 5 == 0 ? count / showNum : count / showNum + 1;
	request.setAttribute("totalPage", totalPage);
	System.out.println("doListPage.jsp count=" + count);
	//save current page
	request.setAttribute("curPage", pageIndex);
	//save stuList into request object
	request.setAttribute("list", stuList);
	System.out.println("stuList from doListPage=" + stuList);
	//forward to stulist.jsp
	request.getRequestDispatcher("stulist.jsp").forward(request, response);
%>
  • doSave.jsp
<%@	page import="java.sql.*"%>
<%@	page import="java.io.*"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="com.abc.jdbc.util.ConfigUtil"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	// get parameters from addStu.jsp
	String stuNo = request.getParameter("stuNo");
	String stuName = request.getParameter("stuName");
	String stuPwd = request.getParameter("pwd");
	String birth = (String)request.getParameter("birth");
	String email = request.getParameter("email");
	String gender = request.getParameter("gender");
	int gradeID=12345;
	String Phone="123456789";
	String Address="abc st 123";
	int idCard=11111;	
	//1. Add driver
	Class.forName(ConfigUtil.getValue("driverClassName"));
	//2. create sql connector
	String url = ConfigUtil.getValue("url");
	String uname = ConfigUtil.getValue("username");
	String pwd = ConfigUtil.getValue("password");
	Connection conn = DriverManager.getConnection(url, uname, pwd);
	//3. manipulate database
	String sql = "insert into student" + "(studentNo,loginPwd, studentName,"+
	" sex, email, birthDate, gradeID, Phone, Address, idCard)"+
	 "values(?,?,?,?,?,?,?,?,?,?);";
	PreparedStatement ps = conn.prepareStatement(sql);
	//give ? values
	ps.setString(1, stuNo);
	ps.setString(2, stuPwd);
	ps.setString(3, stuName);
	//set gender
	Integer sex = 0;
	if (gender != null && !"".equals(gender)) {
		sex = Integer.parseInt(gender);
	}
	ps.setInt(4, sex);
	ps.setString(5, email);
	ps.setString(6, birth);
	ps.setInt(7,gradeID);
	ps.setString(8,Phone);
	ps.setString(9,Address);
	ps.setInt(10,idCard);
	//check ps & sql statement
	System.out.println(sql);
	System.out.println(ps);
	//4. execute
	int result = ps.executeUpdate();
	if (result > 0) {
		request.getRequestDispatcher("doListPage.jsp").forward(request, response);
		System.out.println("Saved");
	} else {
		request.getRequestDispatcher("addStu.jsp").forward(request, response);
		System.out.println("Not Saved");
	}
	//5. close connections
	if (ps != null)
		ps.close();
	if (conn != null)
		conn.close();
%>
  • doDel.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import ="com.abc.jdbc.dao.StudentDao" %>
<%
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	String sno = request.getParameter("sno");
	System.out.println("doDel.jsp= sno: " +sno);
	StudentDao stuDao = new StudentDao();
	int result = stuDao.delStu(sno);
	if (result > 0) {
		System.out.println("Not Deleted");
	} else {
		System.out.println("Deleted");
	}
	request.getRequestDispatcher("doListPage.jsp").forward(request, response);
%>
  • doUpdate.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="com.abc.jdbc.dao.StudentDao"%>
<jsp:useBean id="stuDao" 
class="com.abc.jdbc.dao.StudentDao" 
scope="page"></jsp:useBean>
<%
	//characterEncoding
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	//get information from frontend
	String stuNo = request.getParameter("stuNo");
	String stuName = request.getParameter("stuName");
	String stuPwd = request.getParameter("pwd");
	String birth = request.getParameter("birth");
	String email = request.getParameter("email");
	String gender = request.getParameter("gender");
	System.out.println("doUpdate.jsp= stuNo: " + stuNo);
	System.out.println("doUpdate.jsp= stuName: " + stuName);
	System.out.println("doUpdate.jsp= stuPwd: " + stuPwd);
	System.out.println("doUpdate.jsp= birth: " + birth);
	System.out.println("doUpdate.jsp= email: " + email);
	System.out.println("doUpdate.jsp= gender: " + gender);
	//StudentDao stuDao = new StudentDao();
	stuDao = new StudentDao();
	Student stu = new Student();
	stu.setStudentNo(stuNo);
	stu.setStudentName(stuName);
	stu.setLoginPwd(stuPwd);
	stu.setEmail(email);
	//stu.setBirthDate(birth);
	int sex = 0;
	if (gender != null && !"".equals(gender)) {
		sex = Integer.parseInt(gender);
	}
	stu.setSex(sex);
	System.out.println("doUpdate.jsp= stu: " + stu);
	int result=stuDao.updateStu(stu);
	System.out.println("doUpdate.jsp= result: " + result);
	if (result > 0) {
		request.getRequestDispatcher("doListPage.jsp").forward(request, response);
		System.out.println("updated");
	} else {
		request.getRequestDispatcher("updateStu.jsp?sno="+stuNo).forward(request, response);
		System.out.println("not updated");
	}
%>
  • updateStu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.abc.jdbc.dao.StudentDao"%>
<%@ page import="com.abc.jdbc.model.Student"%>
<jsp:useBean id="stuDao" 
 class="com.abc.jdbc.dao.StudentDao" 
 scope="page"></jsp:useBean> 
<%
	// encoding
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	//send request
	String stuNo = request.getParameter("sno");
	System.out.println("updateStu.jsp= stuNo: " + stuNo);
	//create StudentDao
	stuDao = new StudentDao();
	Student stu = stuDao.getStuByStuNo(stuNo);//create student
	System.out.println("updateStu.jsp= student: " + stu);
	if (stu != null) {
		request.setAttribute("stu", stu); //save stu into attribute in request
	}
%>
<html>
<head>
<title>updatStu.jsp</title>
</head>
<body>
	<form action="/javaweb_jdbc01/page/doUpdate.jsp" method="post">
		<table border="1px" align="center" cellspacing="5px">
			<tr>
				<td>studentNo:</td>
				<td><input type="text" name="stuNo" readonly="readonly"
				value="<%=stu.getStudentNo()%>" /></td>
			</tr>
			<tr>
				<td>password:</td>
				<td><input type="password" name="pwd" 
				value="<%=stu.getLoginPwd()%>"/></td>
			</tr>
			<tr>
				<td>studentName:</td>
				<td><input type="text" name="stuName" 
				value="<%=stu.getStudentName() %>" /></td>
			</tr>
			<tr>
				<td>gender:</td>
				<td align="center">
				<input type="radio" name="gender" value="1" 
				<%if(stu.getSex()==1){%> checked="checked" <%}%>/> male
				<input type="radio" name="gender" value="2"
				<%if(stu.getSex()==2){%> checked="checked" <%}%>/>female
				</td>
			</tr>
			<tr>
				<td>email:</td>
				<td><input type="email" name="email" 
				value="<%=stu.getEmail()%>" /></td>
			</tr>
			<tr>
				<td>birthDate:</td>
				<td><input type="datetime" name="birth" 
				value="<%=stu.getBirthDate()%>" /></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
				<input type="submit"	value="save" /> 
				<input type="button" value="back" />
				</td>
			</tr>
		</table>
	</form>
</body>
</html>
  • stulist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@	page import="com.abc.jdbc.model.Student"%>
<%@	page import="java.sql.*"%>
<%@ include file="/inc/footer.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>stulist.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<script type="text/javascript">
	function goNum() {
		var num = document.getElementsByName("num")[0].value;
		var pageIndex = document.getElementsByName("pageIndex")[0].value;
		location.href = "/javaweb_jdbc01/page/doListPage.jsp?pageIndex=" + pageIndex + "&num=" + num;
		console.info(pageIndex + "-------------------->" + num);
	}
</script>
</head>
<body>
	<%
		//get student list, display 
		List<Student> stuList = (List<Student>) request.getAttribute("list");
		int curPage = Integer.parseInt(request.getAttribute("curPage").toString());
		Long totalPage = Long.parseLong(request.getAttribute("totalPage").toString());
		int count = Integer.parseInt(request.getAttribute("count").toString());
	%>
	<a href="/javaweb_jdbc01/page/addStu.jsp">Register Student Info</a>
	<form method="post" action="/javaweb_jdbc01/page/doListPage.jsp">
		Student Name: <input type="text" name="name" /> <input type="submit"
			value="search" />
		<table width="100%" border="1px">
			<tr>
				<th>studentNo</th>
				<th>studentName</th>
				<th>gradeID</th>
				<th>email</th>
				<th>edit</th>
			</tr>
			<%
				if (stuList != null && stuList.size() > 0) {
					for (Student stu : stuList) {
			%>
			<tr>
				<td><%=stu.getStudentNo()%></td>
				<td><%=stu.getStudentName()%></td>
				<td><%=stu.getGradeID()%></td>
				<td><%=stu.getEmail()%></td>
				<td><a href="/javaweb_jdbc01/page/updateStu.jsp?sno=<%=stu.getStudentNo()%>">edit</a>
					| <a href="/javaweb_jdbc01/page/doDel.jsp?sno=<%=stu.getStudentNo()%>"
					onclick="javascript:return confirm('Delete?')">delete</a>
				</td>
			</tr>
			<tr>
				<td colspan="5" align="center"></td>
			</tr>
			<%
				}
			%>
			<tr>
				<td colspan="5" align="center">
				<a href="/javaweb_jdbc01/page/doListPage.jsp?pageIndex=1">first</a> 
				<% 	if (curPage > 1) {%> 
					<a	href="/javaweb_jdbc01/page/doListPage.jsp?pageIndex=<%=curPage - 1%>">prev</a>
						<%	}%>
						 <%		for (int i = 0; i < totalPage; i++) {
						 if (curPage == (i + 1)) {%> 
						 <%=i + 1%> 
						 <%	} else { %> 
						 <a href="/javaweb_jdbc01/page/doListPage.jsp?pageIndex=<%=i + 1%>"><%=i + 1%></a>
								<%}
							}%>
						 <%	if (curPage < totalPage) { %> 
						 <a	href="/javaweb_jdbc01/page/doListPage.jsp?pageIndex=<%=curPage + 1%>">next</a>
								<%}	%> 
						<a 	href="/javaweb_jdbc01/page/doListPage.jsp?pageIndex=<%=totalPage%>">last</a>
					&nbsp;&nbsp;&nbsp; <%=curPage%>/<%=totalPage%> total: <%=count%> 
				| Enter Page:<input type="text" size="5" name="pageIndex" /> 
				<select name="num" onchange="goNum()">
						<option value="5">5</option>
						<option value="10">10</option>
						<option value="20">20</option>
				</select></td>
			</tr>
			<%
				} else {
			%>
			<tr>
				<td colspan="4" align="center">no data</td>
			</tr>
			<%
				}
			%>
		</table>
	</form>
	<jsp:include page="/inc/footer.jsp" />
</body>
</html>```

+ index.jsp

```java
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
<jsp:forward page="/page/doListPage.jsp">
	<jsp:param value="hi" name="greet"/>
</jsp:forward>
  </body>
</html>

Java Web 5: EL & JSTL

在这里插入图片描述

  • EL: optimize jsp; Expression Language:( $ { } ) does not throw exceptions, does not display data if exception occurs
    1. get Values
  • use { " [ ] " } for when words have %, - or other special characters, ie: ${header[“accept-language”]
    1. Calculations
  • < input type=“radio” name=“gender” ${gender= =0 ? “checked”:"" }/>woman
    < input type=“radio” name=“gender” ${gender= =1 ? “checked”:"" }/>man
    1. get Object (“Model”/Request/Session) value:
  • get from JSP page: pageContext, request, session, application
  • ${requestScope.username}; $ {sessionScope.username}, if cannot find data, return “” empty
    1. use Java method
      在这里插入图片描述
  • setup javaweb_EL_JSTL_01 project
  • Manage Deployments
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • News.java
package com.abc.web.model;
public class News {
	private int id;
	private String title;
	private String content;  
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	@Override
	public String toString() {
		return "News [id=" + id + ", title=" + title + ", content=" + content + "]";
	}
}
  • NewsServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.abc.web.model.News;
@WebServlet(urlPatterns = "/news")
public class NewsServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		News n=new News();
		n.setId(1);
		n.setTitle("Olympics");
		n.setContent("Olympic 2020");
		req.setAttribute("news",n);
		ArrayList<News> list=new ArrayList<News>();
		list.add(n);
		list.add(n);
		req.setAttribute("list", list);
		System.out.println("News list"+list.toArray());
		req.getRequestDispatcher("EL.jsp").forward(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		doGet(req,resp);
	}
}
  • EL.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'EL.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	<%
		int num = 10;
	%>
	<%=num%><br />
	<%
		pageContext.setAttribute("number", num);
	%>
	${number}
	<br /> ----get value from
	pageContext----pageContext.setAttribute("number",num);
	<hr />
	<%
		request.setAttribute("username", "XXX");
	%>
	${username}
	<br /> ----get value from
	request----request.setAttribute("username","XXX");
	<hr />
	${requestScope.username }
	<br /> ----get value from request using requestScope.username
	<hr />
	----get value from News.java
	<br /> title: ${news.title }
	<br /> equivalent to --> News news=request.getAttribute("news");
	<hr />
	${news["title"]} 
	<hr />
	${list[0]}<br />
	${list[1]}
	<hr />
	--boolean news !=null<br />
	${news !=null }
	<hr />
	--boolean news ==null<br />
	${news ==null }
	<hr/>	
	--boolean news eq null<br />
	${news  eq null }
	<hr/>
	--boolean empty news<br />
	${empty news }
	<hr/>
	--? : news !=null ? "Yes": "No"<br />
	${news !=null? "Yes":"No" }
	<hr/>
	--calculations<br/>
	${1+2}
	<hr/>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

  • DataSourceListener.java
package com.abc.jdbc.filter;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import com.abc.jdbc.util.DbcpUtil;
@WebListener
public class DataSourceListener implements ServletContextListener {
	DataSource ds = null;
	@Override
	public void contextDestroyed(ServletContextEvent sce) {

	}
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		try {
			Properties prop = new Properties();
			InputStream is = DbcpUtil.class.getResourceAsStream("/jdbc.properties");
			prop.load(is);
			System.out.println(prop.getProperty("driver"));
			System.out.println(prop.getProperty("url"));
			System.out.println(prop.getProperty("username"));
			System.out.println(prop.getProperty("password"));
			System.out.println(prop.getProperty("initialSize"));
			System.out.println(prop.getProperty("maxIdle"));
			System.out.println(prop.getProperty("minIdle"));
			// DBCP Data pool
			ds = BasicDataSourceFactory.createDataSource(prop);
			System.out.println("DataSourceListner contextInitialized ds="+ds.toString());
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

在这里插入图片描述

  • demo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<jsp:useBean id="news" class="com.abc.web.model.News"
 scope="page"></jsp:useBean>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'demo.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	<%
		String str="test";	
		request.setAttribute("str",str);
		news.setTitle("news.title");
		List<String> list=new ArrayList<String>();
		list.add("list1");
		list.add("list2");
		list.add("list3");
		request.setAttribute("list",list);
	%>
	${str }<br/>
	${news.title }<br/>
	${list[0] }<br/>
	${list[1] }<br/>
	${list[2] }<br/>
	${2+3 }<br/>
</body>
</html>
  • cookie

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • EL.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'EL.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	<%
		int num = 10;
	%>
	<%=num%><br />
	<%
		pageContext.setAttribute("number", num);
	%>
	${number}
	<br /> ----get value from
	pageContext----pageContext.setAttribute("number",num);
	<hr />
	<%
		request.setAttribute("username", "XXX");
	%>
	${username}
	<br /> ----get value from
	request----request.setAttribute("username","XXX");
	<hr />
	${requestScope.username }
	<br /> ----get value from request using requestScope.username
	<hr />
	----get value from News.java
	<br /> title: ${news.title }
	<br /> equivalent to --> News news=request.getAttribute("news");
	<hr />
	${news["title"]} 
	<hr />
	${list[0].title}<br />
	${list[1]}
	<hr />
	--boolean news !=null<br />
	${news !=null }
	<hr />
	--boolean news ==null<br />
	${news ==null }
	<hr/>	
	--boolean news eq null<br />
	${news  eq null }
	<hr/>
	--boolean empty news<br />
	${empty news }
	<hr/>
	--? : news !=null ? "Yes": "No"<br />
	${news !=null? "Yes":"No" }
	<hr/>	
	1>3<br />
	${1>3 }<br/>
	1 gt 3<br/>
	${1 gt 3 }
	<hr/>
	--calculations<br/>
	${1+2}
	<hr/>
	<% int gender=0;
	request.setAttribute("gender",gender); %>
	<input type="radio" name="gender" ${gender==0 ? "checked":"" }/>woman
	<input type="radio" name="gender" ${gender==1 ? "checked":"" }/>man
	<hr/>
	<% 
		Map<String, String>map=new HashMap<String, String>();
		map.put("k1","v1");
		map.put("k2","v2");
		map.put("k3","v3");
		request.setAttribute("map",map);
	%>
	get specific value from map : ${map.k1 }<br/>
	<hr/>
	${cookie }<br/>
	<hr/>
	cookie.JSESSIONID: ${cookie.JSESSIONID }<br/>
	<hr/>
	header: ${header }<br/>
	<hr/>
	header.cookie ${header.cookie }<br/>
	<hr/>
	hearder.accept-language: ${header["accept-language"] }<br/>
	<hr/>
	get or post ? pageContext.request.method: ${pageContext.request.method }<br/>
	<hr/>
	get parameters from web.xml: ${initParam}<br/>
	<hr/>
	get value from web.xml: ${initParam.name }<br/>
	<hr/>
</body>
</html>
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>javaweb_EL_JSTL_01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <context-param>
  	<param-name>name</param-name>
  	<param-value>Chip</param-value>
  </context-param>
</web-app>
  • Several ports (8005, 8080, 8009) required by MyEclipse Tomcat v7.0 are already in use

  • Solve port issue
    在这里插入图片描述
    在这里插入图片描述
    JSTL

  • add <%@ tablib uri=“http://java.sun.com/jsp/jstl/core”
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • < c: out> value: out value

  • < c: out> escape (default true)

  • < c: out> default: : default

  • < c: set> cannot output value unless defined

  • < c: set> var: variable

  • < c: set> scope: range for var

  • < c: set> value: var(attribute) value

  • < c: set> property: attribute of object

  • < c: set> target: object

  • < c: foreach>: loop

  • < c: foreach>: for (News news list){ }

  • < c: foreach>: for(int i=0; i<10; i++){ }

  • < c: foreach>: var: temp varname

  • < c: foreach>: items: loop items

  • < c: foreach>: varStatus: index (0); count (1); first; last (true/false)

  • < c: foreach>: step: increment

  • < c: foreach>: begin; end: start/stop loop

  • < c: if>: test: use EL expression

  • < c: if>: var: get result (boolean) of if statement (isLogin)

  • < c: if>: scope: range for var

  • < c: url> var: name

  • < c: url> value: url

  • < c: redirect>: url

  • < c: param>: name: param name

  • < c: param>: value: param value

  • < c: import>: url: url

  • < c:catch>: var=“error”

  • < c:forTokens>: items: list

  • < c:forTokens>: delims : delimiters (",")

  • < c:remove>: var : remove the value of variable (request, or set)

  • < c:choose>: when: condition; otherwise: condition
    在这里插入图片描述
    在这里插入图片描述

  • EL.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'EL.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	<%
		int num = 10;
	%>
	<%=num%><br />
	<%
		pageContext.setAttribute("number", num);
	%>
	${number}
	<br /> ----get value from
	pageContext----pageContext.setAttribute("number",num);
	<hr />
	<%
		request.setAttribute("username", "XXX");
	%>
	${username}
	<br /> ----get value from
	request----request.setAttribute("username","XXX");
	<hr />
	${requestScope.username }
	<br /> ----get value from request using requestScope.username
	<hr />
	----get value from News.java
	<br /> title: ${news.title }
	<br /> equivalent to --> News news=request.getAttribute("news");
	<hr />
	${news["title"]} 
	<hr />
	${list[0].title}<br />
	${list[1]}
	<hr />
	--boolean news !=null<br />
	${news !=null }
	<hr />
	--boolean news ==null<br />
	${news ==null }
	<hr/>	
	--boolean news eq null<br />
	${news  eq null }
	<hr/>
	--boolean empty news<br />
	${empty news }
	<hr/>
	--? : news !=null ? "Yes": "No"<br />
	${news !=null? "Yes":"No" }
	<hr/>	
	1>3<br />
	${1>3 }<br/>
	1 gt 3<br/>
	${1 gt 3 }<br/>
	<hr/>
	<% int gender=0;
	request.setAttribute("gender",gender); %>
	<input type="radio" name="gender" ${gender==0 ? "checked":"" }/>woman
	<input type="radio" name="gender" ${gender==1 ? "checked":"" }/>man
	<hr/>
	<% 
		Map<String, String>map=new HashMap<String, String>();
		map.put("k1","v1");
		map.put("k2","v2");
		map.put("k3","v3");
		request.setAttribute("map",map);
	%>
	get specific value from map : ${map.k1 }<br/>
	<hr/>
	${cookie }<br/>
	<hr/>
	cookie.JSESSIONID: ${cookie.JSESSIONID }<br/>
	<hr/>
	header: ${header }<br/>
	<hr/>
	header.cookie ${header.cookie }<br/>
	<hr/>
	hearder.accept-language: ${header["accept-language"] }<br/>
	<hr/>
	get or post ? pageContext.request.method: ${pageContext.request.method }<br/>
	<hr/>
	get parameters from web.xml: ${initParam}<br/>
	<hr/>
	get value from web.xml: ${initParam.name }<br/>
	<hr/>
	--calculations<br/>
	1+2: ${1+2}<br/>
	name: ${name }<br/>
	pa: ${pa }<br/>
	paramValues: ${paramValues }<br/>
	paramValues.age: ${paramValues.age }<br/>
	param.age: ${param.age }<br/>
	use if to get attribute: ${isLogin }<br/>
	<!-- param.categoryId: ${param.categoryId }-->
	<hr/>
</body>
</html>
  • JSTL_core.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<jsp:useBean id="news" class="com.abc.web.model.News"></jsp:useBean>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'JSTL.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	==============out
	<br /> %="Jsp"%:
	<%="Jsp"%><br /> c:out value="JSTL: cout":
	<c:out value="JSTL: cout"></c:out>
	<br />
	<c:out value="<a href='#'>click here</a>" escapeXml="true"></c:out>
	<br />
	<c:out value="<a href='#'>click here</a>" escapeXml="false"></c:out>
	<br />
	<c:out value="${username }" default="sam"></c:out>
	<br />
	<c:out value="bob" default="bobby"></c:out>
	<br /> ==============set
	<br />
	<c:set var="name" value="Bob123"></c:set>
	<br />
	<c:set var="pa" value="Root123" scope="session"></c:set>
	<br />
	<c:out value="${name }"></c:out>
	<br /> ${name }
	<br />
	<c:out value="${pa }"></c:out>
	<br />
	<c:out value="${param.age }"></c:out>
	<br /> ${pa}
	<br />
	<c:set target="${news }" property="title" value="this is the Title"></c:set>
	${news.title }
	<br /> ==============forEach
	</br>
	<c:forEach var="i" begin="1" end="10" step="1">
		<c:out value="${i }"></c:out>
	</c:forEach>
	<br />
	<c:forEach var="i" begin="1" end="10" step="2">
		<c:out value="${i }"></c:out>
	</c:forEach>
	<br />
	<c:forEach var="i" begin="5" end="10" step="1">
		<c:out value="${i }"></c:out>
	</c:forEach>
	<br />
	<%
		List<String> list = new ArrayList<String>();
		list.add("Abe");
		list.add("Bob");
		list.add("Cole");
		list.add("Dana");
		request.setAttribute("listPpl", list);
	%>
	<c:forEach var="Ppl" items="${listPpl }" varStatus="status">
		<c:out value="${Ppl }"></c:out> 
		${Ppl }
		status.index: ${status.index }
		status: ${status }		<br />
		status.count: ${status.count }
		first: ${status.first }
		last: ${status.last }
		<br />
	</c:forEach>
	<br />
	<!-- listNews contains news  -->
	<c:forEach var="news" items="${listNews }">
	news.title: ${news.title }
	news.content: ${news.content }
	</c:forEach>
	<br />
	<br /> ==============forEach display using Table
	</br>
	<table width="100%" border="1px">
		<tr>
			<td>PEOPLE</td>
		</tr>
		<c:forEach var="Ppl" items="${listPpl }" varStatus="status">
			<tr ${status.index % 2 == 0 ? "bgcolor='#ccccfe'" : ""}>
				<td>${Ppl }</td>
			</tr>
		</c:forEach>
	</table>
	<br /> ==============if
	</br>
	<c:if test="${20>1}">
		<c:out value="Correct"></c:out>
	</c:if>
	<br />
	<c:if test="${2<1}">
		<c:out value="Wrong"></c:out>
	</c:if>
	<br />
	<%
		session.setAttribute("curUser", "Admin");
	%>
	<c:if test="${curUser !=null }" var="isLogin" scope="session">
		<c:out value="Welcome[??] logging in"></c:out>
		<br />
	</c:if>
	<br /> ==============url
	</br>
	<c:url var="addr" value="http://www.bing.com"></c:url>
	<a href="${addr }">Bing</a>
	<br /> ==============param
	</br>
	<%-- <c:redirect url="EL.jsp">
		<c:param name="categoryId" value="12"></c:param>
	</c:redirect>
	<!--<jsp:forward page="">
		<jsp:param value="" name=""/>
	</jsp:forward>-->
	--%>
	<br /> ==============import
	<br />
	<%--  	<c:import url="http://www.bing.com" charEncoding="UTF-8"></c:import>
 --%>
	<br /> ==============catch
	<br />
	<c:catch var="error">
	${ 5/0}
	</c:catch>
	<br /> ==============forTokens
	<br />
	<c:forTokens var="txt" items="abcdef,a,b,c,d,e,f" delims=",">
	${txt }<br />
	</c:forTokens>
	<br /> ==============remove
	<br /> pa:
	<c:out value="${pa }"></c:out>
	<br />
	<c:remove var="pa" />
	pa removed:
	<c:out value="${pa }"></c:out>
	<br />==============choose
	<br />
	<c:set var="pm" value="102"></c:set>
	<c:choose>
		<c:when test="${pm < 50}">
			<c:out value="air quality good"></c:out>
		</c:when>
		<c:when test="${pm > 50 and pm <100}">
			<c:out value="air quality ok"></c:out>
		</c:when>
		<c:otherwise>
			<c:out value="slight pollution"></c:out>
		</c:otherwise>
	</c:choose>
</body>
</html>

在这里插入图片描述

  • format: <%@ taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt” %>
  • < fmt:formatDate value="<%=new Date() %>" pattern=“yyyyMMddHH:mm:ss”/>
  • JSTL_format.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'JSTL_format.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	==============formatDate
	<br />
	<fmt:formatDate value="<%=new Date()%>" pattern="yyyyMMddHH:mm:ss" />
	<br />
	<fmt:formatDate value="<%=new Date()%>" dateStyle="short" />
	<br />
	<fmt:formatDate value="<%=new Date()%>" dateStyle="long" />
	<br />
	<fmt:formatDate value="<%=new Date()%>" timeStyle="both" />
	<br />
		==============formatNumber
	<br />
	<fmt:formatNumber value="50000" type="currency"></fmt:formatNumber><br/>
	<fmt:formatNumber value="50000" type="currency" pattern="##,##,##,##,##"></fmt:formatNumber><br/>
	<fmt:formatNumber value="50000" type="currency" currencySymbol="$"></fmt:formatNumber><br/>
	<fmt:formatNumber value="50000" type="percent"></fmt:formatNumber><br/>
	<fmt:formatNumber value="50000" type="number"></fmt:formatNumber><br/>
	<fmt:formatNumber value="54321" type="number" maxIntegerDigits="3"></fmt:formatNumber><br/>
	<fmt:formatNumber value="54321" type="number" minIntegerDigits="6"></fmt:formatNumber><br/>
</body>
</html>

在这里插入图片描述

  • secure page visit: No direct connection
    1. create own tags: use *.tld files to store links (taglib>
  • REFERENCE: >>> D:\Program Files\myEclipse2016\plugins
    com.genuitec.eclipse.j2eedt.core_13.0.0.me201605020208
    data\libraryset\JSTL1.2.1\lib\jstl-impl.jar/META-INF/c.tld
    1. create java file with SimpleTagSupport inherited (javax.servlet.jsp.tagext) API JavaEE
    1. reWrite doTag() method
      在这里插入图片描述
      在这里插入图片描述
  • TagServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TagServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGetreq: "+req);
		System.out.println("doGetresp: "+resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req,resp);
		System.out.println("doPostreq: "+req);
		System.out.println("doPostresp: "+resp);
	}
}
  • ListenerTag.java
package com.abc.web.tag;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
///set self titled tags
//safe link
public class ListenerTag extends SimpleTagSupport{
	private String site;
	private String page;
	@Override
	public void doTag() throws JspException, IOException {
			System.out.println("entering ListenerTag.java...");
			PageContext pageContext=(PageContext)this.getJspContext();
			HttpServletRequest req=(HttpServletRequest)pageContext.getRequest();
			String referer=req.getHeader("Referer");
			System.out.println("Referer: "+referer);
			if(referer == null || !referer.startsWith(site)){
				HttpServletResponse resp=(HttpServletResponse)pageContext.getResponse();
				resp.sendRedirect(page);
			}
	}
	public String getSite() {
		return site;
	}
	public void setSite(String site) {
		this.site = site;
	}
	public String getPage() {
		return page;
	}
	public void setPage(String page) {
		this.page = page;
	}
}
  • Admin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.abc.abc/jsp/jstl/bc" prefix="bc" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'Admin.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
  <bc:listener site="http://localhost:8080" page="main.jsp"/>
	Welcome<br/>
  </body>
</html>
  • main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'main.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
	<a href="page/Admin.jsp">Backend Manager</a>
</body>
</html>
  • abc.tld
<?xml version="1.0" encoding="UTF-8" ?>
<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">
	<!-- self set tags -->
	<description>self titled tags</description>
	<display-name>JSTL abc</display-name>
	<tlib-version>1.2</tlib-version>
	<short-name>abc</short-name>
	<uri>http://www.abc.abc/jsp/jstl/bc</uri>
	<tag>
		<description>
			Control page visit source
		</description>
		<name>listener</name>
		<tag-class>com.abc.web.tag.ListenerTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<description>Not from this page</description>
			<name>page</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<description>from this page</description>
			<name>site</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

Java Web 6: Servlet, Filter & Listener

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • servlet

  • JSP : display

  • Servlet: accept request, use JavaBean to process, determine which page display datat

  • JavaBean: Encapsulate data, logic

  • Class HttpServlet

  • doGet, if the servlet supports HTTP GET requests

  • doPost, for HTTP POST requests

  • doPut, for HTTP PUT requests

  • doDelete, for HTTP DELETE requests

  • init and destroy, to manage resources that are held for the life of the servlet

  • getServletInfo, which the servlet uses to provide information about itself

  • new project javaweb_servlet01

  • 3 methods create Servlet: javax.servlet.Servlet; javax.servlet.GenericServlet; javax.servlet.http.HttpServlet

  • Servlet: create: 1. extends HttpServlet

  • Servlet: init (): 2. initilaize once;

  • Servlet: 3. service (): request and response, doGet, doPost;

  •   req.getSession()...  get session
    
  •   req.getServletContext().... get application
    
  • Servlet: 4 destroy ()

  • ServletRequest: encapsulate request

  • ServletResponse: encapsulate response

  • ServletConfig: include servlet initialization info
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

  • cannot repeat same url address for different servlets

  •   **< url-pattern>/*< /url-pattern>** : any address
    
  • can have multiple patterns for url
    在这里插入图片描述

  • StuAddServlet.java

package com.abc.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuAddServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		System.out.println("add method");
		resp.getWriter().print("add method");
/*		stuService.save(stu);
*/		req.getRequestDispatcher("/list").forward(req, resp);
	}
}
  • StuListServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuListServlet extends HttpServlet {
	@Override
	public void init() throws ServletException {
		System.out.println("initialize");
	}
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("initialize with ServletConfig config");
		//get Servlet name from web.xml name under servlet
		System.out.println(config.getServletName());
		System.out.println(config.getServletContext().getContextPath());
		//get parameters
		Enumeration<String> params=config.getInitParameterNames();
		while(params.hasMoreElements()){
			System.out.println("Element: "+params.nextElement());
		}
		//get context parameters
		Enumeration<String> ctxParams=config.getServletContext().getInitParameterNames();
		while(ctxParams.hasMoreElements()){
			System.out.println("Ctx Element: "+ctxParams.nextElement());
		}
		//get value for paramters
		System.out.println("encoding==="+config.getServletContext().getInitParameter("encoding"));
		System.out.println("coding==="+config.getServletContext().getInitParameter("coding"));
		System.out.println("username==="+config.getInitParameter("username"));
		System.out.println("password==="+config.getInitParameter("password"));
		super.init(config);
	}
	@Override 
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGet");
//		+ 		req.getSession()...  get session
//		+ 		req.getServletContext().... get application
		resp.getWriter().print("doGet!");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doPost");
	}
	@Override
	public void destroy() {
		System.out.println("destroy");
		super.destroy();
	}
}
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>javaweb_jdbc02</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<context-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</context-param>
	<context-param>
		<param-name>coding</param-name>
		<param-value>true</param-value>
	</context-param>
	<servlet>
		<servlet-name>ListServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuListServlet</servlet-class>
		<init-param>
			<param-name>username</param-name>
			<param-value>root</param-value>
		</init-param>
		<init-param>
			<param-name>password</param-name>
			<param-value>12345</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>ListServlet</servlet-name>
		<url-pattern>/list</url-pattern>
	</servlet-mapping>
	<servlet>
		<servlet-name>addServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuAddServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>addServlet</servlet-name>
		<url-pattern>/add</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>addServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>addServlet</servlet-name>
		<url-pattern>/list/*</url-pattern>
	</servlet-mapping>
</web-app>
  • javaweb_servlet01: web project
    在这里插入图片描述
  • BaseDao.java
package com.abc.web.dao;
public interface BaseDao {
	public void add();
	public void delete();
	public void query();
	public void update();
}
  • BaseDaoImpl.java
package com.abc.web.dao;
public class BaseDaoImpl implements BaseDao {
	@Override
	public void add() {	}
	@Override
	public void delete() {}
	@Override
	public void query() {}
	@Override
	public void update() {}
}
  • JdbcDao.java
package com.abc.web.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.abc.web.util.ConfigUtil;
//JDBC: DAO
public class JdbcDao {
	//driverClassName
	static{
		try {
			Class.forName(ConfigUtil.getValue("driverClassName"));
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//get Connection
	private static Connection getConn(){
		try {
			return DriverManager.getConnection(ConfigUtil.getValue("url"),
					ConfigUtil.getValue("username"),
					ConfigUtil.getValue("password"));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
		
	}
	//update
	public static void update(String sql, Object[] params) {
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			conn = getConn();
			ps = conn.prepareStatement(sql);
			if (params != null && params.length > 0) {
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i + 1, params[i]);
				}
			}
			System.out.println(ps);
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			close(null, ps, conn);
		}
	}
	//close
	private static void close(ResultSet rs, PreparedStatement ps,
			Connection conn){
		try {
			if (rs != null)
				rs.close();
			if (ps != null)
				ps.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
  • StudentDao.java
package com.abc.web.dao;
import com.abc.web.dao.model.Student;
public class StudentDao {
	public void add(Student stu) {
		String sql = " insert into student (studentNo ,loginPwd, "
				+ "studentName, sex) values(?,?,?,?)";
		Object[] params = { 
				stu.getStuNo(),
				stu.getPwd(), 
				stu.getStuName(),
				stu.getGender() 
				};
		JdbcDao.update(sql, params);
	}
}
  • UserDao.java
package com.abc.web.dao;
public interface UserDao extends BaseDao {
	public void queryById();
}
  • UserDaoimpl.java
package com.abc.web.dao;
public class UserDaoImpl extends BaseDaoImpl implements UserDao {
	@Override
	public void queryById() {
		// TODO Auto-generated method stub	
	}
}
  • Student.java
package com.abc.web.dao.model;
public class Student {
//	String stuNo=req.getParameter("stuNo");
//	String stuName=req.getParameter("stuName");
//	String pwd=req.getParameter("pwd");
//	String gender=req.getParameter("gender");
	private String stuNo;
	private String stuName;
	private String pwd;
	private int gender;
	public Student(){}
	public Student(String stuNo, String stuName, String pwd, int gender) {
		super();
		this.stuNo = stuNo;
		this.stuName = stuName;
		this.pwd = pwd;
		this.gender = gender;
	}
	public String getStuNo() {
		return stuNo;
	}
	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public int getGender() {
		return gender;
	}
	public void setGender(int gender) {
		this.gender = gender;
	}
	@Override
	public String toString() {
		return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", pwd=" + pwd + ", gender=" + gender + "]";
	}
}
  • EncodingFilter.java
package com.abc.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter{
	@Override
	public void destroy() {}
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		req.setCharacterEncoding("utf-8");
		System.out.println("EncodingFilter: doFilter");
		chain.doFilter(req,resp);
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {}
}
  • StuService.java
package com.abc.web.service;
import com.abc.web.dao.StudentDao;
import com.abc.web.dao.model.Student;
public class StuService {
	StudentDao stuDao=new StudentDao();
	public void save(Student stu){
		stuDao.add(stu);
	}
}
  • StuAddServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.abc.web.dao.model.Student;
import com.abc.web.service.StuService;
public class StuAddServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		resp.getWriter().print("StuAddServlet: doGet!");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().print("StuAddServlet: doPost!");
	}
}
  • StuListServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuListServlet extends HttpServlet {
	@Override
	public void init() throws ServletException {
		System.out.println("initialize");
	}
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("initialize with ServletConfig config");
		//get Servlet name from web.xml name under servlet
		System.out.println(config.getServletName());
		System.out.println(config.getServletContext().getContextPath());
		//get parameters
		Enumeration<String> params=config.getInitParameterNames();
		while(params.hasMoreElements()){
			System.out.println("Element: "+params.nextElement());
		}
		//get context parameters
		Enumeration<String> ctxParams=config.getServletContext().getInitParameterNames();
		while(ctxParams.hasMoreElements()){
			System.out.println("Ctx Element: "+ctxParams.nextElement());
		}
		//get value for paramters
		System.out.println("encoding==="+config.getServletContext().getInitParameter("encoding"));
		System.out.println("coding==="+config.getServletContext().getInitParameter("coding"));
		System.out.println("username==="+config.getInitParameter("username"));
		System.out.println("password==="+config.getInitParameter("password"));
		super.init(config);
	}
	@Override 
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//http://localhost:8080/javaweb_servlet01/list?name=Sam
		System.out.println(req.getParameter("name"));
		System.out.println("StuList: doGet");
//		+ 		req.getSession()...  get session
//		+ 		req.getServletContext().... get application
		resp.getWriter().print("StuList: doGet!");		 
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("StuList: doPost");
	}
	@Override
	public void destroy() {
		System.out.println("StuList: destroy");
		super.destroy();
	}
}
  • StuServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.abc.web.dao.model.Student;
import com.abc.web.service.StuService;
public class StuServlet extends HttpServlet {
	StuService stuService= new StuService();
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//use attribute to process request
		String action=request.getParameter("action");
		if("add".equals(action)){
			System.out.println("stuServlet: add");
			add(request, response);
			response.getWriter().print("StuServlet: add");
		}else if("list".equals(action)){
			System.out.println("stuServlet: list");
			list(request, response);
			response.getWriter().print("StuServlet: list");
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}
	private void add(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException{
		System.out.println("add method");

		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		resp.getWriter().print("add method");
		String stuNo=req.getParameter("stuNo");
		String stuName=req.getParameter("stuName");
		String pwd=req.getParameter("pwd");
		String gender=req.getParameter("gender");
		Student stu=new Student();
		stu.setStuNo(stuNo);
		stu.setStuName(stuName);
		stu.setPwd(pwd);
		if(gender !=null && !"".equals(gender)){
			stu.setGender(Integer.parseInt(gender));
		}
		resp.getWriter().print(stu.toString());
		stuService.save(stu);
		req.getRequestDispatcher("/list").forward(req,resp);
	}
	private void list(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException{
		System.out.println("list method");
	}
}
  • ConfigUtil.java
package com.abc.web.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigUtil {
	//use Key to get Value
	public static String getValue(String key){
		//get properties
		Properties pro = new Properties();
		//get inputstream
		InputStream is=ConfigUtil.class.getResourceAsStream("/web.properties");
		try {
			//add inputstream is
			pro.load(is);
			//return value searched by key
			return pro.getProperty(key);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException();
		}
	}	
	public static void main(String[] args) {
		System.out.println( ConfigUtil.getValue("url"));
	}
}
  • web.properties
#driver=com.mysql.jdbc.Driver
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool?serverTimezone=UTC
username=root
password=12345
initialSize=10
maxIdle=30
minIdle=3
  • addStu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>addStu.jsp</title>
</head>
<body>
	<form action="/javaweb_servlet01/stu" method="post">
 	<input type="hidden" name="action" value="add"/>
		<table border="1px" align="center" cellspacing="5px">
			<tr>
				<td>studentNo:</td>
				<td><input type="text" name="stuNo" /></td>
			</tr>
			<tr>
				<td>password:</td>
				<td><input type="password" name="pwd" /></td>
			</tr>
			<tr>
				<td>studentName:</td>
				<td><input type="text" name="stuName" placeholder="enter name" /></td>
			</tr>
			<tr>
				<td>gender:</td>
				<td align="center"><input type="radio" name="gender" value="1" />male
					<input type="radio" name="gender" value="2"/>female</td>
			</tr>
			<tr>
				<td colspan="2" align="center">
				<input type="submit"	value="save" /> 
				<input type="button" value="back" />
				</td>
			</tr>
		</table>
	</form>
</body>
</html>
  • listStu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@	page import="java.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Liststu.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<body>
</body>
</html>
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>javaweb_jdbc01</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<context-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</context-param>
	<context-param>
		<param-name>coding</param-name>
		<param-value>true</param-value>
	</context-param>
	<servlet>
		<servlet-name>ListServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuListServlet</servlet-class>
		<init-param>
			<param-name>username</param-name>
			<param-value>root</param-value>
		</init-param>
		<init-param>
			<param-name>password</param-name>
			<param-value>12345</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>ListServlet</servlet-name>
		<url-pattern>/list</url-pattern>
	</servlet-mapping>
	<servlet>
		<servlet-name>addServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuAddServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>addServlet</servlet-name>
		<url-pattern>/add</url-pattern>
	</servlet-mapping>
	<!-- <servlet-mapping> <servlet-name>addServlet</servlet-name> <url-pattern>/*</url-pattern> 
		</servlet-mapping> <servlet-mapping> <servlet-name>addServlet</servlet-name> 
		<url-pattern>/list/*</url-pattern> </servlet-mapping> -->
	<servlet>
		<servlet-name>StuServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>StuServlet</servlet-name>
		<url-pattern>/stu</url-pattern>
	</servlet-mapping>
	<!-- filter -->
	<filter>
	<filter-name>EncodingFilter</filter-name>
	<filter-class>com.abc.web.filter.EncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
  • filter: process request and response
    在这里插入图片描述

  • " &quot ;

  • &nbsp ;

  • < &lt ;

  • &gt ;

  • < script>

  • < a href=" ">< /a>
    在这里插入图片描述

  • filter: dispatcher: Enum:

    • FORWARD: <jsp: forward…>; request.getDispatcher(“url”.forward(req,resp);
    • INCLUDE: <jsp: include …?; <%@include%>;
    • REQUEST: get post;
    • ASYNC: Asynchronous AJAX;
    • ERROR: error;
  • Filter:

  • examples: Annotation; Listener; Ckeditor

    1. Create a Filter Class implementing Filter: override destroy(); init(); doFilter();
  • under doFilter() add: chain.doFilter(request, response);

  • for String Empty: if (str !=null && !" ".equals(str)){…}

  • for matrix Empty: if (col !=null && col.size>0){…}

    1. Create Filter under web.xml file
  • change Server.xml file under installed Tomcat
    在这里插入图片描述

   <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  • Servlet :
  • request.setCHaracterEncoding() only works for post request, not get
  • Decorator pattern: new class, expands existing class ( classesless groups on the web)
  • BufferedInputStream(InputStream in)
  • Parent —son one; --son two;
  • Parent —action { —son one; --son two;} --talk{–Ch; --En;}
  • Person: go; —poor{shoes} —rich{shoes; segway; jet}
  • public class RichGuy extends Person{ public RichGuy(Person p){ }
  • public void @override go(){ shoes; segway; jet}
  • Decorator pattern get/post request encoding problem (Ch->En):
    1. create MyRequest extends HttpServletRequestWrapper{} method
    1. create variable : private HttpServletRequest request; create method: public MyRequest(HttpServletRequest request)
    1. Override GetParameter(){} method
	@Override
		public String getParameter(String name) {
			String value=request.getParameter(name);
			if("get".equalsIgnoreCase(request.getMethod())){
				try {
					value=new String(value.getBytes("ISO8859-1"),"utf-8");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			}
			return value;
		}
    1. Filter after using Decorator pattern Request object:
...
		MyRequest myReq=new MyRequest(req);
...
		chain.doFilter(myReq, response);
  • Filter
    在这里插入图片描述
  • CharaterFilter.java
package com.abc.web.filter;
import java.io.IOException;
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;
import com.abc.web.servlet.MyRequest;
public class CharacterFilter implements Filter {
	private String encoding;
	@Override
	public void destroy() {
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		MyRequest myReq = new MyRequest(req);
		HttpServletResponse resp = (HttpServletResponse) response;
		// utf
		req.setCharacterEncoding(encoding);
		resp.setCharacterEncoding(encoding);
		chain.doFilter(myReq, response);
	}
	@Override
	public void init(FilterConfig fConfig) throws ServletException {
		encoding = fConfig.getInitParameter("encoding");
		if (encoding == null || "".equals(encoding)) {
			encoding = "UTF-8";
		}
	}
}
  • MyFilter.java
package com.abc.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter implements Filter {
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("MyFilter: destroy Filter");

	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("MyFilter: doFilter: before");
		chain.doFilter(request, response);
		System.out.println("MyFilter: doFilter: after");

	}
	@Override
	public void init(FilterConfig config) throws ServletException {
		System.out.println("MyFilter: init Filter");
		//get filter name
		System.out.println(config.getFilterName());
		//get initialized values
		System.out.println(config.getInitParameter("username2"));
	 //get initialized parameters
		config.getInitParameterNames();
	}
}
  • MyHtmlFilter.java
package com.abc.web.filter;
import java.io.IOException;
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;
import com.abc.web.servlet.MyHtmlRequest;
public class MyHtmlFilter implements Filter {
	@Override
	public void destroy() {
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, 
			FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest req=(HttpServletRequest)request;
		HttpServletResponse resp=(HttpServletResponse)response;
		MyHtmlRequest myreq= new MyHtmlRequest(req);
		chain.doFilter(myreq,resp);
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub		
	} 
}
  • FilterServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class FilterServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// System.out.println(req.getParameter("str"));
		// http://localhost:8080/javaweb_servlet01/filter?str=BOB
		String str= req.getParameter("str");

/*		if ("get".equalsIgnoreCase(req.getMethod())) {
			System.out.println("FilterServlet: doGet: " + req.getMethod());
			if (!"".equals(str) || str != null) {
				 str = new String(str.getBytes("ISO8859-1"), "utf-8");
				System.out.println("FilterServlet: doGet: " + str);
			}
		}*/
		System.out.println("FilterServlet:  " + str);

	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}
  • MyHtmlRequest.java
package com.abc.web.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class MyHtmlRequest extends HttpServletRequestWrapper {
	private HttpServletRequest request;	
	public MyHtmlRequest(HttpServletRequest request) {
		super(request);
		// TODO Auto-generated constructor stub
		this.request=request;
	}	
	@Override
	public String getParameter(String name) {
		String value=request.getParameter(name);
		System.out.println("myhtmlRequest: value "+value);
		if(value==null){
			return ""; 
		}
		return htmlFilter(value);
	}
	//process HTML char value
	private String htmlFilter(String value) {
		// TODO Auto-generated method stub
		char[] contents=new char[value.length()]; //set char
		value.getChars(0, value.length(), contents, 0);//copy to new string
		StringBuffer result= new StringBuffer(); //new var
		for(int i=0; i<contents.length;i++){
			switch(contents[i]){
			case'>':
				result.append("&gt;");
				break;
			case'<':
				result.append("&lt;");
				break;
			default:
				result.append(contents[i]);
			}
		}
		return result.toString();
	}	
	public static void main(String[] args){
		String str="<script>";
		String result="";
		char[] contents = new char[str.length()];
		str.getChars(0,str.length(),contents,0);
		for(char c: contents){
			System.out.println(c);
			if(c=='>'){result+="&gt;";}
			else if (c=='<'){result+="&lt;";}
			else{result+=c;}
		}
		System.out.println(result);
	}	
}
  • MyHtmlServlet.java
package com.abc.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyHtmlServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
			String str=req.getParameter("msg");
			resp.getWriter().write(str);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
			doGet(req, resp);
	}
}
  • MyRequest.java
package com.abc.web.servlet;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class MyRequest extends HttpServletRequestWrapper {
  private HttpServletRequest request;
	public MyRequest(HttpServletRequest request) {
		super(request);
		this.request=request;
	}	
	@Override
		public String getParameter(String name) {
			String value=request.getParameter(name);
			if("get".equalsIgnoreCase(request.getMethod())){
				try {
					value=new String(value.getBytes("ISO8859-1"),"utf-8");
				} catch (UnsupportedEncodingException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			return value;
		}	
	public void filter(String value){
		//value..Character chart(0)
	}
}
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>javaweb_jdbc01</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<!-- -->
	<context-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</context-param>
	<context-param>
		<param-name>coding</param-name>
		<param-value>true</param-value>
	</context-param>
	<!-- -->
	<servlet>
		<servlet-name>ListServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuListServlet</servlet-class>
		<init-param>
			<param-name>username</param-name>
			<param-value>root</param-value>
		</init-param>
		<init-param>
			<param-name>password</param-name>
			<param-value>12345</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>ListServlet</servlet-name>
		<url-pattern>/list</url-pattern>
	</servlet-mapping>
	<!-- -->
	<servlet>
		<servlet-name>addServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuAddServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>addServlet</servlet-name>
		<url-pattern>/add</url-pattern>
	</servlet-mapping>
	<!-- -->
	<servlet>
		<servlet-name>StuServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.StuServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>StuServlet</servlet-name>
		<url-pattern>/stu</url-pattern>
	</servlet-mapping>
		<!-- -->
	<servlet>
		<servlet-name>FilterServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.FilterServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>FilterServlet</servlet-name>
		<url-pattern>/filter</url-pattern>
	</servlet-mapping>
	<!-- Filters -->
	<filter>
		<filter-name>MyFilter</filter-name>
		<filter-class>com.abc.web.filter.MyFilter</filter-class>
		<init-param>
			<param-name>username2</param-name>
			<param-value>root</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>MyFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- -->
	<filter>
		<filter-name>CharacterFilter</filter-name>
		<filter-class>com.abc.web.filter.CharacterFilter</filter-class>
		<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- MyHTMLServlet and filter -->
	<servlet>
		<servlet-name>MyHtmlServlet</servlet-name>
		<servlet-class>com.abc.web.servlet.MyHtmlServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>MyHtmlServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
 	<filter>
	<filter-name>MyHtmlFilter</filter-name>
	<filter-class>com.abc.web.filter.MyHtmlFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>MyHtmlFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping> 
</web-app>
  • index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
    This is my JSP page. <br>
  </body>
</html>
  • Annotation : replace xml file

  • @WebServlet(name=“HelloServlet”, urlPatterns="/hello")

  • //@WebServlet(urlPatterns="/hello")

  • //@WebServlet(urlPatterns="{hello,hi}")

  • //@WebServlet( urlPatterns="/hello","/hi")

  • initParams = {
    @WebInitParam(name = “username”, value = “root”),
    @WebInitParam(name=“password”, value=“123456” )
    }

  • urlPatterns and value have same function , cannot be used simultaneously

  • FilterAnnotation: Replace xml File

  • @WebFilter(filterName=“HelloFilter”, urlPatterns={"/*"})

  • Servlet 3.0 using Part: Upload

    1. Single steps:
      a. get Part Object (Use request Object .getPart method): Part part=req.getPart(“file type=filename)
      b. get uploaded filename
      b1. get value of part header key as content-disposition : form-data; name=“photo”; filename=“abc.jpg”;
      b2. get filename(abe.jpg)
      int lastIndex= header.lastIndexOf(”"");
      int eqIndex=header.lastIndexOf("=");
      header=header.substring(eqIndex+2, lastIndex);
      b3. create uploaded path: String path=req.getServletContext().getRealPath(“WEB-INF\upload”)
      c. physically write file
      part.write(filename) //path+filename
    1. Multiple upload steps:
      a. get Parts
      Collection parts= req.getParts();
      b. iterate through parts
      for(Part part: parts){}
      c. same as single file upload
      String fileName=getFinalFileName(part.getHeader(“content-disposition”));
      //for empty Parts
      if(fileName==null || “”.equals(fileName)){ continue; }
      String path=req.getServletContext().getRealPath(“WEB-INF\upload”);
      part.write(path+File.separator+fileName);
  • Mysql: Navcat
    在这里插入图片描述

  • Navicat error: can’t connect to mysql server on ‘localhost’

  • Use following steps:

  1. Open cmd with Admin
  2. D:\Program Files\mysql\bin>mysqld -install
    The service already exists!
  3. D:\Program Files\mysql\bin>net start mysql
  4. D:\Program Files\mysql\bin>mysql -u root -p
    Enter password: *****
    Welcome to the MySQL monitor.
  5. retry Navicat
  • AWT: Frame frame = new Frame();
    frame.addWindowListener(new WindowListener()
    在这里插入图片描述

  • Filters:

    1. request and response filter
    2. request checks and recording
    3. clean data, replacing items in data
    4. encoding and decoding data
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      ****加粗样式****
  • Listener: HttpSessionBindingListener: put into session , does not need to add to xml or have @Listener

  • HttpSessionListener: create or destroy session

  • HttpSessionAttributeListener: add/remove/replace session

  • Ckeditor; editordoc

  • < script type=“text/javascript” src="/ckeditor_4.16/ckeditor.js">

  • UEditor
    +

  • HelloFilter

package com.abc.web.filter;
import java.io.IOException;
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.annotation.WebFilter;
@WebFilter(filterName="HelloFilter", urlPatterns={"/*"})
public class HelloFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub		
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("HelloFilter:doFilter: before");
		chain.doFilter(request,response);
	}
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}
}  
  • OtherListener
package com.abc.web.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class OtherListener implements ServletContextListener 
, ServletRequestListener{
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
	}
	@Override
	public void contextInitialized(ServletContextEvent arg0) {
	}
	@Override
	public void requestDestroyed(ServletRequestEvent sre) {		
	}
	@Override
	public void requestInitialized(ServletRequestEvent sre) {
	}
}
  • SessionAttrListener
package com.abc.web.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
@WebListener
public class SessionAttrListener implements HttpSessionAttributeListener {
	public void attributeAdded(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub
		System.out.println("add attribute");
		System.out.println(event.getName()+":name, value: "+event.getValue());
	}
	@Override
	public void attributeRemoved(HttpSessionBindingEvent event) {
		System.out.println("remove attribute");
		System.out.println(event.getName()+":name, value: "+event.getValue());		
	}
	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {
		System.out.println("replaced attribute");
		System.out.println(event.getName()+":name, value: "+event.getValue());		
	}
}
  • SessionBindListener
package com.abc.web.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
//@WebListener("Listen for Num")
public class SessionBindListener implements HttpSessionBindingListener {


	@Override
	public void valueBound(HttpSessionBindingEvent e) {
		System.out.println( " listener session count increase...");
		Integer count = (Integer) e.getSession().getAttribute("count");
		if (count == null) {
			count = 1;
		} else {
			count++;
		}
		e.getSession().setAttribute("count", count);
	}
	@Override
	public void valueUnbound(HttpSessionBindingEvent e) {
		// TODO Auto-generated method stub
		System.out.println( " listener session count Unbounded...");
	}
}
  • SessionListener
package com.abc.web.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class SessionListener implements HttpSessionListener{
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("session created");		
	}
	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("session destroyed");		
	}
}
  • WindowClose
package com.abc.web.listener;
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class WindowClose {
	public static void main(String[] args) {
		new WindowClose().test();
	}
	public void test(){		
		Frame frame = new Frame();
		frame.setSize(200, 300);
		frame.addWindowListener(new WindowListener() {
			@Override
			public void windowOpened(WindowEvent e) {
				// TODO Auto-generated method stub
				System.out.println("windowOpened");
			}
			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
				Frame f=(Frame)e.getSource();
				System.out.println("windowClosing");  
				f.dispose();
			}
			@Override
			public void windowClosed(WindowEvent e) {
				// TODO Auto-generated method stub
				System.out.println("windowClosed");
			}
			@Override
			public void windowActivated(WindowEvent e) {
				System.out.println("windowActivated");
			}
			@Override
			public void windowDeactivated(WindowEvent e) {	}
			@Override
			public void windowIconified(WindowEvent e) {		}
			@Override
			public void windowDeiconified(WindowEvent e) {	}
		});
		frame.setVisible(true);
	}
}
  • FileUploadServlet
package com.abc.web.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet(urlPatterns="/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*		Part part= (Part) req.getPart("photo"); //single
		//req.getParts() //multi
		String head=part.getHeader("content-disposition");
		resp.getWriter().write("=="+head+"==;");
		String filename=getFileName(head);
		String filename2=getFinalFileName(head);
		String getServletPath=req.getServletPath();
		String getPathInfo=req.getPathInfo();
		String getContextPath=req.getContextPath();
		String getRealPath=req.getServletContext().getRealPath("WEB-INF\\upload");
		resp.getWriter().write("=="+filename+ "==;"); //filename
		resp.getWriter().write("=="+filename2+ "==;"); //filename
		resp.getWriter().write("=="+getServletPath+ "==;"); //upload
		resp.getWriter().write("=="+getPathInfo+ "==;"); //null
		resp.getWriter().write("=="+getContextPath+ "==;"); //javaweb_servlet03
		resp.getWriter().write("=="+getRealPath+"==;"); //path
		part.write(getRealPath+"\\"+filename); //also save file to path
		part.write(getRealPath+File.separator+filename); //save file
*/	
	multiFileUpload(req);	
	//displace last photo upload in multi Upload
	req.getRequestDispatcher("/index.jsp").forward(req,resp);

	}	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req,resp);
	}	
	//
	public void multiFileUpload(HttpServletRequest req){
		String fileName="";
		try {
			Collection<Part> parts= req.getParts();
			for(Part part: parts){
				System.out.println("multiFileUpload:"+part.getHeader("content-disposition")+"==");
				 fileName=getFinalFileName(part.getHeader("content-disposition"));
				//for empty Parts
				if(fileName==null || "".equals(fileName)){
					continue;
				}
				//String path=req.getServletContext().getRealPath("WEB-INF\\upload");
				String path=req.getServletContext().getRealPath("images"); //write into images
				part.write(path+File.separator+fileName);
				req.setAttribute("image", "images/"+ fileName);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//get file name for google & firefox
	private String getFileName(String file){
		//form-data; name="photo"; filename="00.jpg"
		int lastIndex=file.lastIndexOf("\"");
		int eqIndex=file.lastIndexOf("=");
		return file.substring(eqIndex+2, lastIndex);
	}
	// get file name all explorers
	private String getFinalFileName(String file){
		String[] strs1= file.split("=");
		String s1= strs1[2];
		int lastIndex=s1.lastIndexOf("\\");
		int eqIndex=s1.lastIndexOf("\"");
		lastIndex= lastIndex ==-1 ? lastIndex=1: lastIndex+1;
		System.out.println( "getFinalFileName:  "+s1.substring(lastIndex, eqIndex));
		return s1.substring(lastIndex, eqIndex);
	}
	public static void main(String[] args) {
		String str="form-data; name=\"photo\"; filename=\"D:\\00.jpg\"";
		String[] strs1= str.split("=");
		String s1= strs1[2];
		System.out.println(s1);
		int lastIndex=s1.lastIndexOf("\\");
		System.out.println(lastIndex);
		int eqIndex=s1.lastIndexOf("\"");
		System.out.println(eqIndex);
		lastIndex= lastIndex ==-1 ? lastIndex=1: lastIndex+1;
		System.out.println(lastIndex);
		str=s1.substring(lastIndex, eqIndex);
		System.out.println(str);
	}
}
  • HelloServlet
package com.abc.web.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "HelloServlet", 
//urlPatterns = "/hello", 
initParams = {
		@WebInitParam(name = "username", value = "root"), 
		@WebInitParam(name="password", value="123456" )
		},
	value={"/hello", "/hi", "/welcome"}
)
// @WebServlet(urlPatterns="/hello")
// @WebServlet(urlPatterns="{hello,hi}")
// @WebServlet( urlPatterns="/hello","/hi")
public class HelloServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.getWriter().write("servle03: HelloServlet.java");
		resp.getWriter().write(req.getParameter("content"));
		String[] str = new String[] { "" };
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}
	@Override
	public void init() throws ServletException {
		System.out.println("init Servlet");
	}	
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println(config.getInitParameter("username"));
		super.init(config);
	}
}
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>javaweb_servlet03</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app> ```

+ ckeditor.jsp
```xml
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'ckeditor.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript" src="<%=request.getContextPath()%>/ckeditor_4.16/ckeditor.js"></script>
  </head>
  <body>
   <form action="welcome" method="post">
            <textarea name="content" id="content" rows="10" cols="80">
                This is my textarea to be replaced with CKEditor 4.
            </textarea>
            <input type="submit" value="submit"  />
            <script>
                CKEDITOR.replace( 'content' );
            </script>
        </form>
  </body>
</html>
  • index
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
<%
String image=(String)request.getAttribute("image"); 
 %>
 <!-- img src="< %=news.getPicPath() %>"/> -->
 <img src="<%=image %>"/>
  </body>
</html>
  • session
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"
import="com.abc.web.listener.SessionListener"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>My JSP 'session.jsp' starting page</title>    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0" >    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>  
  <body>
  <H4>HttpSessionListener Example</H4>
<% 
	session.setAttribute("name", "abc");
	session.invalidate();
 %>
  </body>
</html>
  • sessionAttr
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>My JSP 'sessionAttr.jsp' starting page</title>    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>  
  <body>
  <H4> HttpSessionAttributeListener Example</H4>
  <%
  	session.setAttribute("name", "abc");
  	session.setAttribute("name", "cba");
  	session.removeAttribute("name");
   %>
  </body>
</html>
  • sessionBind
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"
import="com.abc.web.listener.SessionBindListener"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>sessionBind</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
  <%
  session.setAttribute("sname", new SessionBindListener());
  //session.setAttribute("count",1); %>
Current num:
<%=session.getAttribute("count") %>
  </body>
</html>
  • upload
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>File Upload</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
<form action="upload" method="post" enctype="multipart/form-data">
<fieldset>
<legend>single file upload</legend>
<input type="file" name="photo" />
<input type="submit" value="upload" />
</fieldset>
<fieldset>
<legend>multiple file upload</legend>
<input type="file" name="photo" />
<input type="file" name="photo" />
<input type="file" name="photo" />
<input type="file" name="photo" />
<input type="submit" value="upload" />
</fieldset>
</form>
  </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值