第四章 Servlet技术

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、本章还有过滤器的介绍和使用,跳过了,没看

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值