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提交的数据不能大于2K,post在理论上不受限制,但是我们实际编程中一般不要大于64K。
3. 从响应速度上看,get > post,get要求服务器立即处理请求。而post请求可能形成一个队列请求。
与继承GenericServlet类类似,继承HttpServlet类,要重写相应的一些方法。doGet和doPost方法。
从doGet和doPost方法的参数可以知道,它们实现的功能是相同的,仅仅是使用不同的函数名字。这样就可以在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.java和Wel.java文件。
在LoginCl.java中做一个用户信息的验证,如果成功则转向welcome页面。
其中碰到的两个问题:
1. 乱码的处理:
在使用res参数返回页面信息之前,调用res.setContentType("text/html;charset=gbk");来设置字符集。使用gbk就不会出现乱码了。
2. 页面的跳转:
页面的跳转是通过res的res.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"); //这里的参数要跳转到的Servlet的URL
}
}
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开发学习笔记(2)
- JavaEE开发学习笔记(1)
- JavaEE开发学习笔记(3)
- javaEE应用和开发环境-学习笔记
- javaEE(web开发)私人学习笔记
- JavaEE学习笔记--HTML(2)
- JavaEE学习笔记--CSS(2)
- JavaEE学习笔记--JavaScript(2)
- JavaEE学习笔记之Servlet/JSP(2)
- JavaEE学习笔记
- javaEE学习笔记
- JavaEE学习笔记
- JavaEE 学习笔记
- JAVAEE学习笔记
- JAVAEE学习笔记
- JAVAEE学习笔记
- JAVAEE学习笔记
- JAVAEE学习笔记
- csv和Excel文件互转
- The Cairo graphics tutorial -------Text in Cairo
- The Cairo graphics tutorial -------Images in Cairo
- ANDROID音频系统散记之四:4.0音频系统HAL初探
- uboot nor flash驱动移植(基于am29lv160bt)之环境变量没法保存的办法
- JavaEE开发学习笔记(2)
- The Cairo graphics tutorial -------Custom GTK widget
- Perfect Pth Powers解题报告
- 新手做seo最容易犯的错误
- Goldbach's Conjecture 解题报告
- 一日一点RakNet(27)--Custom Memory Management
- 大小端
- 废弃的CRT函数
- Win7 vs2008编译程序出现“应用程序无法长长启动(0xc0150002)”