JavaEE开发学习笔记(2)

来源:互联网 发布:基金产品经理 知乎 编辑:程序博客网 时间:2024/05/18 15:53

 

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 北洋小郭

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

原创粉丝点击