韩顺平servlet笔记完整代码.docx
《韩顺平servlet笔记完整代码.docx》由会员分享,可在线阅读,更多相关《韩顺平servlet笔记完整代码.docx(117页珍藏版)》请在冰豆网上搜索。
韩顺平servlet笔记完整代码
一、前序工作2
二、Classes文件写一个Hello.java2
写java文件2
配置web.xml文件3
上网验证4
三、写登陆界面4
写java文件5
配置web.xml文件7
上网验证7
四、同一用户的不同页面共享数据8
用sendRedirct()方法实现8
用隐藏表单实现11
Session11
五、Servlet链接数据库13
建数据库的表13
写java文件13
放jar包16
Sql注入漏洞16
六、Servlet中显示图片18
七、分页技术19
八、cookie24
使用cookie保存用户名,密码,在一定时间不用重复登陆24
删除cookie29
九、网站框架30
十、ServletContext38
网站计数器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,选中jdkvension,点edit—>addaddachieve,选择tomcat里lib下的servlet-api,就ok了。
详细看附录。
二、Classes文件写一个Hello.java
写java文件
有三种方法:
/*使用实现servlet接口的方式开发(不全)
packagecom.tsinghua;//一个自定义的包
importjavax.servlet.*;
importjava.io.*;
importjava.io.IoException;
publicclassHelloimplementsServlet{
//该函数用于初始化servlet(类似与构造函数)
//该函数只会被调用一次
publicvoidinit(ServletConfigparml)throwsServletException{
System.out.println("initit");
}
publicServletConfiggetServletConfig(){
returnnull;
}
//这个函数用于处理业务逻辑
//程序员应该把业务逻辑代码写这里
//这个函数当用户每访问servlet时,都会被调用
//req:
用于获得客户端(浏览器)信息res:
用于向客户端(浏览器)返回信息
publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException{
System.out.println("serviceit");
//从res中得到printWriter
PrintWriterpw=res.getWriter();
pw.println("hello,world");
}
publicvoiddestroy(){
}
}
//方法二,继承GenericServlet(不全)
packagecom.tsinghua;
importjavax.servlet.GenericServlet;
importjavax.servlet.*;
importjava.io.*;
publicclassHelloGenenextendsGenericServlet{
//重写service方法
publicvoidservice(ServletRequestreq,ServletResponseres){
//返回hello,world
try{
PrintWriterpw=res.getWriter();
pw.println("hello,world,generc");
}
catch(Exceptionex){
ex.printStackTrace();
}
}
}
*/
//方法三,继承HttpServlet开发
packagecom.tsinghua;
importjavax.servlet.http.*;
importjava.io.*;
publicclassHelloextendsHttpServlet{
//处理get请求
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
//业务逻辑
try
{
PrintWriterpw=res.getWriter();
pw.println("hellohttp");
}
catch(Exceptionex){
ex.printStackTrace();
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
配置web.xml文件
这个web.xml文件可以从旁边文件夹里拷来,主要改写的部分如下
hello
com.tsinghua.Hello
--DefinetheManagerServletMapping-->
hello
/hello
上网验证
先打开apache-tomcat-8.5.8\bin下的startup.bat,然后登陆下面地址,看manager里有没有mywebsite,若runing是true则ok
再登陆下面地址看看是否成功
显示了hello,成功了
三、写登陆界面
Login.java登陆界面
Welcome欢迎界面
LoginCl验证用户
写java文件
登陆界面包含三个java文件,用sendRedirect进行跳转,其中还包括了html语言,表单知识,详细看下面
Login.java
/**
*@(#)Login.java
*
*
*@author
*@version1.002017/2/10
*/
//登陆界面
packagecom.tsinghua;
importjavax.servlet.http.*;
importjava.io.*;
publicclassLoginextendsHttpServlet{
publicLogin(){
}
//处理get请求
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
//业务逻辑
try
{
//中文乱码解决方法
res.setContentType("text/html;charset=gbk");
PrintWriterpw=res.getWriter();
//返回登陆界面
pw.println("");
pw.println("
");
pw.println("
登陆界面
");
pw.println("");
pw.println("用户名:
");
pw.println("密码:
");
pw.println("
");
pw.println("");
pw.println("");
pw.println("");
}
catch(Exceptionex){
ex.printStackTrace();
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
LoginCl.java
/**
*@(#)Login.java
*
*
*@author
*@version1.002017/2/10
*/
//验证(登陆处理)
packagecom.tsinghua;
importjavax.servlet.http.*;
importjava.io.*;
publicclassLoginClextendsHttpServlet{
publicLoginCl(){
}
//处理get请求
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
//业务逻辑
try
{
//接受用户名和密码
Stringu=req.getParameter("usrname");
Stringp=req.getParameter("passwd");
//验证
if(u.equals("sp")&&p.equals("123")){
//合法
//跳转(welcome)
res.sendRedirect("welcome");
}else{
//不合法
//跳转(回原界面)
res.sendRedirect("login");//写url
}
}
catch(Exceptionex){
ex.printStackTrace();
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
Welcome.java
/**
*@(#)Welcome.java
*
*
*@author
*@version1.002017/2/10
*/
//欢迎界面
packagecom.tsinghua;
importjavax.servlet.http.*;
importjava.io.*;
publicclassWelcomeextendsHttpServlet{
publicWelcome(){
}
//处理get请求
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
//业务逻辑
try
{
//输出weclcome
PrintWriterpw=res.getWriter();
pw.println("welcome");
}
catch(Exceptionex){
ex.printStackTrace();
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
配置web.xml文件
再之前的web.xml文件里增加如下
login
com.tsinghua.Login
--DefinetheManagerServletMapping-->
login
/login
logincl
com.tsinghua.LoginCl
--DefinetheManagerServletMapping-->
logincl
/logincl
welcome
com.tsinghua.Welcome
--DefinetheManagerServletMapping-->
welcome
/welcome
上网验证
登陆下面地址,看manager里有没有mywebsite,若runing是true则ok
四、同一用户的不同页面共享数据
用sendRedirct()方法实现
实现在welcome界面显示登录用户的姓名
以上三个java文件中LoginCl和Welcome文件进行修改
LoginCl.java
Welcome
实现在welcome界面显示登录用户的姓名和密码
以上三个java文件中LoginCl和Welcome文件进行修改
LoginCl
Welcome
结果图:
隐藏数据:
、
用隐藏表单实现
Session
Session:
浏览器访问服务器时,服务器内存为浏览器分配的空间。
Session
名字String
值Object
用session防止用户非法登陆到某个页面,这里防止直接登陆欢迎界面
以上三个java文件中LoginCl和Welcome文件进行修改
LoginCl
Welcome
网页:
输入welcome重新跳回登入界面
正确输入后:
五、Servlet链接数据库
建数据库的表
写java文件
Login
/**
*@(#)Login.java
*
*
*@author
*@version1.002017/2/10
*/
//登陆界面
packagecom.tsinghua;
importjavax.servlet.http.*;
importjava.io.*;
publicclassLoginextendsHttpServlet{
publicLogin(){
}
//处理get请求
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
//业务逻辑
try
{
//中文乱码解决方法
res.setContentType("text/html;charset=gbk");
PrintWriterpw=res.getWriter();
//返回登陆界面
pw.println("");
pw.println("
");
pw.println("
登陆界面
");
pw.println("");
pw.println("用户名:
");
pw.println("密码:
");
pw.println("
");
pw.println("");
pw.println("");
pw.println("");
}
catch(Exceptionex){
ex.printStackTrace();
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
LoginCl
/**
*@(#)Login.java
*
*
*@author
*@version1.002017/2/10
*/
//验证(登陆处理)
packagecom.tsinghua;
importjavax.servlet.http.*;
importjava.io.*;
importjava.sql.*;
publicclassLoginClextendsHttpServlet{
publicLoginCl(){
}
//处理get请求
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
//业务逻辑
Connectionct=null;
Statementsm=null;
ResultSetrs=null;
try
{
//接受用户名和密码
Stringu=req.getParameter("usrname");
Stringp=req.getParameter("password");
//链接数据库,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//得到链接
ct=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/xcdb?
useUnicode=true&characterEncoding=gbk","root","gu123");
//创建Statement
sm=ct.createStatement();
rs=sm.executeQuery("select*fromuserwhereusername='"+u+"'andpassword='"+p+"'");
//验证
if(rs.next()){
//合法
//将验证成功的信息,写入session
//1表示得到session
HttpSessionhs=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(Exceptionex){
ex.printStackTrace();
}finally{
try{
if(rs!
=null){
rs.close();
}
if(sm!
=null){
sm.close();
}
if(ct!
=null){
ct.close();
}
}
catch(Exceptionex){
ex.printStackTrace();
}
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
Welcome
/**
*@(#)Welcome.java
*
*
*@author
*@version1.002017/2/10
*/
//欢迎界面
packagecom.tsinghua;
importjavax.servlet.http.*;
importjava.io.*;
publicclassWelcomeextendsHttpServlet{
publicWelcome(){
}
//处理get请求
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
//业务逻辑
try
{
//得到session
HttpSessionhs=req.getSession(true);
Stringval=(String)hs.getAttribute("pass");
//判断是否非法登陆
if(val==null){
try{
//非法登陆
res.sendRedirect("login");
}catch(Exceptionex){
ex.printStackTrace();
}