1、
2、开发servlet三种方法
1.实现servlet接口
2.继承GenerieServlet
3.继承HttpServlet
3、servlet开发流程
1)在tomcat中webapps中建一个文件夹(myWebsign) -> WEB-INF -> classes(放servlet的) lib(放jar包的)web.xml文件
2)引入jar包 servlet-api.jar
package com.tsinghua;实现servlet接口
import javax.servlet.*;
import java.io.*;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class Hello implement Servlet{
//该函数用于初始化servlet(类似于类的构造函数)
//该函数只会被调用一次(当用户第一次访问该servlet时被调用)
public void init(ServletConfig parml) throws ServletException{
}
//得到servlet配置文件
public ServletConfig getServletConfig(){
}
//这个函数用于处理业务逻辑
//程序员应当把业务逻辑代码写在这里
//当用户每访问servlet时,都会调用
//req:用于获得客户端(浏览器)信息
//res:用于向客户端返回信息
public void service(ServletRequest req,ServletRespinse res) throws {
PrintWriter pw = res.getWriter();
pw.println("hello,world");
}
public String getServletInfo(){
}
//销毁servlet实例(释放内存)
//1.reload 该servlet(webApps) 2.关闭tomcat 3.关机
public void destory(){
}
}
3)部署servlet 在web.xml文件中加代码
<servlet>
<!--给你的servlet取名,任意的-->
<servlet-name>hello</servlet-name>
<!--指明servlet的路径,(包名+类名)-->
<servlet-class>com.tsinghua.Hello</servlet-class>
</servlet>
<servlet-mapping>
<!--给你的servlet取名,任意的,与上对应-->
<servlet-name>hello</servlet-name>
<!--这是在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/sp</url-pattern>
</servlet-mapping>
4)启动Tomcat 访问你的servlet
在浏览器中输入:http:127.0.0.1:8080/myWebsign/sp 回车
4、servlet的生命周期
1)封装servlet由相应的容器来完成
2)创建一个Servlet实例
3)调用servlet的init()方法,该方法只会在第一次访问servlet时被调用一次
4)服务,调用servlet的service()方法,一般业务逻辑在这里了处理。该方法在访问servlet时都会被调用
5)销毁 调用servlet的destory()方法,销毁该servlet实例 该方法在一下情况被调用
1.reload 该servlet(webApps) 2.关闭tomcat 3.关机
5.这是第二种开发servlet的方法(继承GenericServlet开发)
package com.tsinghua;
import javax.servlet.GenericServlet;
import java.io.*;
public class HelloGen extends GenericServlet{
//重写service方法即可
public void service(ServletRequest req,ServletResponse){
//返回hello.world! generic
try{
printwriter pw = res.getwriter();
pw.println("hello,world!generic");
}catch(Exception e){
e.printStackTrace();
}
}
}
6.通过继承HttpServlet开发servlet
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class HelloHttp extends HttpServlet{
//处理get请求
//req:用于获得客户端(浏览器)信息
//res:用于向客户端返回信息
public void doGet(HttpServletRequest req,httpServletResponse res){
try{
printwriter pw = res.getwriter();
pw.println("hello,world!generic");
}catch(Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,httpServletResponse res){
this.doGet(req,res);
}
}
7、用户登录网站
登录界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
//处理get请求
//req:用于获得客户端(浏览器)信息
//res:用于向客户端返回信息
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>");//url 进入logincl方法
pw.println("用户名:<input type = text name = username><br>");
pw.println("密码:<input type = password name = pwd><br>");
pw.println("<input type=checkbox name=keep value=2>两周内不再重新登录");
cookie pw.println("<input type = submit value = loing><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
}catch(Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,httpServletResponse res){
this.doGet(req,res);
}
}
//用户验证servlet
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class LoginCl extends HttpServlet{
//处理get请求
//req:用于获得客户端(浏览器)信息
//res:用于向客户端返回信息
public void doGet(HttpServletRequest req,httpServletResponse res){
//业务逻辑
Connection ct =null;
Statement sm = null;
ResultSet rs null;
try{
//中文乱码
res.setContentType("text/html;charset=gbk");
//接受用户名和密码
String u=req.getParameter("username");
String p = req.getParameter("pwd");
//连接数据库
class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//得到链接 引入sql包 databaseName=sqdb 数据库名
ct = DriverManager.grtConnevtion("jdbc:microsoft:sqlserver://127.0.0.1433:databaseName=sqdb","用户名","密码");
//创建一个statement
sm = ct.createStatement();
rs = sm.executteQuery("select top 1 passwd from users where username= ' " +u +" ' ");
if(rs.next()){
//说明用户是存在
String dbPasswd = rs.getString(1);//得到该用户密码
if(dbPasswd.equals(p)){//用户输入密码和数据库密码是否相同
//合法
String keep = req.getParameter("keep");
if(keep!=null){
//将任务名和密码保存在客户端
Cookie name = new Cookie("myname",u);
Cookie pass = new Cookie("mypasswd",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的存在时间
hs.setMaxInactiveInterval(20);//20s
hs.setAttribute("name","u");
res.sendRedirect("wel");
}
}else{
//说明用户名不存在
res.sendRedirect("login");
}
}catch(Exception e){
e.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);
}
}
欢迎界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Wel extends HttpServlet{
//处理get请求
//req:用于获得客户端(浏览器)信息
//res:用于向客户端返回信息
public void doGet(HttpServletRequest req,httpServletResponse res){
//得到session
HttpSession hs = req.getSession(true);
String val = (String)hs.getAttribute("pass");
//判断
if(val==null){
try{
res.sendRedirect("login");
}catch(Exception e){
e.printStackTrace();
}
}
Printwriter pw = res.getwriter();
、、、、、、、、、、、分页、、、、、、、、、、、、、
int pageSize = 3;//一页显示几条记录
int pageNow = 1;//希望显示第几页
int rowCount = 0;//共有几条记录(查表)
int pageCount = 0;//共有几页(计算)
//动态的接受pageNow
String sPageNow = req.getParameter("pageNowok");
if(spageNow!=null){
pageNow = Integer.parseInt(sPageNow);
}
//得到rowCount
class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//得到链接 引入sql包 databaseName=sqdb 数据库名
ct = DriverManager.grtConnevtion("jdbc:microsoft:sqlserver://127.0.0.1433:databaseName=sqdb","用户名","密码");
ps = ct.prepareStatement("select count(*) from users");
rs = ps.executeQuery();
if(rs.next()){
rowCount = rs.getInt(1);
}
//计算pageCount
if(pageCount/pageSize==0){
pageCount = pageCount/pageSize;
}else{
pageCount = pageCount/pageSize+1;
}
ps = ct.prepareStatement("select top ? * from users where userId not in(select top ? userId from users)");
//给?赋值
ps.setInt(1,pageSize);
ps.setInt(2,pageSize*(pageNow-1));
rs=ps.executeQuery();
while(rs.next()){
pw.println("<tr>");
pw.println("<td>"+rs.getInt(1)+"</td>");
pw.println("<td>"+rs.getInt(2)+"</td>");
pw.println("<td>"+rs.getInt(3)+"</td>");
pw.println("<td>"+rs.getInt(4)+"</td>");
pw.println("<td>"+rs.getInt(5)+"</td>");
pw.println("<tr>");
}
//上一页
if(pageNow!=1)
pw.println("<a href = wel?pageNowok= "+(pageNow-1)+">上一页</a>");
//下一页
if(pageNow!=pageCount)
pw.println("<a href = wel?pageNowok= "+(pageNow+1)+">下一页</a>");
//显示超链接
for(int i=1;i<=pageCount;i++){
pw.println("<a href = wel?pageNow="+i+">"+i+"</a>");
}
//得到从logicl传递的用户名
String u = req.getParameter("uname");
try{
Printwriter pw = res.getwriter();
pw.println("wel.hello");
}catch(Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,httpServletResponse res){
this.doGet(req,res);
}
}