您的位置:首页 > 其它

第四章 Servlet技术

2011-07-17 17:05 197 查看
1、HttpServletRequest接口,在doGet()方法中完成,需要部署web.xml。
文件src.pa.myServlet.java,部署为/servlet/myServlet。doGet()方法如下
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
response.setCharacterEncoding("gbk");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print("    This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.print("<br/>");
out.print("<p> 上下文路径"+request.getContextPath()+"</p>");
out.print("<p>HTTP请求类型  "+request.getMethod()+"</p>");
out.print("<p>请求参数"+request.getQueryString()+"</p>");
out.print("<p>请求URL"+request.getRequestURL()+"</p>");
out.print("<p>请求URI"+request.getRequestURI()+"</p>");
out.println("<p>请求servlet路径"+request.getServletPath()+"</p>");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
2、使用Servlet实现注册和登录。连接数据库,注意将jar连接器放置到\WEB-INF\lib下面并解压。
登录页面输入用户名和密码,LoginServlet负责读取数据库验证用户名和密码,若合法,浏览内容,否则重新登录。
注册页面负责添加新的用户到数据库。注册之后返回到登录页面。
数据库的表信息
CREATE TABLE `test`.`tb_user` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` VARCHAR(45) NOT NULL COMMENT '用户名',
`password` VARCHAR(45) NOT NULL COMMENT '密码',
`sex` VARCHAR(45) NOT NULL COMMENT '性别',
`question` VARCHAR(45) NOT NULL COMMENT '密码问题',
`answer` VARCHAR(45) NOT NULL COMMENT '密码答案',
`email` VARCHAR(45) NOT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)
ENGINE = InnoDB;
登录界面
<form action="servlet/LoginServlet" method="post" >
<table width="500" border="0" align="center">
<tr>
<td align="right" width="30%">用户名</td>
<td><input type="text"  name="username" ></td>
</tr>
<tr>
<td align="right">密码</td>
<td><input type="password" name="password"> </td>
</tr>
<td colspan="2" align="center" height="40">
<input type="submit" value="登录">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
<div align="center"><a href="register.jsp">注册新用户</a></div>
注册页面
<form action="servlet/RegServlet" method="post" onSubmit="return reg(this);">
<table width="500" border="0" align="center">
<tr>
<td align="right" width="30%">用户名</td>
<td><input type="text"  name="username" ></td>
</tr>
<tr>
<td align="right">密码</td>
<td><input type="password" name="password"> </td>
</tr>
<tr>
<td align="right">确认密码</td>
<td><input type="password" name="=repassword"></td>
</tr>
<tr>
<td align="right">性别</td>
<td>
<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女
</td>
</tr>
<tr>
<td align="right">密码找回问题</td>
<td><input type="text" name="question" ></td>
</tr>
<tr>
<td align="right">密码找回答案</td>
<td><input type="text" name="answer" ></td>
</tr>
<tr>
<td align="right">邮箱</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td colspan="2" align="center" height="40">
<input type="submit" value="注册">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
内容页面content.jsp
LoginServlet.java

//重写init(),完成数据库的连接
在doPost()完成变量的读取和sql语句的执行
//验证过程只是读取数据库中的第一条满足姓名要求的记录。
private Connection conn;
public void init() throws ServletException
{
super.init();
try
{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/test";
conn=DriverManager.getConnection(url,"root","xhp");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
//设置request和response的编码
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
//获取表单的属性值
String username=request.getParameter("username");
String password=request.getParameter("password");
//判断连接是否成功
if(conn!=null)
{
try
{
//插入查询信息的SQL语句
String sql="select * from tb_user where username like '"+username+"'";
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
if(rs.next())
{
if(rs.getString("password").equals(password))
{
PrintWriter out=response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print("登录成功!");
out.print(" <a href=http://10.2.205.49:8080/4.04/content.jsp>访问内容</a> ");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
else
{
PrintWriter out=response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print("密码不匹配,登录失败!");
out.print(" <a href=http://10.2.205.49:8080/4.04/index.jsp>重新登录</a> ");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
else
{
PrintWriter out=response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print("未查询到记录,登录失败!");
out.print(" <a href=http://10.2.205.49:8080/4.04/index.jsp>重新登录</a> ");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
{
response.sendError(500,"数据库连接错误");
}
}
RegServlet.java
init()方法同上,doPost()完成变量的读取和sql语句的执行
//不进行同名用户的检验
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
//设置request和response的编码
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
//获取表单的属性值
String username=request.getParameter("username");
String password=request.getParameter("password");
String sex=request.getParameter("sex");
String question=request.getParameter("question");
String answer=request.getParameter("answer");
String email=request.getParameter("email");
//判断连接是否成功
if(conn!=null)
{
try
{         //插入注册信息的SQL语句
String sql="insert into tb_user(username,password,sex,question,answer,email)"+"values(?,?,?,?,?,?)";
//创建PreparedStatement 对象
PreparedStatement ps=conn.prepareStatement(sql);
//对SQL语句中的参数动态赋值
ps.setString(1, username);
ps.setString(2, password);
ps.setString(3, sex);
ps.setString(4, question);
ps.setString(5, answer);
ps.setString(6, email);
//执行更新操作
ps.executeUpdate();
//获取PrintWriter对象
PrintWriter out=response.getWriter();
//输出注册结果
out.print(username+"注册成功!");
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print(" <a href=http://10.2.205.49:8080/4.04/index.jsp>登录系统</a> ");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
{
response.sendError(500,"数据库连接错误");
}
}
3、简单Servlet计算器
页面设计
<h2>Servlet 计算器</h2>
<form action="servlet/calculator" method="post">
数1:<input type="text" name="a"><br><br>
数2:<input type="text" name="b"><br>
选择操作符:
<input type="radio" name="operator"  value="plus">+
<input type="radio" name="operator"  value="sub">-
<input type="radio" name="operator"  value="mul">*
<input type="radio" name="operator"  value="div">/
<br><br>
<input type="submit" value="计算">
</form>
Servlet处理
也是在doPost()方法中完成
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print("    This is ");
out.print(this.getClass());
out.println(", using the POST method");
int a=Integer.parseInt(request.getParameter("a"));
int b=Integer.parseInt(request.getParameter("b"));
String op=request.getParameter("operator");
int result=0;//保存计算结果
if(op.equals("plus"))
{
result=a+b;
}
else
{
if(op.equals("sub"))
{
result=a-b;
}
else
{
if(op.equals("mul"))
{
result=a*b;
}
else
{
if(op.equals("div"))
{
result=a/b;
}
else
{
result=0;
}
}
}
}
out.println("<br>"+"result:"+result+"<br/>");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
(1)操作数未进行验证,只是string
(2)除数可为0
(3)结果在int范围,非double,非float
(4)什么都不输入,也不报错。只是调试器自己处理,未进行人为处理

4、本章还有过滤器的介绍和使用,跳过了,没看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: