韩顺平servlet笔记(完整代码)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
一、前序工作 (2)
二、Classes文件写一个Hello.java (2)
写java文件 (2)
配置web.xml文件 (3)
上网验证 (4)
三、写登陆界面 (4)
写java文件 (5)
配置web.xml文件 (7)
上网验证 (7)
四、同一用户的不同页面共享数据 (8)
用sendRedirct()方法实现 (8)
用隐藏表单实现 (11)
Session (11)
五、Servlet链接数据库 (13)
建数据库的表 (13)
写java文件 (13)
放jar包 (16)
Sql注入漏洞 (16)
六、Servlet中显示图片 (18)
七、分页技术 (19)
八、cookie (24)
使用cookie保存用户名,密码,在一定时间不用重复登陆 (24)
删除cookie (29)
九、网站框架 (30)
十、ServletContext (38)
网站计数器 (39)
优化 (40)
用户ip地址 (42)
十一、界面美化 (42)
十二、tomcat配置 (59)
如何修改tomcat端口 (59)
如何设置虚拟目录 (60)
如何给tomcat的管理员设置密码 (61)
如何设置数据源和连接池 (62)
附录 (63)
Jcreator不能导入javax.servlet包问题 (63)
本文数据库数据库 (64)
本文Web.xml文件配置 (64)
一、前序工作
Tomcat安装好后
再webapps文件夹下新建mywebsite,里面包括WEB-INF,在里面是classes,lib和web.xml 文件。

Jcreator配置好jdk路径后servlet也需要导入,configure—>options—>jdkprofile,选中jdk vension,点edit—>add add achieve,选择tomcat里lib下的servlet-api,就ok了。

详细看附录。

二、Classes文件写一个Hello.java
写java文件
有三种方法:
/*使用实现servlet接口的方式开发(不全)
package com.tsinghua; //一个自定义的包
import javax.servlet.*;
import java.io.*;
import java.io.IoException;
public class Hello implements Servlet{
//该函数用于初始化servlet(类似与构造函数)
//该函数只会被调用一次
public void init(ServletConfig parml) throws ServletException {
System.out.println("init it");
}
public ServletConfig getServletConfig(){
return null;
}
//这个函数用于处理业务逻辑
//程序员应该把业务逻辑代码写这里
//这个函数当用户每访问servlet时,都会被调用
//req:用于获得客户端(浏览器)信息 res:用于向客户端(浏览器)返回信息
public void service(ServletRequest req,ServletResponse res)throws ServletException{ System.out.println("service it");
//从res中得到printWriter
PrintWriter pw=res.getWriter();
pw.println("hello,world");
}
public void destroy(){
}
}
//方法二,继承GenericServlet(不全)
package com.tsinghua;
import javax.servlet.GenericServlet;
import javax.servlet.*;
import java.io.*;
public class HelloGenen extends GenericServlet{
//重写service方法
public void service(ServletRequest req,ServletResponse res){
//返回hello,world
try{
PrintWriter pw=res.getWriter();
pw.println("hello,world,generc");
}
catch (Exception ex){
ex.printStackTrace();
}
}
}
*/
//方法三,继承HttpServlet开发
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Hello extends HttpServlet{
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
try
{
PrintWriter pw = res.getWriter();
pw.println("hello http");
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
配置web.xml文件
这个web.xml文件可以从旁边文件夹里拷来,主要改写的部分如下
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.tsinghua.Hello</servlet-class>
</servlet>
<!-- Define the Manager Servlet Mapping -->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
上网验证
先打开apache-tomcat-8.5.8\bin下的startup.bat,然后登陆下面地址,看manager里有没有mywebsite,若runing是true则ok
再登陆下面地址看看是否成功
显示了hello,成功了
三、写登陆界面
写java 文件
登陆界面包含三个java 文件,用sendRedirect 进行跳转,其中还包括了html 语言,表单知识,详细看下面
Login.java
/**
* @(#)Login.java * *
* @author
* @version 1.00 2017/2/10 */
//登陆界面
package com.tsinghua;
import javax.servlet.http.*; import java.io.*;
public class Login extends HttpServlet{
public Login() { }
//处理get 请求
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("<h1>登陆界面</h1>");
pw.println("<form action=logincl method=post>");
pw.println("用户名:<input type=text name=usrname><br>"); pw.println("密码:<input type=password name=passwd><br>"); pw.println("<input type=submit value=loging><br>"); pw.println("</form>"); pw.println("</body>"); pw.println("</html>"); }
catch (Exception ex){ ex.printStackTrace(); } }
public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res); } }
LoginCl.java
/**
* @(#)Login.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//验证(登陆处理)
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class LoginCl extends HttpServlet{
public LoginCl() {
}
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑
try
{
//接受用户名和密码
String u=req.getParameter("usrname");
String p=req.getParameter("passwd");
//验证
if(u.equals("sp")&&p.equals("123")){
//合法
//跳转(welcome)
res.sendRedirect("welcome");
}else{
//不合法
//跳转(回原界面)
res.sendRedirect("login");//写url
}
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res);
}
}
Welcome.java
/**
* @(#)Welcome.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//欢迎界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Welcome extends HttpServlet{
public Welcome() {
}
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑
try
{
//输出weclcome
PrintWriter pw=res.getWriter();
pw.println("welcome");
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
配置web.xml文件
再之前的web.xml文件里增加如下
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.tsinghua.Login</servlet-class>
</servlet>
<!-- Define the Manager Servlet Mapping -->
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>logincl</servlet-name>
<servlet-class>com.tsinghua.LoginCl</servlet-class>
</servlet>
<!-- Define the Manager Servlet Mapping -->
<servlet-mapping>
<servlet-name>logincl</servlet-name>
<url-pattern>/logincl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>com.tsinghua.Welcome</servlet-class>
</servlet>
<!-- Define the Manager Servlet Mapping -->
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
上网验证
登陆下面地址,看manager里有没有mywebsite,若runing是true则ok
四、同一用户的不同页面共享数据用sendRedirct()方法实现
实现在welcome界面显示登录用户的姓名
以上三个java文件中LoginCl和Welcome文件进行修改LoginCl.java
Welcome
实现在welcome界面显示登录用户的姓名和密码
以上三个java文件中LoginCl和Welcome文件进行修改LoginCl
Welcome
结果图:
隐藏数据:

用隐藏表单实现
Session
Session:浏览器访问服务器时,服务器内存为浏览器分配的空间。

名字String值Object
用session防止用户非法登陆到某个页面,这里防止直接登陆欢迎界面
以上三个java文件中LoginCl和Welcome文件进行修改
LoginCl
Welcome
网页:
输入welcome重新跳回登入界面
正确输入后:
五、Servlet链接数据库建数据库的表
写java文件
Login
/**
* @(#)Login.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//登陆界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
public Login() {
}
//处理get请求
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("<h1>登陆界面</h1>");
pw.println("<form action=logincl method=post>");
pw.println("用户名:<input type=text name=usrname><br>");
pw.println("密码:<input type=password name=password><br>");
pw.println("<input type=submit value=login in><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
LoginCl
/**
* @(#)Login.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//验证(登陆处理)
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{
public LoginCl() {
}
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
try
{
//接受用户名和密码
String u=req.getParameter("usrname");
String p=req.getParameter("password");
//链接数据库,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//得到链接
ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/xcdb?useUnicode=true&charac terEncoding=gbk","root","gu123");
//创建Statement
sm=ct.createStatement();
rs=sm.executeQuery("select * from user where username='"+u+"' and password='"+p+"'");
//验证
if(rs.next()){
//合法
//将验证成功的信息,写入session
//1表示得到session
HttpSession hs=req.getSession(true);
//修改session 的存在时间,设为20秒
hs.setMaxInactiveInterval(20);
//把信息放session
hs.setAttribute("pass","ok");
//跳转(welcome)
res.sendRedirect("welcome?uname="+u+"&upassword="+p);
}else{
//不合法
//跳转(回原界面)
res.sendRedirect("login");//写url
}
}
catch (Exception ex){
ex.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
}
if(sm!=null){
sm.close();
}
if(ct!=null){
ct.close();
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res);
}
}
Welcome
/**
* @(#)Welcome.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//欢迎界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Welcome extends HttpServlet{
public Welcome() {
}
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
try
{
//得到session
HttpSession hs=req.getSession(true);
String val=(String)hs.getAttribute("pass");
//判断是否非法登陆
if(val==null){
try{
//非法登陆
res.sendRedirect("login");
}catch (Exception ex){
ex.printStackTrace();
}
}
else{
//得到从Logincl传递的用户名
String un=req.getParameter("uname");
//得到从LoginCl中传递的密码
String up=req.getParameter("upassword");
//输出weclcome
PrintWriter pw=res.getWriter();
pw.println("welcome name="+un+" password="+up); }
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
放jar包
将mysql-connector-java-5.1.39-bin放到mywebsite里的WEB-INF下的lib文件夹里结果展示:
Sql注入漏洞
当密码输入bnb' or 1='1类型时无论什么用户都可以登陆
解决方法:
改写LoginCl文件
/**
* @(#)Login.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//验证(登陆处理)
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{
public LoginCl() {
}
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
try
{
//接受用户名和密码
String u=req.getParameter("usrname");
String p=req.getParameter("password");
//链接数据库,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//得到链接
ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/xcdb?useUnicode=true&charac terEncoding=gbk","root","gu123");
//创建Statement
sm=ct.createStatement();
rs=sm.executeQuery("select password from user where username='"+u+"'");
if(rs.next()){
//说明用户存在
String dbPassword=rs.getString(1);
if(dbPassword.equals(p)){
//真的合法
//将验证成功的信息,写入session
//1表示得到session
HttpSession hs=req.getSession(true);
//修改session 的存在时间,设为20秒
hs.setMaxInactiveInterval(20);
//把信息放session
hs.setAttribute("pass","ok");
//跳转(welcome)
res.sendRedirect("welcome?uname="+u+"&upassword="+p);
}else{
//说明用户不合法
//跳转
res.sendRedirect("login");
}
}else{
//说明用户不存在
//跳转
res.sendRedirect("login");
}
}
catch (Exception ex){
ex.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
}
if(sm!=null){
sm.close();
}
if(ct!=null){
ct.close();
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
这样就可以防止sql注入漏洞了
六、Servlet中显示图片
Mywebsite下建一个文件夹imgs放图片
在welcome.java下增加图片的html语句即可
七、分页技术
知识点很多,特别是跳转方面
主要更改的是Welcome文件
/**
* @(#)Welcome.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//欢迎界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class Welcome extends HttpServlet{
public Welcome() {
}
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
//业务逻辑
try
{
//得到session
HttpSession hs=req.getSession(true);
String val=(String)hs.getAttribute("pass");
//判断是否非法登陆
if(val==null){
try{
//非法登陆
res.sendRedirect("login");
}catch (Exception ex){
ex.printStackTrace();
}
}
else{
//得到从Logincl传递的用户名
String un=req.getParameter("uname");
//得到从LoginCl中传递的密码
String up=req.getParameter("upassword");
//输出weclcome
//中文乱码解决方法
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
pw.println("welcome name="+un+" password="+up);
//===========分页=============
int pageSize=3;//一页显示多少记录
int pageNow=1;//希望显示第几页,即页码
int rowCount=0;//共有几条记录(查表)
int pageCount=0;//共有几页(计算出来的)
int start=0;//开始第几条
//动态接受pageNow
String sPageNow=req.getParameter("pageNow");
if (sPageNow==null){
//用户第一次进入wel
}else{
pageNow=Integer.parseInt(sPageNow);
}
//首先得到rowCount
//链接数据库,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//得到链接
ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/xcdb?useUnicode=true&charac terEncoding=gbk","root","gu123");
ps=ct.prepareStatement("select count(*) from user");
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 * from user limit 3,3");
start=(pageNow-1)*pageSize;
ps=ct.prepareStatement("select * from user limit "+start+","+pageSize+"");
rs=ps.executeQuery();
pw.println("start="+start);
//表头
pw.println("<table border=1");
pw.println("<tr><th>id</th><th>name</th><th>password</th><th>mail</th><th>grade</th></t r>");
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.getInt(5)+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
//显示超链接
for(int i=1;i<=pageCount;i++){
pw.println("<a href=welcome?pageNow="+i+">"+i+"</a>");
}
//在servlet中显示图片
pw.println("<br><img src=imgs/p1.jpg><br>");}
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
增加上一页下一页
/**
* @(#)Welcome.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//欢迎界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class Welcome extends HttpServlet{
public Welcome() {
}
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
//业务逻辑
try
{
//得到session
HttpSession hs=req.getSession(true);
String val=(String)hs.getAttribute("pass");
//判断是否非法登陆
if(val==null){
try{
//非法登陆
res.sendRedirect("login");
}catch (Exception ex){
ex.printStackTrace();
}
}
else{
//得到从Logincl传递的用户名
String un=req.getParameter("uname");
//得到从LoginCl中传递的密码
String up=req.getParameter("upassword");
//输出weclcome
//中文乱码解决方法
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
pw.println("<body><center>");
pw.println("welcome name="+un+" password="+up+"<br>");
//===========分页=============
int pageSize=3;//一页显示多少记录
int pageNow=1;//希望显示第几页,即页码
int rowCount=0;//共有几条记录(查表)
int pageCount=0;//共有几页(计算出来的)
int start=0;//开始第几条
//动态接受pageNow
String sPageNow=req.getParameter("pageNow");
if (sPageNow==null){
//用户第一次进入wel
}else{
pageNow=Integer.parseInt(sPageNow);
}
//首先得到rowCount
//链接数据库,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//得到链接
ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/xcdb?useUnicode=true&charac terEncoding=gbk","root","gu123");
ps=ct.prepareStatement("select count(*) from user");
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 * from user limit 3,3");
start=(pageNow-1)*pageSize;
ps=ct.prepareStatement("select * from user limit "+start+","+pageSize+"");
rs=ps.executeQuery();
pw.println("start="+start);
//表头
pw.println("<table border=1");
pw.println("<tr><th>id</th><th>name</th><th>password</th><th>mail</th><th>grade</th></t r>");
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.getInt(5)+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
//显示上一页
if(pageNow!=1)
pw.println("<a href=welcome?pageNow="+(pageNow-1)+">上一页</a>");
//显示超链接()
for(int i=1;i<=pageCount;i++){
pw.println("<a href=welcome?pageNow="+i+">"+i+"</a>");
}
//显示下一页
if(pageNow!=pageCount)
pw.println("<a href=welcome?pageNow="+(pageNow+1)+">下一页</a>");
//在servlet中显示图片
pw.println("<br><img src=imgs/p1.jpg><br>");
pw.println("</body></center>");}
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
结果图:
八、cookie
Cookie:客户端保存的类似用户名之类的信息
使用cookie保存用户名,密码,在一定时间不用重复登陆Login
/**
* @(#)Login.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//登陆界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
public Login() {
}
//处理get请求
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("<h1>登陆界面</h1>");
pw.println("<form action=logincl method=post>");
pw.println("用户名:<input type=text name=usrname><br>");
pw.println("密码:<input type=password name=password><br>");
pw.println("<input type=checkbox name=keep value=2>两周内不在重新登录<br>");
pw.println("<input type=submit value=login in><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
}
catch (Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
LoginCl
/**
* @(#)Login.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//验证(登陆处理)
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
try
{
//接受用户名和密码
String u=req.getParameter("username");
String p=req.getParameter("password");
//链接数据库,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//得到链接
ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/xcdb?useUnicode=true&charac terEncoding=gbk","root","gu123");
//创建Statement
sm=ct.createStatement();
rs=sm.executeQuery("select password from user where username='"+u+"'");
if(rs.next()){
//说明用户存在
String dbPassword=rs.getString(1);
if(dbPassword.equals(p)){
//真的合法
String keep=req.getParameter("keep");
if(keep!=null){
//将用户名和密码保存在客户端(cookie)
//创建cookie
Cookie name=new Cookie("myname",u);
Cookie pass=new Cookie("mypass",p);
//设置时间
name.setMaxAge(14*24*3600);
pass.setMaxAge(14*24*3600);
//回写到客户端
res.addCookie(name);
res.addCookie(pass);
}
//将验证成功的信息,写入session
//1表示得到session
HttpSession hs=req.getSession(true);
//修改session 的存在时间,设为20秒
hs.setMaxInactiveInterval(20);
//把信息放session
hs.setAttribute("pass","ok");
//跳转(welcome)
res.sendRedirect("welcome?uname="+u+"&upassword="+p);
}else{
//说明用户不合法
//跳转
res.sendRedirect("login");
}
}else{
//说明用户不存在
//跳转
res.sendRedirect("login");
}
}
catch (Exception ex){
ex.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
}
if(sm!=null){
sm.close();
}
if(ct!=null){
ct.close();
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res);
}
}
Welcome
/**
* @(#)Welcome.java
*
*
* @author
* @version 1.00 2017/2/10
*/
//欢迎界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class Welcome extends HttpServlet{
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
//业务逻辑
try
{
//得到session
HttpSession hs=req.getSession(true);
String val=(String)hs.getAttribute("pass");
String name="";
String passwd="";
//判断是否非法登陆
if(val==null){
try{
//如果session中没有用户信息,再看看cookie中有没有用户信息
//从客户端得到所有cookie信息
Cookie[] allCookies=req.getCookies();
int i=0;
//如果allCookie不为空
if(allCookies!=null){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
//依次取出
Cookie temp=allCookies[i];
if(temp.getName().equals("myname")){
//得到cookie的值
name=temp.getValue();
}
else if(temp.getName().equals("mypass")){
passwd=temp.getValue();
}
}
if(!name.equals("")&&!passwd.equals("")){
//到LoginCl去验证
res.sendRedirect("logincl?username="+name+"&password="+passwd);
return;
}else{
//非法登陆
res.sendRedirect("login");
}
}else{
//非法登陆
res.sendRedirect("login");
}
}catch (Exception ex){
ex.printStackTrace();
}
}
else{
//得到从Logincl传递的用户名
String un=req.getParameter("uname");
//得到从LoginCl中传递的密码
String up=req.getParameter("upassword");
//输出weclcome
//中文乱码解决方法
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
pw.println("<body><center>");
pw.println("welcome name="+un+" password="+up+"<br>");
//===========分页=============
int pageSize=3;//一页显示多少记录
int pageNow=1;//希望显示第几页,即页码
int rowCount=0;//共有几条记录(查表)
int pageCount=0;//共有几页(计算出来的)
int start=0;//开始第几条
//动态接受pageNow
String sPageNow=req.getParameter("pageNow");
if (sPageNow==null){
//用户第一次进入wel
}else{
pageNow=Integer.parseInt(sPageNow);
}
//首先得到rowCount
//链接数据库,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//得到链接
ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/xcdb?useUnicode=true&charac terEncoding=gbk","root","gu123");
ps=ct.prepareStatement("select count(*) from user");
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 * from user limit 3,3");
start=(pageNow-1)*pageSize;
ps=ct.prepareStatement("select * from user limit "+start+","+pageSize+"");
rs=ps.executeQuery();
pw.println("start="+start);
//表头
pw.println("<table border=1");
pw.println("<tr><th>id</th><th>name</th><th>password</th><th>mail</th><th>grade</th></t r>");
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.getInt(5)+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
//显示上一页
if(pageNow!=1)
pw.println("<a href=welcome?pageNow="+(pageNow-1)+">上一页</a>");
//显示超链接()
for(int i=1;i<=pageCount;i++){
pw.println("<a href=welcome?pageNow="+i+">"+i+"</a>");。

相关文档
最新文档