零基础学Servlet
开发Servlet的三种方法:实现Servlet接口,继承GenericServlet,继承HttpServlet
一.实现Servlet接口(Servlet生命周期很重要)
需求:向浏览器回送helloworld
1.webapp文件下建立web.xml,和class文件夹和lib文件夹
2.写servletclass
(init)
//该函数英语初始化该servlet(类似类的构造函数)
//只会被调用一次(当用户第一次访问servlet时调用
service
//这个函数用于处理业务逻辑,程序员应当把业务逻辑代码写在这里service
//用户每访问一次该servlet,都会被调用该方法
//req:用于获取浏览器的信息
//res:用于向浏览器返回信息(不能直接返回,必须得到printwriter)
//syso和pw一个是向控制台打印,一个是向浏览器打印
(destory)
//销毁servlet实例(释放内存)
//1.reload该servlet2.关闭tomcat3.关闭windows
public class HelloWeb implements Servlet {
@Override
public void destroy () {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null ;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null ;
}
//这个相当于构造函数
@Override
public void init (ServletConfig config ) throws ServletException {
// TODO Auto-generated method stub
System . out. println( "Servlet>>>>>creat" );
}
//这个是核心部分, req接收浏览器的请求
//res向浏览器发送消息,但是必须用打印流
int count =0 ;
@Override
public void service (ServletRequest req , ServletResponse res )
throws ServletException, IOException {
// TODO Auto-generated method stub
count++;
PrintWriter pw =res .getWriter ();
System . out. println( "Servlet>>>>>look" +count );
pw .println ( "hello,i see you!") ;
pw .printf ( "you are the %d person i saw", count );
}
}
3.部署servlet(每写一个servlet要部署一次)
在web.xml文件中部署,理解别人规范!!
<servlet>
<!----给servlet取名---->
<servlet-name></servlet-name>
<servlet-name></servlet-name>
<!----指明servlet路径---->
<servlet-class></servlet-class></servlet>
<servlet-mapping>
<!----给servlet取名---->(映射)
<servlet-name></servlet-name><!----这是在浏览器中输入的访问该servlet的url,任意的---->
<url-pattern>/</url-pattern></servlet-mapping>
tomcat里面有个服务器管理的功能,可以reload
4.servlet的生命周期
servlet部署在容器里,(我们使用的是tomcat,也可以是别的比如jboss,weblogic)他的生命周期由容器管理;servlet的生命周期分为几个阶段:
1.装载servlet,由相应的容器完成
2.创建servlet实例
3.调用servlet的init()方法,该方法只会在第一次访问该servlet时被调用一次
4.服务:调用该servlet的service()方法,一般都是业务逻辑在这里处理
5.销毁:调用servlet的destory()方法
二.通过继承GenericServlet开发servlet
在servlet发展过城中曾经有genericservlet这个类可以实现servlet~
//这是第二种开发servlet的方法(继承GenericServlet开发)
//只需要去重写service方法即可
三.通过继承HttpServlet开发servlet(普遍广泛使用中)
重写doGet和doPost方法,这是html提交表单的两种方法。
两种方法的区别
1.post安全性高,get会将数据显示在地址栏
2.get数据不能超过2K,post建议小于64k;
3.get响应速度快,要求服务器立即处理,而post可能会形成一个队列请求
综上,建议post
//这是第三种开发servlet的方法(通过继承HttpServlet)
//处理get请求。doGet()
//httpservletrequest req:这两个对象是容器创建的
//httpservletrequest res:
这两个方法可以合二为一,doPost()直接调用doGet()方法。
写一个servlet部署一次
servlet开发实例
简单的用户登录网站
我们总共有三个servlet!!三个java类,登录界面,验证后台,成功界面
1.进行简单的用户验证
public void doGet (HttpServletRequest request , HttpServletResponse response)
throws ServletException, IOException {
//解决中文乱码
response .setContentType ( "text/html;charset=gbk") ;
//业务逻辑是返回一个登录界面
PrintWriter pw =response .getWriter ();
//Java可以返回静态 html界面
pw .println ( "<html>") ;
pw .println ( "<bady>") ;
pw .println ( "<h1>登录界面</h1>" );
//form表单
pw .println ( "<form action=longcl method=post>" );
pw .println ( "用户名:<input type=text name=username><br>" );
pw .println ( "密码:<input type=password name=password><br>" );
pw .println ( "<input type=submit value=loing><br>" );
pw .println ( "</form>") ;
pw .println ( "</bady>") ;
pw .println ( "</html>") ;
}
验证输入是否合法
//业务逻辑,接收login的用户名和密码,验证用户的合法性,现在我们认为姓名等于wei密码等于123合法
//request .getParameter 获取属性
//response .sendRedirect//跳转到你要的servlet的URL
//欢迎界面
//处理login的servlet,Logincl
public void doGet (HttpServletRequest request , HttpServletResponse response)
throws ServletException, IOException {
//获取变量值
String u =request .getParameter ( "username") ;
String p =request .getParameter ( "password") ;
//处理信息部分
if (u .equals ( "wei") &&p .equals ( "123"))
//跳转操作,必须跳转到你希望的URL中
response .sendRedirect ( "wel") ;
else response. sendRedirect( "login" );
}
//欢迎界面 servlet
public void doGet (HttpServletRequest request , HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw =response .getWriter ();
pw .println ( "well,what do you need ?my master!" );
}
部署好web.xml就可以跑起来了。