JavaWeb5.docx
- 文档编号:10110263
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:24
- 大小:189.28KB
JavaWeb5.docx
《JavaWeb5.docx》由会员分享,可在线阅读,更多相关《JavaWeb5.docx(24页珍藏版)》请在冰点文库上搜索。
JavaWeb5
0420–JavaWeb之ServletRequest/ServletResponse
王健,549051701
1、今天技术点
1:
Servlet的体系结构图
Servlet,GeneericServlet,HttpServlet,ServletConfig关系作用。
再详解HttpServlet的功能。
1、ServletRequest详解
a)ServletRequest与http协议的请求协议
b)ServletRequest的继承关系图
c)ServletRequest的生命周期。
d)ServletRequest的功能
i.获取用户提交的参数。
1.包括上传的文件和一般数据
ii.获取客户端的数据
iii.封装数据
1.重要的域对象。
iv.执行转发
e)Request与路径问题。
f)Request与中文乱码问题。
2、ServletResponse详解
a)ServletResponse与响应协议。
b)继承关系图
c)生命周期
d)功能
i.设置响应头
ii.输出数据
iii.执行重定向
iv.下载文件.
e)response与路径问题
3、转发与包含技术
a)Forward转发与数据共享。
b)Include转发与数据共享。
4、页面重定向技术。
4、HTTP协议再解。
a)请求协议
i.组成部分
b)响应协议
i.组成细节
5、Url和UrlConnection访问web服务
a)具体方法。
b)发送get请求。
获取参数值。
c)发送post请求获取参数值。
1、Servlet的结构:
什么是Servlet?
a)服务器端的程程。
b)功能
i.接收用户的请求。
ii.响应用户的输出
iii.动态的生成html.
Servlet的生命周期。
c)Init(ServletConfig)
d)Service(ServletRequestre,servletresponseresp)
e)Destory
i.生:
当用户第一次访问时,或是配置了
GenericServlet和HttpServlet类。
以下是Servlet的结构:
以下调用的过程:
如果你继承了HttpServlet,你就是重写了service方法
1:
如果你重写service(ServletRequest,ServletResponse)
则请求时直接请求你的这个方法。
publicclassOneServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
System.err.println("1:
你好这是doGet...");
System.err.println("你好这是doGet...");
System.err.println("你好这是doGet...");
}
//如果添加了service方法只会请求到service方法,则不会再请求到doxxx方法
//此方法接收所有类型的请求
@Override
publicvoidservice(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
System.err.println("3:
这是第二个service...");
}
}
2:
继承了HttpServlet后,一个方法都不写
如果在继承了HttpServlet类以后,如果一个方法都没有添加,当发出请求时,则在httpServlet上默认的会抛出一个405异常。
4xx–在你的类中找不到doXxx方法。
2、HttpServletRequest
此类主要工作:
1:
接收用户的参数。
Req.getParameter();
Req.getParameterValue();
Req.getParametermap();
Req.getQueryString();
用户在表单上
在url的后面提交参数
http:
//localhost:
8080/project/one?
name=Jack&age=90
获取参数的方式:
request.getParameter(“name”);-永远返回的类型是String
request.getParameterValues(“hoby”);:
String[]
request.getParematerMap()–返回封装好的用户的所有参数,直接放到map中。
Request.getQueryString()–获取以get方式提交的url?
号后面的所有。
name=Jack&age=90
1.1、获取get的参数
/**
*用http:
//localhost:
8080/0420/servlet/TwoServlet?
name=Jack&age=90
*&addr=山东济南&hoby=TV&hoby=Climb&hoby=Read
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//声明响应的类型
response.setContentType("text/html;charset=UTF-8");
//从响应的对象中获取输出对象,用于向用户的页面输出信息
PrintWriterout=response.getWriter();
//获取name的值,name是唯一的
Stringnm=request.getParameter("name");//获取到数据还是iso\
Stringage=request.getParameter("age");
Stringaddr=request.getParameter("addr");
addr=newString(addr.getBytes("ISO-8859-1"),"UTF-8");
//获取所有爱好
String[]hobys=request.getParameterValues("hoby");
//显示到用户的页面上
Stringstr="你好:
"+nm+",你的年龄:
"+age+",地址:
"+addr+",你的爱好是:
";
for(Stringhb:
hobys){
str+="
"+hb;
}
out.print(str);
}
页面的写法:
ThisismyJSPpage.
--对于中文应该用js脚本先进行url编码-->
_go();">请求get方法 function_go(){ varurl="servlet/TwoServlet? name=张三&age=45&addr=山东济南北&hoby=TV&hoby=Reader"; alert(url); //在脚本中对url进行编码-url编码 url=encodeURI(url); alert(url); //发出请求 window.location=url; } 以下是通过getParameterMap, publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //声明响应的类型 response.setContentType("text/html;charset=UTF-8"); //从响应的对象中获取输出对象,用于向用户的页面输出信息 PrintWriterout=response.getWriter(); //获取name的值,name是唯一的 Stringnm=request.getParameter("name");//获取到数据还是iso\ nm=newString(nm.getBytes("ISO-8859-1"),"UTF-8"); Stringage=request.getParameter("age"); Stringaddr=request.getParameter("addr"); addr=newString(addr.getBytes("ISO-8859-1"),"UTF-8"); //获取所有爱好 String[]hobys=request.getParameterValues("hoby"); //显示到用户的页面上 Stringstr="你好: "+nm+",你的年龄: "+age+",地址: "+addr+",你的爱好是: "; for(Stringhb: hobys){ str+=" } out.print(str); out.print(" Map //以? name=Jack=>{name=["Jack"],hoby=["TV","Reader"]} out.print("nameis: "+params.get("name")[0]); out.print(" "+params.get("hoby")[1]); //获取? 号后面的所有参数 Stringps=request.getQueryString(); out.print(" out.print(ps); //将信息转回 ps=URLDecoder.decode(ps,"UTF-8"); out.print(" } 以下再用post提交,后面接收数据: 页面的设计: 开发页面: Name: type="text"name="age"> name="addr"> name="body">看电视 name="body">读书 name="body">足球 开发后台的接收信息: publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //声明响应的类型 response.setContentType("text/html;charset=UTF-8"); //从响应的对象中获取输出对象,用于向用户的页面输出信息 PrintWriterout=response.getWriter(); //只要是在这儿写一句就可以处理所有中文参数的乱码 //此方法对get无效。 因为此方法只支处理http协议正文部分的编码 request.setCharacterEncoding("UTF-8"); Stringnm=request.getParameter("name"); Stringage=request.getParameter("age"); Stringaddr=request.getParameter("addr"); //获取所有爱好 String[]hobys=request.getParameterValues("hoby"); //显示到用户的页面上 Stringstr="POST: 你好: "+nm+",你的年龄: "+age+",地址: "+addr +",你的爱好是: "; if(hobys! =null){ for(Stringhb: hobys){ str+=" } }else{ str+="你没有爱好"; } out.print(str); out.print(" } 重点: 对于request.setCharacterEncoding(UTF-8);来说,只能post有用。 对get无效。 因为这句话的意义是设置http请求正文的数据为utf-8编码: 2: 包装客户端的信息. 如: 请求类型+req.getMethod()=post|get|trace|put 就是获取窗户端面的请求的http协议中的所有信息: 2.1、getContextPath–获取项目的上下文根 java.lang.String getContextPath() ReturnstheportionoftherequestURIthatindicatesthecontextoftherequest. Http: //local: 8080/0420/someServlet=/0420 http: //local: 8080/0420/servler/TwoServler=/0420 就是项目的根。 只要是超连接,则以/开始是指服务器的根目录。 不以/开始是指当前目录下。 2.2、getDateHeader–获取时间头 long getDateHeader(java.lang.String name) ReturnsthevalueofthespecifiedrequestheaderasalongvaluethatrepresentsaDateobject. 2.3、获取所有头信息 java.lang.String getHeader(java.lang.String name) ReturnsthevalueofthespecifiedrequestheaderasaString. java.util.Enumeration getHeaderNames() Returnsanenumerationofalltheheadernamesthisrequestcontains. java.util.Enumeration getHeaders(java.lang.String name) ReturnsallthevaluesofthespecifiedrequestheaderasanEnumerationofStringobjects. 2.4、获取用户的请求类型 java.lang.String getMethod() ReturnsthenameoftheHTTPmethodwithwhichthisrequestwasmade,forexample,GET,POST,orPUT. publicclassFourServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/html;charset=UTf-8"); PrintWriterout=response.getWriter(); Stringref=request.getHeader("Referer"); System.err.println("你来自于: "+ref); out.print(ref); out.print(" StringmethodType=request.getMethod(); out.print(" "+methodType); Stringprotocol=request.getProtocol(); out.print(" "+protocol); out.print(" out.print(" out.print(" "+request.getContentType());// Enumeration while(en.hasMoreElements()){ Stringkey=en.nextElement(); out.print(" } out.print(" out.print(" if(ref==null||! ref.contains("0420")){ out.print("你先看点广告 }else{ out.print(" out.print(" } } @Override publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doGet(req,resp); } } 2.5、获取路径信息 java.lang.StringBuffer getRequestURL() ReconstructstheURLtheclientusedtomaketherequest. java.lang.String getServletPath() Returnsthepartofthisrequest'sURLthatcallstheservlet 3、使用一个重要的域对象-来封装数据 在javaweb中就只三个域对象: ServletRequest(请求)–范畴最小。 生命周期最短。 Session(会话)-只能某一个用户有效。 ServletContext(程序级的对象)一个项目就只有一个此对象。 Request对象就像是一个map一样,指定key和value来保存信息 java.lang.Object getAttribute(java.lang.String name) ReturnsthevalueofthenamedattributeasanObject,ornullifnoattributeofthegivennameexists. 根据用户给定的名称(key)获取一个之前保存到request中的对象。 2 java.util.Enumeration getAttributeNames() ReturnsanEnumerationcontainingthenamesoftheattributesavailabletothisrequest. 只获取所有name的名称。 void removeAttribute(java.lang.String name) 根据指定的name删除已经存在的value值。 void setAttribute(java.lang.String name,Object) 保存信息。 -1 示例代码: publicclassFiveServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/html;charset=UTF-8"); PrintWriterou
"+hb;
hobyis:
"+ps);
age:
addr:
爱好:
"+hb;
type:
protocol:
"+request.getRequestURI());//请求资源
发送数据的长度"+request.getContentLength());
类型:
"+key+"=="+request.getHeader(key)+"
");
");
");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaWeb5
![提示](https://static.bingdoc.com/images/bang_tan.gif)