(一)如何在servlet中显示图片
(二)分页技术
(三)用户登录系统功能改进
(一)如何在servlet中显示图片
在myWebSite下建立文件夹imgs
(二)分页技术
四个变量
int pageCount
int pageNow
int rowCount
int pageSize
测试分页效率
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- -->
<web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>login</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/login</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>wel</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.Wel</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wel</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/wel</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>logincl</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.LoginCl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logincl</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/logincl</url-pattern>
</servlet-mapping>
</web-app>
//登录界面
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
try {
//中文乱码处理
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//返回登录界面
pw.println("<html>");
pw.println("<body>");
pw.println("<img src=imgs/image2.jpg width=200><br>");
pw.println("<h>登录界面</h>");
pw.println("<form action=logincl method=post>");
pw.println("用户名:<input type=text name=username><br>");
pw.println("密码:<input type=password name=passwd><br>");
pw.println("<input type=submit value=login><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
//用户验证Servlet
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
String user="sa";
String passwd="tingwei";
String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//业务逻辑
try {
//接收用户名和密码
String u=req.getParameter("username");
String p=req.getParameter("passwd");
//连接接数据库,三部曲
Class.forName(driver);
//得到连接
ct=DriverManager.getConnection(url,user,passwd);
//创建一个Statement
sm=ct.createStatement();
String query="select top 1 *from users where usernaem='"+u+"' and passwd='"+p+"'";
rs=sm.executeQuery(query);
//验证
if(rs.next()){
//合法,跳转到wel
//将验证成功的信息写入session
HttpSession hs=req.getSession(true);
//修改session的存在时间 单位s
hs.setMaxInactiveInterval(20);
hs.setAttribute("pass", "ok");
res.sendRedirect("wel?uname="+u+"&upass="+p);
}else{
//不合法,跳转到Login
res.sendRedirect("login");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
if(rs!=null) rs.close();
if(sm!=null) sm.close();
if(ct!=null) ct.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
//欢迎界面
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Wel extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
//得到session
HttpSession hs=req.getSession();
String val=(String)hs.getAttribute("pass");
PrintWriter pw=null;
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
String user="sa";
String passwd="tingwei";
String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//判断
if(val==null)
try {
res.sendRedirect("login");
} catch (IOException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
//===分页的功能===
int pageSize=3;
int pageNow=1;//希望显示第几条记录
int rowCount=0;//共有几条记录(查表)
int pageCount=0;//共有几页(计算出来)
//动态的接收pageNow
String sPageNow=req.getParameter("pageNowOk");
if(sPageNow!=null){
//用户首次进入wel页面
pageNow=Integer.parseInt(sPageNow);
}
//得到从logincl传递的用户名
String u=req.getParameter("uname");
//得到从logincl传递的密码
String p=req.getParameter("upass");
try {
//中文乱码处理
res.setContentType("text/html;charset=gbk");
pw=res.getWriter();
pw.println("<body><center>");
pw.println("<img src=imgs/image2.jpg width=200><br>");
pw.println("welcome,hello "+u+" pass="+p);
pw.println("<br><a href=login>返回重新登录</a>");
//得到rowCount
//连接接数据库,三部曲
Class.forName(driver);
//得到连接
ct=DriverManager.getConnection(url,user,passwd);
//创建一个prepareStatement
ps=ct.prepareStatement("select count(*) from users");
rs=ps.executeQuery(); //执行得到结果
if(rs.next())
{
rowCount=rs.getInt(1);
}
//计算pageCount
if(rowCount%pageSize==0){
pageCount=rowCount/pageSize;
}else{
pageCount=rowCount/pageSize+1;
}
ps=ct.prepareStatement("select top "+pageSize+" * from users where userId not in(select top "+pageSize*(pageNow-1)+" userId from users)");
//给?赋值
rs=ps.executeQuery();
pw.println("<table border=1");
pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
while(rs.next()){
pw.println("<tr>");
pw.println("<td>"+rs.getInt(1)+"</td>");
pw.println("<td>"+rs.getString(2)+"</td>");
pw.println("<td>"+rs.getString(3)+"</td>");
pw.println("<td>"+rs.getString(4)+"</td>");
pw.println("<td>"+rs.getString(5)+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
if(pageNow!=1)
//上一页
pw.println("<a href=wel?pageNowOk="+(pageNow-1)+">上一页</a>");
//显示超链接
for(int i=pageNow;i<=pageNow+4;i++){
pw.println("<a href=wel?pageNowOk="+i+">"+i+"</a>");
}
//下一页
if(pageNow!=pageCount)
pw.println("<a href=wel?pageNowOk="+(pageNow+1)+">下一页</a>");
pw.println("</center></body>");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
需要用到的sql语句
use spdb
select * from users
select * from users where userId between 3 and 5
delete from users where userId=4
select top 3 * from users where userId not in(select top 3 userId from users)
select count(*) from users
use spdb
insert into users values
('admin','admin','admin@qq.com',1)
insert into users values
('admin','admin','admin@qq.com',1)
insert into users values
('admin','admin','admin@qq.com',1)
insert into users values
('admin','admin','admin@qq.com',1)
insert into users values
('admin','admin','admin@qq.com',1)
select *from users
--二次方指数增长记录
insert into users(usernaem,passwd,email,grade)select usernaem,passwd,email,grade from users