版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录一、前序工作2二、Classes文件写一个Hello.java2写java文件2配置web.xml文件3上网验证4三、写登陆界面4写java文件5配置web.xml文件7上网验证7四、同一用户的不同页面共享数据8用sendRedirct()方法实现8用隐藏表单实现11Session11五、Servlet链接数据库13建数据库的表13写java文件13放jar包16Sql注入漏洞16六、Servlet中显示图片18七、分页技术19八、cookie24使用cookie保存用户名,密码,在一定时间不用重复登陆24删除cookie29九、网站框架30十、ServletContext38网站计数器3
2、9优化40用户ip地址42十一、界面美化42十二、tomcat配置59如何修改tomcat端口59如何设置虚拟目录60如何给tomcat的管理员设置密码61如何设置数据源和连接池62附录63Jcreator不能导入javax.servlet包问题63本文数据库数据库64本文Web.xml文件配置64一、前序工作Tomcat安装好后再webapps文件夹下新建mywebsite,里面包括WEB-INF,在里面是classes,lib和web.xml文件。Jcreator配置好jdk路径后servlet也需要导入,configure>options>jdkprofile,选中jdk v
3、ension,点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(类似与构造函数) /该函数
4、只会被调用一次 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,
5、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.servle
6、t.*;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
7、开发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();
8、 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 S
9、ervlet Mapping -> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>上网验证先打开apache-tomcat-8.5.8bin下的startup.bat,然后登陆下面地址,看manager里有没有mywebsite,若runing是true则ok再登陆下面地址看看是否成功显示了hello,成功了三、写登陆界面Login.java登陆界面Wel
10、come欢迎界面LoginCl验证用户写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 doGe
11、t(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.pri
12、ntln("<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(&q
13、uot;</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
14、/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.getPar
15、ameter("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,Ht
16、tpServletResponse 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,HttpS
17、ervletResponse 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&
18、gt;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> &
19、lt;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</ur
20、l-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-nam
21、e> <url-pattern>/welcome</url-pattern> </servlet-mapping>上网验证登陆下面地址,看manager里有没有mywebsite,若runing是true则ok四、同一用户的不同页面共享数据用sendRedirct()方法实现实现在welcome界面显示登录用户的姓名以上三个java文件中LoginCl和Welcome文件进行修改LoginCl.javaWelcome实现在welcome界面显示登录用户的姓名和密码以上三个java文件中LoginCl和Welcome文件进行修改LoginClWelcom
22、e结果图:隐藏数据:、用隐藏表单实现SessionSession:浏览器访问服务器时,服务器内存为浏览器分配的空间。Session名字String值Object用session防止用户非法登陆到某个页面,这里防止直接登陆欢迎界面以上三个java文件中LoginCl和Welcome文件进行修改LoginClWelcome网页:输入welcome重新跳回登入界面正确输入后:五、Servlet链接数据库建数据库的表写java文件Login/* * (#)Login.java * * * author * version 1.00 2017/2/10 */登陆界面package com.tsinghu
23、a;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.prin
24、tln("<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=pass
25、word 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(Http
26、ServletRequest 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 voi
27、d 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"); /得到链接 c
28、t=DriverManager.getConnection("jdbc:mysql:/localhost:3306/xcdb?useUnicode=true&characterEncoding=gbk","root","gu123"); /创建Statement sm=ct.createStatement(); rs=sm.executeQuery("select * from user where username='"+u+"' and password='"
29、+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+"&am
30、p;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,H
31、ttpServletResponse 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,HttpServl
32、etResponse 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("una
33、me"); /得到从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
34、) this.doGet(req,res); 放jar包将放到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 ext
35、ends 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"); /链接数据库,加载驱动 Clas
36、s.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 password from user where
37、 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"
38、,"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(); i
39、f(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文件/* * (#)
40、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;
41、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
42、 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 pag
43、eSize=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(
44、"com.mysql.jdbc.Driver"); /得到链接 ct=DriverManager.getConnection("jdbc:mysql:/localhost:3306/xcdb?useUnicode=true&characterEncoding=gbk","root","gu123"); ps=ct.prepareStatement("select count(*) from user"); rs=ps.executeQuery(); if(rs.next() rowCou
45、nt=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+","+page
46、Size+""); 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></tr>"
47、); 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("<
48、;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+&q
49、uot;>"+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,HttpServle
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年武汉市七一中学招聘教师备考题库参考答案详解
- 2026年红古区红古镇卫生院招聘护理专业技术人员的备考题库及一套答案详解
- 2026年河源市连平县人民代表大会常务委员会办公室公开招聘编外人员备考题库附答案详解
- 富阎高新初级中学教师招聘(2026年应届毕业生)备考题库及一套答案详解
- 中国医科大学及附属第一医院2026年公开招聘高层次和急需紧缺人才备考题库(第二批)含答案详解
- 北京大学2026年度应届毕业生公开招聘备考题库(一)及一套参考答案详解
- 企业财务管理信息系统实施指南
- 2025年大学增强现实技术(增强现实技术)试题及答案
- 2025年高职护理(无菌技术操作)试题及答案
- 2025年中职自然保护区建设与管理(管护基础技能)试题及答案
- 《车辆越野能力分级与评价体系》征求意见稿
- 小儿运动发育迟缓课件
- 非煤矿山机电安全培训课件
- 会计师事务所审计失败原因及对策研究
- 安全员合署办公制度培训课件
- 基于PLC的S7-1200电机控制系统设计
- 多主体协同决策模型-洞察及研究
- 预应力连续梁挂篮施工工艺创新与质量控制研究
- 混凝土搅拌与运输方案
- 2025年潍坊市中考数学试题卷(含标准答案)
- 助学贷款知识普及培训会课件
评论
0/150
提交评论