第四章 Servlet技术
来源:互联网 发布:矩阵的秩是矩阵的值么 编辑:程序博客网 时间:2024/04/29 23:39
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、本章还有过滤器的介绍和使用,跳过了,没看
- 第四章 Servlet技术
- 第四课 Java Servlet技术
- 第四章 servlet模型
- servlet 第四讲 笔记 分页技术
- 第四章调试技术
- 第四章:调试技术
- 第四章--调试技术
- Websphere 入门基础 第四课 Java Servlet技术
- 第二章 Servlet技术
- jsp/servlet第四章第四节request范围实例
- jsp/servlet第四章第四节session范围实例
- jsp/servlet第四章第四节session补充
- 调试技术(第四章 )
- 第四章 深入JSP技术
- 第四章-网络路由技术
- 第四十三章 SpringBoot配置Servlet容器
- Servlet&JSP 第四章 会话管理
- 第三章 servlet技术(书摘)
- 淘宝API开发(一) 简单的用TOPAPI来获取淘宝用户信息
- SQL SERVER 2000 日志文件清理
- 抽象工厂(Abstract Factory)
- 堆栈的溢出
- MFC 非模态,无内存泄漏对话框应该是怎么创建
- 第四章 Servlet技术
- 最简单实现获取当前系统时间的方法
- android_xml解析之 使用PULL读取XML文件 .
- 设置ECLIPSE插件注意目录的结构
- 咨询学习资料汇总
- SQL top 查询出错 第 1 行: '(' 附近有语法错误。
- 2.6.18内核移植成功
- IE 条件注释
- IC Spec Magazine