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
-
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
-
- import jar package: mysql-connector-java-5.1.20-bin.jar
-
- add drive: Class.forName(“com.mysql.jdbc.Driver”);
-
- Get Connectio package: <%@page import=“java.sql.Connection”%>
-
PreparedStatement: executeUpdate()
-
- SQL: String sql ="select * from user where name= “+name+” and password=“pwd” or 1=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
-
- Import & configure
-
- edit jdbc.properties file
-
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.
-
- 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
- Add driver
Class.forName(ConfigUtil.getValue(“driver”=“com.mysql.jdbc.Driver”)); - create sql connector
Connection conn = DriverManager.getConnection(url, uname, pwd=“jdbc:mysql://localhost:3306/myschool”,“root”,“111111”); - manipulate database
- Statement st=conn.createStatement();
- PreparedStatement ps = conn.prepareStatement(sql =“insert into student (studentNo) values(?);”);
give ? values ps.setString(1, stuNo);
- 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”);
- ResultSet rs=st.executeQuery(sql);
- close connections
ps.close(); conn.close(); rs.close(); - 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>
- JNDI : Java Naming and Directory Interface
-
- Edit Dao (data access object)
-
- Run as Server Application
- Run as Server Application
- context.xml
<?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 © 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>
<%=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
-
- get Values
- use { " [ ] " } for when words have %, - or other special characters, ie: ${header[“accept-language”]
-
- Calculations
- < input type=“radio” name=“gender” ${gender= =0 ? “checked”:"" }/>woman
< input type=“radio” name=“gender” ${gender= =1 ? “checked”:"" }/>man -
- get Object (“Model”/Request/Session) value:
- get from JSP page: pageContext, request, session, application
- ${requestScope.username}; $ {sessionScope.username}, if cannot find data, return “” empty
-
- use Java method
- 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
-
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
-
- 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 -
- create java file with SimpleTagSupport inherited (javax.servlet.jsp.tagext) API JavaEE
-
- reWrite doTag() method
- 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
-
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
-
" " ;
-
  ;
-
< < ;
-
> ;
-
< 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
-
- 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){…}
-
- 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):
-
- create MyRequest extends HttpServletRequestWrapper{} method
-
- create variable : private HttpServletRequest request; create method: public MyRequest(HttpServletRequest request)
-
- 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;
}
-
- 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(">");
break;
case'<':
result.append("<");
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+=">";}
else if (c=='<'){result+="<";}
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
-
- 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
- Single steps:
-
- 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);
- Multiple upload steps:
-
Mysql: Navcat
-
Navicat error: can’t connect to mysql server on ‘localhost’
-
Use following steps:
- Open cmd with Admin
- D:\Program Files\mysql\bin>mysqld -install
The service already exists! - D:\Program Files\mysql\bin>net start mysql
- D:\Program Files\mysql\bin>mysql -u root -p
Enter password: *****
Welcome to the MySQL monitor. - retry Navicat
-
AWT: Frame frame = new Frame();
frame.addWindowListener(new WindowListener()
-
Filters:
- request and response filter
- request checks and recording
- clean data, replacing items in data
- 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
-
< script type=“text/javascript” src="/ckeditor_4.16/ckeditor.js">
-
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>