Servlet教程第4讲笔记

(一)如何在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
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值