【文档说明】Java-Web程序设计与案例教程-第2章-Servlet编程.ppt,共(62)页,1.899 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2274.html
以下为本文档部分文字说明:
第2章Servlet编程本章内容创建Servletweb.xml配置文件Servlet获取请求参数Servlet实现登录功能请求参数为空的问题复选框提交参数GET请求与POST请求本章内容中文乱码问题Servlet跳转Servle
t生命周期ServletContextServletConfig2.1创建ServleServlet是JavaWeb应用中的核心组件,也是学习JavaWeb开发的重点与难点。掌握Servlet是进行JavaWeb开发的基础,如果没有充分理解Servl
et及其相关知识,将无法写出高效的JavaWeb应用程序。2.1创建Servle1)新建WebProject项目�2.1创建Servle2)输入项目名称�2.1创建Servle3)WebProject项目
结构�2.1创建Servle4)新建Servlet�2.1创建Servle5)CreateanewServlet对话框�2.1创建Servle6)CreateanewServlet对话框�2.1创建Servle7)MyEclipse生成的Servlet代
码�2.1创建Servle8)MyServlet类中的方法�2.1创建Servle定义一个最简单的Servlet1publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)2t
hrowsServletException,IOException{3PrintWriterout=response.getWriter();4out.println("HelloServlet!");5out.close();6}2.1创建Servle9)发
布项目servlet_first�2.1创建Servle10)ProjectDeployments对话框�2.1创建Servle11)NewDeployments对话框�2.1创建Servle12)选择Tomcat服务器�2.1创建Se
rvle13)设置后的发布对话框�2.1创建Servle14)启动Tomcat服务器�2.1创建Servle访问Servlethttp://localhost:8080/servlet_first/servlet/MyServlet2.1
创建Servle15)MyServlet的运行结果�2.2web.xml配置文件通过MyEclipse创建Servlet,除了生成与Servlet相关的Java代码文件,还会在项目目录WebRoot/WEB-INF下的web.x
ml文件中添加该Servlet的配置信息。开发JavaWeb除了要编写Java代码,还要维护相应的XML配置文件,这些XML配置文件是保障JavaWeb应用正确运行的前提,也是学习JavaWeb开发时的重点和难点。2.2web.xml配置文件
对于学习Servlet的初学者而言,所犯的常见错误大都出现在web.xml配置文件中。虽然可以借助MyEclipse在web.xml中生成配置,但也要学会手工修改web.xml文件,因为熟练配置web.xml是学会JavaWeb开发的标志之一。2.
2web.xml配置文件1<servlet>2<servlet-name>MyServlet</servlet-name>3<servlet-class>servlet.MyServlet</servle
t-class>4</servlet>5<servlet-mapping>6<servlet-name>MyServlet</servlet-name>7<url-pattern>/servlet/MyServlet</url-pattern>8</servlet
-mapping>2.2web.xml配置文件2.3Servlet获取请求参数通过URL向服务器提交参数http://localhost:8080/servlet_first/servlet/MyServlet?use
rname=zhanghttp://localhost:8080/servlet_first/servlet/MyServlet?username=zhang&password=123452.3Servlet获取请求参数在doGet()方法中可借
助request来获取请求参数◼publicStringgetParameter(Stringname)getParameter()方法根据请求参数名返回请求参数值,方法的参数name指定了欲获取的参数名,而返回值即为对应的参数值2.3Servlet获取请求参数1publicvoid
doGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{2Stringusername=request.getParameter("username
");3PrintWriterout=response.getWriter();4out.println("username="+username);5out.close();6}�2.4Servlet实现登录功能LoginServlet类的doGet()
方法的核心代码Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password")
;PrintWriterout=response.getWriter();if(username.equals("zhang")&&password.equals("12345")){out.println("LoginSuccess!");}else{out.println("LoginE
rror!");}out.println("username="+username);out.println("password="+password);out.close();2.4Servlet实现登录功能访问该Servlet的URLhttp://localhost:8080/
servlet_first/servlet/LoginServlet?username=zhang&password=12345��2.4Servlet实现登录功能登录页面login.html�2.4Servlet实现登录功
能登录页面login.html核心代码<formaction="servlet/LoginServlet">Username:<inputtype="text"name="username"><br>Password:<inputtype="text"name="password"><br>
<inputtype="submit"name="Submit"><br></form>2.5请求参数为空的问题Web应用面对着各式各样的用户。用户常会有意或无意地输入非法参数,如果Web应用处理不当,就会引起异常及安全问题。因此需要处理最为常见的参数为空的问题。◼参数值为null◼参数值为""
2.5请求参数为空的问题以下两种URL访问LoginServlet,则会在浏览器页面和Tomcat控制台同时触发空指针异常NullPointerException◼http://localhost:8080/servl
et_first/servlet/LoginServlet◼http://localhost:8080/servlet_first/servlet/LoginServlet?Username=zhang&password=123452.5请求参数为空的问题��2.5请求参
数为空的问题第1个URL中未指定username的参数值,第2个URL中指定了错误的username参数值(即“Username”中的首字母U不应该大写),这两者都会造成username的值为null,所以username.equals(“zhang”)语句就触发了“NullPoi
nterException”。为了使程序更健壮,就需要加入对参数值是否为null的判断。2.5请求参数为空的问题参数值为””以下URL访问LoginServlet,输出结果是什么?◼http://localhost:8080/servlet_first/servlet/Logi
nServlet?username=&password=�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复选框提交参数在H
TML页面中,文本框、单选按钮等组件所表示的请求参数都是单个值,而复选框、列表框等组件所表示的请求参数则是数组类型。�2.6复选框提交参数<formaction="servlet/CheckboxServlet">Basketball:<inputtype="checkbox"n
ame="balls"value="basketball"><br>Volleyball:<inputtype="checkbox"name="balls"value="volleyball"><br>Footall:<inputtype=
"checkbox"name="balls"value="football"><br><inputtype="submit"name="Submit"><br></form>2.6复选框提交参数因为3个复
选框表达的是同一组请求参数,所以它们的name属性都是一样的(即都是“balls”),此时请求参数balls的值就是数组类型的。HttpServletRequest下的getParameter()方法只能处理单个值,因此为了接收数组类型的参数,就需要调用HttpServletRequest下的
getParameterValues()方法。◼String[]getParameterValues(Stringname)2.6复选框提交参数String[]balls=request.getParameterValues("balls");
PrintWriterout=response.getWriter();if(balls==null){//没有选择3个复选框中的任何一个,则balls为nullout.println("balls=null");out.close();return;}for(S
tringball:balls){out.println("balls="+ball);}out.close();2.7GET请求与POST请求构建一个Servlet的关键就是继承HttpServlet类并重写其中
的doGet()和doPost()方法。GET方式会将请求参数显示在浏览器地址栏中,而POST方式则不会。这是因为GET方式的请求参数是放在HTTP请求报文的报头,而POST方式的请求参数是放在HTTP请求报文的正文。如果请求参数中携带有安全性、敏感性信息(如密码),
则应该使用POST方式;而GET方式十分便于调试程序。2.7GET请求与POST请求值为post时,其以POST方式提交,Servlet会调用doPost()方法来处理请求。值为get或者属性未设置时(如login.html中的<form>标签),则以GET方式提交,Servlet会调用d
oGet()方法来处理请求。<formaction="servlet/LoginServlet"method="post">Username:<inputtype=“text”name="username"><br>Password:<inputtype="t
ext"name="password"><br><inputtype="submit"name="Submit"><br></form>2.7GET请求与POST请求单击“提交”按钮后,两种方式在浏
览器地址栏中生成的URL也不同GET方式:◼http://localhost:8080/servlet_first/servlet/LoginServlet?username=zhang&password=12345POST方式:◼htt
p://localhost:8080/servlet_first/servlet/LoginServlet2.8中文乱码问题Servlet输出乱码out.println("登录成功!")在PrintWriterout=response.getWriter()
语句之前加入代码◼response.setCharacterEncoding("gbk");�2.8中文乱码问题POST参数乱码在username文本框中输入中文字符“张三”在Stringusername=request.getParameter("u
sername")语句之前加入代码◼request.setCharacterEncoding("gbk");�2.8中文乱码问题GET参数乱码http://localhost:8080/servlet_first/servlet/LoginServlet?username=张三&pass
word=12345”除在引用request对象前要加入request.setCharacterEncoding("gbk");还需在Tomcat服务器的conf目录下server.xml文件的<Connector>标签中增加useBodyEncoding
ForURI属性,并设置其值为true�2.9Servlet跳转对于比较复杂的业务功能,经常需要多个Servlet配合实现,这时就需要从一个Servlet跳转到另外一个Servlet,Servlet间的跳转方式可分为转发(forward)和重定向(redirect)两种2.9Servle
t跳转Servlet间的转发通过使用HttpServletRequest的getRequestDispatcher()方法可获取RequestDispatcher对象◼RequestDispatchergetRequestDispatcher(Stringpath)getRequestDi
spatcher()方法的参数path指明了要转发到的目标Servlet的URL路径,其返回值为RequestDispatcher类型的对象。2.9Servlet跳转Servlet间的转发getRequestD
ispatcher()方法只是获取了RequestDispatcher对象,并未执行真正的转发,执行转发操作还需要调用RequestDispatcher的forward()方法◼voidforward(S
ervletRequestrequest,ServletResponseresponse)forward()方法的声明与doGet()方法和doPost()方法类似,在转发时,其将request和respons
e作为参数传递到下一个Servlet,以便其做进一步的处理。2.9Servlet跳转转发时传递对象Servlet转发时传递对象需要利用HttpServletRequest对象来传递数据,需调用的HttpServletRequest的方法的声明如下:◼voidsetAttribute(
Stringname,Objectobject)◼ObjectgetAttribute(Stringname)。2.9Servlet跳转转发时传递对象方法setAttribute()的参数name指定
了放入request的对象的“名字”,此处name的类型是String,用户可任意命名,但要注意将来要按同样名字来取对象;参数object则为真正要放入的需被传递的对象。◼request.setAttribute("u",username);方法getA
ttribute()按参数name指定的“名字”,到request中取出之前由方法setAttribute()放入的对象。◼Stringusername=(String)request.getAttribute("u");
2.9Servlet跳转转发时传递对象在使用forward()方法执行转发时,该方法把request作为参数传递到了下一个Servlet,因为转发前后的两个Servlet引用的是同一个request对象,所以就可借助request来传递数据。2.9Servl
et跳转重定向Servlet之间的重定向是通过javax.servlet.http.HttpServletResponse对象的sendRedirect()方法实现◼publicvoidsendRedirect(Stringlocation)throwsIOExcep
tion重定向时传递参数◼response.sendRedirect(path+"?username="+username+"&password="+password);2.9Servlet跳转转发与重定向转发与重定向之间最重要的区别在
于Servlet跳转中浏览器所发出的请求次数。在Servlet的跳转过程中,无论Servlet出现了多少次的转发,浏览器仅仅只发送了一次HTTP请求,只接收到最后一个Servlet传回的响应。重定向在跳转至另一个Servlet之前,必须先对浏览
器传回响应,浏览器会根据响应报文中的重定向路径发出一个全新的请求以接受重新的处理,所以重定向过程一共需要发出两次HTTP请求。2.9Servlet跳转转发与重定向由于在转发之后,浏览器中URL仍然指向初始页面,此时如果刷新浏览器,初始页面将会被再
次调用。如果不想这样的情况发生(如付款或转账页面),可选择重定向。转发只能在一个Web项目内的资源之间跳转。重定向可跳转至当前Web项目以外的其他资源。2.10Servlet生命周期Servlet的生命周期指的是一个Servlet对象何时被创建、何时被访问、何时被销毁
。一个Servlet对象在首次被访问时创建;之后不管用户多少次访问该Servlet,调用的仍是同一对象,即Servlet在Web应用中是单例的。一个Servlet对象被创建后,直到项目重新发布或Tomcat服务器停机,该对象才会被销毁。2
.11ServletContext接口ServletContext位于javax.servlet包下,其封装了一个Web应用运行时的上下文,也就是Web应用运行时所涉及的环境信息。一个Web应用程序(即MyEclipse下的一个
Web项目)下仅有一个ServletContext对象,因此通过ServletContext可实现跨用户的数据共享,具体需调用的ServletContext方法如下,其与HttpServletContext的属性
方法的声明完全一致。◼voidsetAttribute(Stringname,Objectobject)◼ObjectgetAttribute(Stringname)2.12ServletConfigServletConfig接口位于javax.servlet包下,其封装了
Servlet在web.xml文件中的配置信息每个Servlet对象都有一个仅属于自己的ServletConfig对象。调用ServletConfig的getInitParameter()方法可读取到web.xml配置
文件中<init-param>标签中的用户自定义参数◼StringgetInitParameter(Stringname)小结Servlet是学习JavaWeb开发的重点与难点,这里的Servlet不仅指HttpServlet,还包括HttpServ
letRequest、HttpServletResponse、RequestDispatcher、ServletContext与ServletConfig等,除了要掌握这些接口的常用方法外,还要熟悉它们之间的继承及引用关系,这对理解与掌握Servlet也是非常重要的。小结Servlet
<<interface>>HttpServletServletRequest<<interface>>ServletResponse<<interface>>GenericServletRequestDispatcher<<interface>>ServletConfig<<interface>
>ServletContext<<interface>>HttpServletRequest<<interface>>HttpServletResponse<<interface>>