第四章 Servlet技术
2011-07-17 17:05
197 查看
1、HttpServletRequest接口,在doGet()方法中完成,需要部署web.xml。
文件src.pa.myServlet.java,部署为/servlet/myServlet。doGet()方法如下
登录页面输入用户名和密码,LoginServlet负责读取数据库验证用户名和密码,若合法,浏览内容,否则重新登录。
注册页面负责添加新的用户到数据库。注册之后返回到登录页面。
数据库的表信息
LoginServlet.java
//重写init(),完成数据库的连接
在doPost()完成变量的读取和sql语句的执行
//验证过程只是读取数据库中的第一条满足姓名要求的记录。
init()方法同上,doPost()完成变量的读取和sql语句的执行
//不进行同名用户的检验
页面设计
也是在doPost()方法中完成
(2)除数可为0
(3)结果在int范围,非double,非float
(4)什么都不输入,也不报错。只是调试器自己处理,未进行人为处理
4、本章还有过滤器的介绍和使用,跳过了,没看
文件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、本章还有过滤器的介绍和使用,跳过了,没看
相关文章推荐
- struts采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架
- S1.1_Struts2_Model2 手动创建一个简单的servlet项目,未使用Struts技术
- Servlet3.0 服务端推技术实例
- javaWeb下载文件技术(Servlet)
- 知识学习——Servlet会话技术
- Servlet开发技术,创建,以及Servlet的配置,web.xml的配置
- 大型网站技术架构:核心原理与案例分析—第四章:瞬时响应:网站的高性能架构
- JSP技术-page,include指令,一个servlet不能既有字节流又有字符流,异常处理
- 笔记之Servlet的会话管理技术(cookie、session)(应用:用户自动登录、防表单重复提交)
- 转 第四章 渲染技术(2)(as3.0)
- Servlet3.0 异步 servlet Comet 技术
- Ajax技术概要复习及使用Ajax调用jsp或servlet进行异步验证
- Servlet技术(一)
- Managed Directx 9 kick start,第四章 更多渲染技术
- Servlet技术浅析(五)之-----ServletConfig接口和ServletContext接口
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- Java Web技术(init()与init(ServletConfig)的区别)
- 五 Servlet 技术
- Servlet技术一Servlet简介