JavaEE开发学习笔记(2)

原创 2012年03月30日 08:34:36

 

8. 使用继承GenericServlet类的方法来开发Servlet

       这个类是javax.servlet包中的一个类,提供这个类简化了servlet的开发

       在继承了GenericServlet类的子类中,只需要重写service方法即可,也就是要重写实现用户自己业务逻辑的函数方法。

       与实现Servlet接口类似,也是打印一个“Hello world”。

       具体的代码如下:

 

// 这是第二中开发Servlet的方法(通过继承GenericServlet开发)

package com.tsinghua;

 

import javax.servlet.GenericServlet;

import java.io.*;

import javax.servlet.*;

 

public class HelloGen extends GenericServlet

{

       // 重写service方法即可

       public void service(ServletRequest req, ServletResponse res)

       {

              // 返回Hello world

              try{

                     PrintWriter pw = res.getWriter();

                     pw.println("Hello world! Generic");

              }

              catch(Exception ex)

              {

                     ex.printStackTrace();

              }

       }

}     

       Servlet的配置类似于实现Servlet接口的配置。在web.xml中加入相应的servlet配置代码即可。

  

9. 通过继承HttpServlet开发Servlet方法:

       通过继承HttpServlet去开发Servlet方法,需要重写doGet()doPost()方法。这是目前用的比较多的一种方法。

       表单提交数据的get请求和post请求的区别:

      1. 从安全性来讲,get < post get的数据会在浏览器的地址栏显示

      2. 从提交内容的大小来看,get < post  理论说get提交的数据不能大于2Kpost在理论上不受限制,但是我们实际编程中一般不要大于64K

      3. 从响应速度上看,get > postget要求服务器立即处理请求。而post请求可能形成一个队列请求。

 

      与继承GenericServlet 类类似,继承HttpServlet类,要重写相应的一些方法。doGetdoPost方法。

      doGetdoPost方法的参数可以知道,它们实现的功能是相同的,仅仅是使用不同的函数名字。这样就可以在doGet方法中调用this.doPost(req, res); 或者相反在doPost中调用this.doGet(req, res);方法。例如第二种,这样仅仅需要在doGet方法中实现相应的业务逻辑即可。

 

这种方法的代码如下所示:

// 这是第三种开发servlet的方法(通过继承HttpServlet类来实现)

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! Http");

              }    

              catch(Exception ex)

              {

                     ex.printStackTrace();

              }

       }

      

       // 处理get请求

       // req:用于或得客户端的信息

       // res:用于向客户端返回信息

       public void doPost( HttpServletRequest req, HttpServletResponse res)

       {

              this.doGet( req, res);

       }

}

       servlet的配置方法与上面相同。其中不需要重复启动tomcat,只需要在tomcat的管理员页面中重新加载你的工程即可。

 

10. Servlet开发实例

       简单的用户登陆网站(Servlet版本1),主要实现用户验证功能

       知识点:

       1. 如何使用servlet开发动态网页

       2. 如何从一个页面跳转到另外一个页面。

      

       用户登录网站(Sevlet版本1.0)框架处理

      

       具体的开发则是书写Login.java LoginCl.javaWel.java文件。

       LoginCl.java中做一个用户信息的验证,如果成功则转向welcome页面。

 

       其中碰到的两个问题:

        1. 乱码的处理:

        在使用res参数返回页面信息之前,调用res.setContentType("text/html;charset=gbk");来设置字符集。使用gbk就不会出现乱码了。

 

       2. 页面的跳转:

       页面的跳转是通过resres.sendRedirect("welcome");方法来实现。

 

具体实现代码如下:

// 登录界面

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("<form action=loginhandle method=post>");

                     pw.println("用户名:<input type=text name=username><br>");

                     pw.println("密码:<input type=password name=passwd><br>");

                     pw.println("<input type=submit value=loing><br>");

                     pw.println("</form>");

                     pw.println("</body>");

                     pw.println("</html>");

              }    

              catch(Exception ex)

              {

                     ex.printStackTrace();

              }

       }

      

       // 处理get请求

       // req:用于或得客户端的信息

       // res:用于向客户端返回信息

       public void doPost( HttpServletRequest req, HttpServletResponse res)

       {

              this.doGet( req, res);

       }

}

 

LoginHandle的代码:

// 用户验证servlet

package com.tsinghua;

 

import javax.servlet.http.*;

import java.io.*;

 

public class LoginHandle extends HttpServlet

{

       // 处理get请求

       // req:用于或得客户端的信息

       // res:用于向客户端返回信息

       public void doGet( HttpServletRequest req, HttpServletResponse res)

       {

              // 业务逻辑在此处书写

              try{

                     // 接收用户的信息,用户名和密码

                     String u = req.getParameter("username");

                     String p = req.getParameter("passwd");

                    

                     // 验证

                     if(u.equals("sp") && p.equals("123"))

                     {

                            // 合法

                            // 跳转

                            res.sendRedirect("welcome");

                     }

                     else

                     {

                            // 不合法

                            // 跳转

                            res.sendRedirect("login"); // 这里的参数要跳转到的ServletURL

                     }

              }    

              catch(Exception ex)

              {

                     ex.printStackTrace();

              }

       }

      

       // 处理get请求

       // req:用于或得客户端的信息

       // res:用于向客户端返回信息

       public void doPost( HttpServletRequest req, HttpServletResponse res)

       {

              this.doGet( req, res);

       }

}

 

Welcome的源代码:

// 欢迎界面

package com.tsinghua;

 

import javax.servlet.http.*;

import java.io.*;

 

public class Welcome extends HttpServlet

{

       // 处理get请求

       // req:用于或得客户端的信息

       // res:用于向客户端返回信息

       public void doGet( HttpServletRequest req, HttpServletResponse res)

       {

              // 业务逻辑在此处书写

              try{

                     PrintWriter pw = res.getWriter();

                     pw.println("Wel, hello!");      

              }    

              catch(Exception ex)

              {

                     ex.printStackTrace();

              }

       }

      

       // 处理get请求

       // req:用于或得客户端的信息

       // res:用于向客户端返回信息

       public void doPost( HttpServletRequest req, HttpServletResponse res)

       {

              this.doGet( req, res);

       }

}

 

配置文件如前面所述,详细代码如下:

<!-- JSPC servlet mappings start -->

       <!—Login  配置 -->

       <servlet>

          <servlet-name>login</servlet-name>

          <servlet-class>com.tsinghua.Login</servlet-class>

      </servlet>

      <servlet-mapping>

          <servlet-name>login</servlet-name>

          <url-pattern>/login</url-pattern>

      </servlet-mapping>

 

       <!—LoginHandle 配置 -->

       <servlet>

          <servlet-name>loginhandle</servlet-name>

          <servlet-class>com.tsinghua.LoginHandle</servlet-class>

      </servlet>

      <servlet-mapping>

          <servlet-name>loginhandle</servlet-name>

          <url-pattern>/loginhandle</url-pattern>

      </servlet-mapping>

 

       <!--  Welcome配置 -->

       <servlet>

           <servlet-name>welcome</servlet-name>

           <servlet-class>com.tsinghua.Welcome</servlet-class>

       </servlet>

       <servlet-mapping>

            <servlet-name>welcome</servlet-name>

            <url-pattern>/welcome</url-pattern>

        </servlet-mapping>

 

<!-- JSPC servlet mappings end -->

 

 

By 北洋小郭

转载请注明出处,请勿用于商业用途,谢谢!

相关文章推荐

javaEE学习笔记

Init和destroy只被调用一次,service可被调用多次,属于不同的线程    获取配置文件中的参数: ServletConfig  用于获取在xml文件中设置的常数值 法一:有参的初...
  • zhp_24
  • zhp_24
  • 2016年07月03日 11:31
  • 240

android系统如何在静音模式下关闭camera拍照声音

话说为了防止偷拍,业内有不成文规定,手机公司在做camera时,点击拍照和录像键的时候,必须要有提示音。因此,google也就非常人性化的将播放拍照声音的函数,放到了cameraService中,防止...
  • DYFleoo
  • DYFleoo
  • 2012年08月27日 14:45
  • 12988

JavaEE开发学习笔记(3)

11. 同一用户共享不同页面的数据        1)cookie技术        服务器保存客户端的信息,例如保存用户名,密码。服务器获得这些信息后,需要回写到客户端的某个目录。这样服务器在使...

javaweb学习(1):win10配置javaee开发环境eclipse+tomcat+mysql,web小项目

前言: 本案例是一个简单,但是完整的javaweb小项目。 1,主要功能:实现注册和登陆功能。功能截图如下: 图1:主页 图2:登录页面 图3:注册页面 2,用到的we...

JavaEE学习笔记之SSH—Struts2(3)

一、action中如何接受页面传过来的参数第一种情况:(同名参数) 例如: 通过页面要把id=1 name=tom age=20这三个参数传给action 1.action里面定义三个成员变量i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaEE开发学习笔记(2)
举报原因:
原因补充:

(最多只允许输入30个字)