Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之11.Servlet简介

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介:
–为什么需要动态创建Web页面? 
–Servlet 的功能 
–Servlet 相对“传统” CGI的优势 
–Servlet 的相关类和接口 
–Servlet 实例 
• “HelloWorld” Servlet
######################Michael分割线################
• 为什么需要动态创建Web页面? 
–Web页面基于用户提交的数据
 
• 例如,搜索引擎的结果和在线商店的订单确认信息 
–Web 页面的数据频繁改变 
• 例如,天气预报和新闻头条 
–页面信息来自数据库 
• 例如,电子商务网站的每日销售商品的价格清单
• Servlet 的功能 
–读取客户端发来的显示信息(表单数据) 
–读取客户端发来的隐式信息(请求头信息) 
–生成相应结果 
–发送显示信息给客户端(HTML) 
–发送隐式数据到客户端(状态码和响应头信息)
image
• Servlet 相对“传统”CGI的优势 
–效率高 
• 线程取代操作系统的进程 
–方便 
• 大量高级工具类 
–功能强大 
• 共享数据,数据持久性 
–轻便 
• 可以运行在所有操作系统上 
–廉价 
• 有大量的免费或价格较低的服务器 
–安全 
• 没有缓存溢出问题 
–主流
• Servlet 的相关类和接口 
– 包结构 
• javax.servlet 
• javax.servlet.http
image
– Servlet 接口 
• public void init(ServletConfig config) throws ServletException 
• public ServletConfig getServletConfig() 
• public void service(ServletRequest req,ServletResponse res) throws 
ServletException,java.io.IOException 
• public java.lang.String getServletInfo() 
• public void destroy()
image
– ServletConfig 
• public java.lang.String getServletName() 
• public java.lang.String getInitParameter(java.lang.String name) 
• public java.util.Enumeration getInitParameterNames()
– ServletContext 
• public ServletContext getContext(java.lang.String uripath) 
• public RequestDispatcher getRequestDispatcher(java.lang.String path) 
• public void log(java.lang.String msg) 
• public java.lang.String getRealPath(java.lang.String path) 
• public java.lang.String getInitParameter(java.lang.String name) 
• public java.lang.Object getAttribute(java.lang.String name)
– ServletRequest 
• public void setAttribute(java.lang.String name,java.lang.Object o) 
• public void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingException 
• public java.lang.String getParameter(java.lang.String name) 
• public java.lang.String[] getParameterValues(java.lang.String name)
– ServletResponse 
• public ServletOutputStream getOutputStream() hrows java.io.IOException 
• public java.io.PrintWriter getWriter() throws java.io.IOException
– GenericServlet 
• public abstract class GenericServlet 
• extends java.lang.Object 
• implements Servlet, ServletConfig, java.io.Serializable
– HttpServlet 
• public abstract class HttpServlet 
• extends GenericServlet 
• implements java.io.Serializable
– HttpServletRequest 
• public interface HttpServletRequest 
• extends ServletRequest
– HttpServletResponse 
• public interface HttpServletResponse 
• extends ServletResponse
– HttpSession 
• public void setAttribute(java.lang.String name,java.lang.Object value) 
• public void invalidate()
• Servlet 实例 
–“HelloWorld” Servlet 
• 创建一个HelloWorldServlet类 
–编写一个类“HelloWorldServlet”继承HttpServlet 
–覆盖HttpServlet中的doGet方法 
–在doGet方法中将“Hello World Servlet”输出
image
• 声明、映射Servlet 
–声明Servlet
image 
–映射Servlet 
image
• 调用Servlet方式 
–URL 
–提交表单 
–超级连接 
–JavaScript脚本 
• 运行结果
image
######################Michael分割线################
URL调用Servlet方法
创建一个MyServlet类  
MyServlet.java
package com.michael.servlet;    

import java.io.IOException;    
import java.io.PrintWriter;    

import javax.servlet.ServletException;    
import javax.servlet.http.HttpServlet;    
import javax.servlet.http.HttpServletRequest;    
import javax.servlet.http.HttpServletResponse;    

public  class MyServlet  extends HttpServlet{    

        @Override    
         protected  void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {    
                PrintWriter out = response.getWriter();    
                out.println( "My blog is http://redking.blog.51cto.com");    
        }    

        @Override    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
                doGet(request,response);    
        }    

image
申明、映射Servlet
web.xml
<? xml  version ="1.0"  encoding ="UTF-8" ?>    
< web-app  version ="2.4"    
         xmlns ="http://java.sun.com/xml/ns/j2ee"    
         xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"    
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >    

        <!--  申明Servlet -->    
         < servlet >    
                 < servlet-name >王乾De技术Blog[爱生活,爱学习] </ servlet-name >    
                 < servlet-class >com.michael.servlet.MyServlet </ servlet-class >    
         </ servlet >    
        <!--  映射Servlet -->    
         < servlet-mapping >    
                 < servlet-name >王乾De技术Blog[爱生活,爱学习] </ servlet-name >    
                 < url-pattern >/servlet/michael.do </ url-pattern >    
         </ servlet-mapping >    
</ web-app > 
image
测试
image
######################Michael分割线################
提交表单调用Servlet方法
增加一个login.html页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >    
< html >    
     < head >    
         < title >login.html </title>    
         < meta  http-equiv ="keywords"  content ="keyword1,keyword2,keyword3" >    
         < meta  http-equiv ="description"  content ="this is my page" >    
         < meta  http-equiv ="content-type"  content ="text/html; charset=gbk" >    
         <! --<link rel="stylesheet" type="text/css" href="./styles.css">-->    

     </head>    
     < body >    
         < form  action ="/Servlet_Info/servlet/michael.do"  method ="post" >    
             < table  border ="0" >    
                 < tr >    
                     < td >帐号: </td>    
                     < td > < input  type ="text"  name ="user"  id ="login" > </td>    
                 </tr>    
                 < tr >    
                     < td >密码: </td>    
                     < td > < input  type ="password"  name ="password"  id ="password" > </td>    
                 </tr>    
                 < tr >    
                     < td  colspan ="2"  align ="center" > < input  type ="submit"  value ="登录" > </td>    
                 </tr>    
             </table>    
         </form>    
     </body>    
</html> 
image
测试
image
image
image
######################Michael分割线################
超链接调用Servlet方法
image
测试
image
######################Michael分割线################
JavaScript脚本调用Servlet方式
login.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >    
< html >    
     < head >    
         < title >login.html </title>    
         < meta  http-equiv ="keywords"  content ="keyword1,keyword2,keyword3" >    
         < meta  http-equiv ="description"  content ="this is my page" >    
         < meta  http-equiv ="content-type"  content ="text/html; charset=gbk" >    
         <! --<link rel="stylesheet" type="text/css" href="./styles.css">-->    

         < script  type ="text/javascript" >    
                function invoke(){    
                        var myForm = document.getElementById("michaelForm");    
                        myForm.action = "/Servlet_Info/servlet/michael.do";    
                        myForm.submit();    
                }    
         </script>    
     </head>    
     < body >    
             < a  href ="/Servlet_Info/servlet/michael.do" >click me!!! </a>    
         < form  id ="michaelForm"  action ="/Servlet_Info/servlet/michael.do"  method ="post" >    
             < table  border ="0" >    
                 < tr >    
                     < td >帐号: </td>    
                     < td > < input  type ="text"  name ="user"  id ="login" > </td>    
                 </tr>    
                 < tr >    
                     < td >密码: </td>    
                     < td > < input  type ="password"  name ="password"  id ="password" > </td>    
                 </tr>    
                 < tr >    
                     < td  colspan ="2"  align ="center" > < input  type ="submit"  value ="登录" > </td>    
                     < input  type ="button"  value ="JS Submit"  onclick ="invoke()" > < br > < br >    
                 </tr>    
             </table>    
         </form>    
     </body>    
</html> 
image
测试
image
image
######################Michael分割线################










本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/167478,如需转载请自行联系原作者

相关文章
|
搜索推荐 算法 Java
2025 年互联网大厂校园招聘 JAVA 工程师笔试题及备考要点解析
本文针对互联网大厂校招Java工程师笔试题进行解析,涵盖基础知识、面向对象编程、数据结构与算法、异常处理及集合框架等核心内容。从数据类型、运算符到流程控制语句,从类与对象、继承多态到数组链表、排序算法,再到异常捕获与集合框架应用,结合实际案例深入剖析,助你系统掌握考点,提升应试能力。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
430 9
|
Java 数据库连接 API
互联网大厂校招 JAVA 工程师笔试题解析及常见考点分析
本文深入解析互联网大厂校招Java工程师笔试题,涵盖基础知识(数据类型、流程控制)、面向对象编程(类与对象、继承与多态)、数据结构与算法(数组、链表、排序算法)、异常处理、集合框架、Java 8+新特性(Lambda表达式、Stream API)、多线程与并发、IO与NIO、数据库操作(JDBC、ORM框架MyBatis)及Spring框架基础(IoC、DI、AOP)。通过技术方案讲解与实例演示,助你掌握核心考点,提升解题能力。
508 2
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
2134 83
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
2856 31
|
机器学习/深度学习 Java PyTorch
Java工程师如何理解张量?
刚接触AI和PyTorch,理解“张量(Tensor)”是入门关键。张量可类比为Java中的多维数组,但更强大,尤其在AI领域支持GPU加速、自动求导等特性。它不仅能高效存储数据,还能进行复杂运算,是深度学习的核心数据结构。掌握张量的维度、数据类型及GPU加速特性,对学习PyTorch至关重要。
474 3
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
1320 7
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
493 5
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
616 20