




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 Servlet编程本章内容创建Servletweb.xml配置文件Servlet获取请求参数Servlet实现登录功能请求参数为空的问题复选框提交参数GET请求与POST请求本章内容中文乱码问题Servlet跳转Servlet生命周期ServletContextServletConfig2.1 创建ServleServlet是Java Web应用中的核心组件,也是学习Java Web开发的重点与难点。掌握Servlet是进行Java Web开发的基础,如果没有充分理解Servlet及其相关知识,将无法写出高效的Java Web应用程序。2.1 创建Servle1)新建Web Proje
2、ct项目 2.1 创建Servle2)输入项目名称2.1 创建Servle3)Web Project项目结构 2.1 创建Servle4)新建Servlet 2.1 创建Servle5) Create a new Servlet对话框2.1 创建Servle6) Create a new Servlet对话框 2.1 创建Servle7)MyEclipse生成的Servlet代码 2.1 创建Servle8) MyServlet类中的方法2.1 创建Servle定义一个最简单的Servlet 1 public void doGet(HttpServletRequest request, Htt
3、pServletResponse response)2 throws ServletException, IOException 3 PrintWriter out = response.getWriter();4 out.println(Hello Servlet!);5 out.close();6 2.1 创建Servle9)发布项目servlet_first 2.1 创建Servle10) Project Deployments对话框 2.1 创建Servle11) New Deployments对话框 2.1 创建Servle12)选择Tomcat服务器 2.1 创建Servle13)
4、设置后的发布对话框 2.1 创建Servle14)启动Tomcat服务器 2.1 创建Servle访问Servlethttp:/localhost:8080/servlet_first/servlet/MyServlet2.1 创建Servle15)MyServlet的运行结果 2.2 web.xml配置文件通过MyEclipse创建Servlet,除了生成与Servlet相关的Java代码文件,还会在项目目录WebRoot/WEB-INF下的web.xml文件中添加该Servlet的配置信息。开发Java Web除了要编写Java代码,还要维护相应的XML配置文件,这些XML配置文件是保障J
5、ava Web应用正确运行的前提,也是学习Java Web开发时的重点和难点。2.2 web.xml配置文件对于学习Servlet的初学者而言,所犯的常见错误大都出现在web.xml配置文件中。虽然可以借助MyEclipse在web.xml中生成配置,但也要学会手工修改web.xml文件,因为熟练配置web.xml是学会Java Web开发的标志之一。2.2 web.xml配置文件1 2 MyServlet3 servlet.MyServlet4 5 6 MyServlet7 /servlet/MyServlet8 2.2 web.xml配置文件2.3 Servlet获取请求参数通过URL向服
6、务器提交参数http:/localhost:8080/servlet_first/servlet/MyServlet?username=zhanghttp:/localhost:8080/servlet_first/servlet/MyServlet?username=zhang&password=123452.3 Servlet获取请求参数在doGet()方法中可借助request来获取请求参数public String getParameter(String name)getParameter()方法根据请求参数名返回请求参数值,方法的参数name指定了欲获取的参数名,而返回值即为对应的参
7、数值2.3 Servlet获取请求参数1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 2 String username = request.getParameter(username); 3 PrintWriter out = response.getWriter();4 out.println(username=+username);5 out.close();6 2.4 Servlet实现登录功能LoginS
8、ervlet类的doGet()方法的核心代码 String username = request.getParameter(username); String password = request.getParameter(password); PrintWriter out = response.getWriter(); if(username.equals(zhang)&password.equals(12345) out.println(Login Success!); else out.println(Login Error!); out.println(username=+usern
9、ame); out.println(password=+password); out.close();2.4 Servlet实现登录功能访问该Servlet的URL http:/localhost:8080/servlet_first/servlet/LoginServlet ?username=zhang&password=123452.4 Servlet实现登录功能登录页面login.html2.4 Servlet实现登录功能登录页面login.html核心代码 Username: Password: 2.5 请求参数为空的问题Web应用面对着各式各样的用户。用户常会有意或无意地输入非法参
10、数,如果Web应用处理不当,就会引起异常及安全问题。因此需要处理最为常见的参数为空的问题。参数值为null参数值为2.5 请求参数为空的问题以下两种URL访问LoginServlet,则会在浏览器页面和Tomcat控制台同时触发空指针异常NullPointerExceptionhttp:/localhost:8080/servlet_first/servlet/LoginServlethttp:/localhost:8080/servlet_first/servlet/LoginServlet?Username=zhang&password=123452.5 请求参数为空的问题2.5 请求参数
11、为空的问题第1个URL中未指定username的参数值,第2个URL中指定了错误的username参数值(即“Username”中的首字母U不应该大写),这两者都会造成username的值为null,所以username.equals(“zhang”)语句就触发了“NullPointerException”。为了使程序更健壮,就需要加入对参数值是否为null的判断。2.5 请求参数为空的问题参数值为”以下URL访问LoginServlet,输出结果是什么?http:/localhost:8080/servlet_first/servlet/LoginServlet?username=&pass
12、word=2.5 请求参数为空的问题 if(username=null | username.equals() out.println(username=+username); out.close(); return; if(password=null | password.equals() out.println(password=+password); out.close(); return; 2.6 复选框提交参数在HTML页面中,文本框、单选按钮等组件所表示的请求参数都是单个值,而复选框、列表框等组件所表示的请求参数则是数组类型。2.6 复选框提交参数 Basketball: Voll
13、eyball: Footall: 2.6 复选框提交参数因为3个复选框表达的是同一组请求参数,所以它们的name属性都是一样的(即都是“balls”),此时请求参数balls的值就是数组类型的。HttpServletRequest下的getParameter()方法只能处理单个值,因此为了接收数组类型的参数,就需要调用HttpServletRequest下的getParameterValues()方法。String getParameterValues(String name)2.6 复选框提交参数 String balls = request.getParameterValues(balls
14、); PrintWriter out = response.getWriter(); if(balls=null)/没有选择3个复选框中的任何一个,则balls为null out.println(balls=null); out.close(); return; for(String ball : balls) out.println(balls=+ball); out.close();2.7 GET请求与POST请求构建一个Servlet的关键就是继承HttpServlet类并重写其中的doGet()和doPost()方法。GET方式会将请求参数显示在浏览器地址栏中,而POST方式则不会。这
15、是因为GET方式的请求参数是放在HTTP请求报文的报头,而POST方式的请求参数是放在HTTP请求报文的正文。如果请求参数中携带有安全性、敏感性信息(如密码),则应该使用POST方式;而GET方式十分便于调试程序。2.7 GET请求与POST请求值为post时,其以POST方式提交,Servlet会调用doPost()方法来处理请求。值为get或者属性未设置时(如login.html中的标签),则以GET方式提交,Servlet会调用doGet()方法来处理请求。 Username: Password: 2.7 GET请求与POST请求单击“提交”按钮后,两种方式在浏览器地址栏中生成的URL也
16、不同GET方式:http:/localhost:8080/servlet_first/servlet/LoginServlet?username=zhang&password=12345POST方式:http:/localhost:8080/servlet_first/servlet/LoginServlet2.8 中文乱码问题Servlet输出乱码out.println(登录成功!)在PrintWriter out = response.getWriter()语句之前加入代码response.setCharacterEncoding(gbk);2.8 中文乱码问题POST参数乱码在usern
17、ame文本框中输入中文字符“张三”在String username = request.getParameter(username)语句之前加入代码request.setCharacterEncoding(gbk);2.8 中文乱码问题GET参数乱码http:/localhost:8080/servlet_first/servlet/LoginServlet?username=张三&password=12345”除在引用request对象前要加入request.setCharacterEncoding(gbk);还需在Tomcat服务器的conf目录下server.xml文件的标签中增加use
18、BodyEncodingForURI属性,并设置其值为true2.9 Servlet跳转对于比较复杂的业务功能,经常需要多个Servlet配合实现,这时就需要从一个Servlet跳转到另外一个Servlet,Servlet间的跳转方式可分为转发(forward)和重定向(redirect)两种2.9 Servlet跳转Servlet间的转发通过使用HttpServletRequest的getRequestDispatcher()方法可获取RequestDispatcher对象RequestDispatcher getRequestDispatcher(String path) getReque
19、stDispatcher()方法的参数path指明了要转发到的目标Servlet的URL路径,其返回值为RequestDispatcher类型的对象。2.9 Servlet跳转Servlet间的转发getRequestDispatcher()方法只是获取了RequestDispatcher对象,并未执行真正的转发,执行转发操作还需要调用RequestDispatcher的forward()方法void forward(ServletRequest request, ServletResponse response)forward()方法的声明与doGet()方法和doPost()方法类似,在转
20、发时,其将request和response作为参数传递到下一个Servlet,以便其做进一步的处理。2.9 Servlet跳转转发时传递对象Servlet转发时传递对象需要利用HttpServletRequest对象来传递数据,需调用的HttpServletRequest的方法的声明如下:void setAttribute(String name, Object object) Object getAttribute(String name)。2.9 Servlet跳转转发时传递对象方法setAttribute()的参数name指定了放入request的对象的“名字”,此处name的类型是St
21、ring,用户可任意命名,但要注意将来要按同样名字来取对象;参数object则为真正要放入的需被传递的对象。request.setAttribute(u, username);方法getAttribute()按参数name指定的“名字”,到request中取出之前由方法setAttribute()放入的对象。String username = (String)request.getAttribute(u);2.9 Servlet跳转转发时传递对象在使用forward()方法执行转发时,该方法把request作为参数传递到了下一个Servlet,因为转发前后的两个Servlet引用的是同一个re
22、quest对象,所以就可借助request来传递数据。2.9 Servlet跳转重定向Servlet之间的重定向是通过javax.servlet.http.HttpServletResponse对象的sendRedirect()方法实现public void sendRedirect(String location) throws IOException重定向时传递参数response.sendRedirect(path+?username=+username+&password=+password);2.9 Servlet跳转转发与重定向转发与重定向之间最重要的区别在于Servlet跳转中浏
23、览器所发出的请求次数。在Servlet的跳转过程中,无论Servlet出现了多少次的转发,浏览器仅仅只发送了一次HTTP请求,只接收到最后一个Servlet传回的响应。重定向在跳转至另一个Servlet之前,必须先对浏览器传回响应,浏览器会根据响应报文中的重定向路径发出一个全新的请求以接受重新的处理, 所以重定向过程一共需要发出两次HTTP请求。2.9 Servlet跳转转发与重定向由于在转发之后,浏览器中URL仍然指向初始页面,此时如果刷新浏览器,初始页面将会被再次调用。如果不想这样的情况发生(如付款或转账页面),可选择重定向。转发只能在一个Web项目内的资源之间跳转。重定向可跳转至当前Web项目以外的其他资源。2.10 Servlet生命周期Servlet的生命周期指的是一个Servlet对象何时被创建、何时被访问、何时被销毁。一个Servlet对象在首次被访问时创建;之后不管用户多少次访问该Servlet,调用的仍是同一对象,即Servlet在W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 前位子宫超声讲解
- 吉他协会团日活动策划方案
- 合规性产品反欺诈与反洗钱规定考核试卷
- 高钾血症的护理小讲课
- 脑卒中吞咽障碍护理课件
- 急诊专科培训心得
- 家电维修市场调研与竞争分析考核试卷
- 消化性胃溃疡健康指导
- 大班健康:我很勇敢
- 四川达州巨全双语学校招聘考试真题2024
- 《饮用水卫生》课件
- 新鸿基地产员工手册参考
- 钢筋混凝土全框架结构施工组织设计
- 蛋白组学二维电泳
- GB/T 39522-2020螺纹中径米制系列量针
- GB/T 31848-2015汽车贴膜玻璃贴膜要求
- GB/T 2007.1-1987散装矿产品取样、制样通则手工取样方法
- GB/T 16602-2008腈纶短纤维和丝束
- 梗阻性黄疸护理查房课件
- 中国古代文论教程完整版课件
- 《植物生理学》课件第三章+植物的光合作用
评论
0/150
提交评论