Servlet02

HttpServletRequest

HttpServletRequest在JavaWeb中非常重要的一个类。它是Servlet的service()方法的参数之一!所以你必须必须要掌握它!
request的功能可以分为以下几种:
 封装了请求头数据;
 封装了请求正文数据,如果是GET请求,那么就没有正文;
 request是一个域对象,可以把它当成Map来添加获取数据;
 做请求的转发

  • request获取请求头数据
  String getHeader(String name):获取指定名称的请求头;
 Enumeration getHeaderNames():获取所有请求头名称;
 int getIntHeader(String name):获取值为int类型的请求头。
	
  • request获取请求相关的其它方法

 -int getContentLength():获取请求正文的字节数,GET请求没有正文,没有正文返回-1;
	String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded(理解为字符串类型),其它类型以后再学;
	String getMethod():返回请求方法,例如:GET
	Locale getLocale():返回当前客户端浏览器支持的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;
	String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null。表示使用ISO-8859-1编码;
	void setCharacterEncoding(String code):设置请求编码,只对正文有效!注意,对于GET而言,没有正文!!!所以此方法只能对POST请求中的参数有效!
http://localhost:8080/hello/oneServlet?name=zhangSan
	String getContextPath():返回上下文路径,例如:/项目名称
	String getQueryString():返回请求URL中的参数,例如:name=zhangSan
	String getRequestURI():返回请求URI路径,例如:/hello/oneServlet
	StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;
	String getServletPath():返回Servlet路径,例如:/oneServlet
	String getRemoteAddr():返回当前客户端的IP地址;
	String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
	int getRemotePort():返回客户端的端口号,每次请求都会变;
	String getSchema():返回请求协议,例如:http;
	String getServerName():返回主机名,例如:localhost
	int getServerPort():返回服务器端口号,例如:80
  • HttpServletRequest获取参数(重要)

1 HttpServletRequest获取参数方法
可以使用HttpServletRequest获取客户端的请求参数,相关方法如下:
 String getParameter(String name):通过指定名称获取参数值;
 String[] getParameterValues(String name):通过指定名称获取参数值数组,有可能一个名字对应多个值,例如表单中的多个复选框使用相同的name时;
 Enumeration getParameterNames():获取所有参数的名字;
 Map getParameterMap():获取所有参数对应的Map,其中key为参数名,value为参数值。

  • 传递参数的方式 GET和POST
    GET:
     地址栏中直接给出参数:http://localhost/param/ParamServlet?p1=v1&p2=v2;
     超链接中给出参数:<a href=” http://localhost/param/ParamServlet?p1=v1&p2=v2”>???
     表单中给出参数:…
     Ajax暂不介绍

    POST:
     表单中给出参数:…
     Ajax暂不介绍

  • 单值参数的接收
    单值参数包括:单选,单值下拉框,文本,隐藏域
    无论是GET还是POST,获取参数的方法是相同的。
    request.getParameterValues(String)
    request.getParameter(String)

String s1 = request.getParameter(“p1”);//返回v1
String s2 = request.getParameter(“p2”);//返回v2
  • 多值参数接收
    多值参数主要就是多选checkbox
    例如在注册表单中,如果让用户填写爱好,那么爱好可能就是多个。那么hobby参数就会对应多个值:
    request.getParameterValues()
 <form action="ParamServlet" method="post">
		上网:<input type="checkbox" name="hobby" value="netplay" /><br/>
		踢球:<input type="checkbox" name="hobby" value="football" /><br/>
		看书:<input type="checkbox" name="hobby" value="read" /><br/>
		编程:<input type="checkbox" name="hobby" value="programme" /><br/>
    	<input type="submit" value="提交"/><br/>
    </form>
	// 获取所有名为hoby的参数值
	String[] hobbies = request.getParameterValues("hobby");
	System.out.println(Arrays.toString(hobbies));

request.getParameterMap()

方法返回Map类型,对应所有参数。其中Map的key对应参数的名字;Map的value对应参数的值。

 <form action="ParamServlet" method="post">
		姓名:<input type="text" name="name"/><br/>
		年龄:<input type="text" name="age"/><br/>
		性别:<input type="text" name="sex"/><br/>
    	<input type="submit" value="提交"/><br/>
    </form>
Map<String,String[]> map = request.getParameterMap();
Set<String> keys = map.keySet();
for(String key : keys) {
	String[] value = map.get(key);
	System.out.println(key + " = " + value[0]);
}

sex = male
name = zhangSan
age = 23
  • Request的获得中文乱码处理
    处理POST编码问题

    request的setCharacterEncodng()可以设置编码

    当然这必须在调用所有的getParameter()方法之前调用request的setCharacterEncodng()方法来设置编码,这样,就不会使用ISO解读字节串了,而是使用你给定的编码来解读。

	request.setCharacterEncoding("UTF-8");
	String name = request.getParameter("name");
	System.out.println(name);
 当我们采用get请求 上述的post的处理方式不再生效

我们可以采用字符串转码的方式来处理

String s = request.getParameter(“s”);
s = new String(s.getBytes(“iso-8859-1), “utf-8);
  • HttpServletRequest请求转发(服务器端跳转forward)
    Request的请求转发也可以叫做服务器端的跳转,虽然有页面的跳转但是我们会发现地址栏是不会有变化的。

    req.setAttribute(“msg”,“登录成功!”);

    request.getRequestDispatcher("/success.html").forward(request, response);

  • request域的作用范围

    request的也是域对象,它的作用范围小的多,它的范围只在一次请求响应范围之内,每一个线程的请求都会新产生一个HttpServletRequest和HttpServletResponse的对象

    HttpServletResponse

    request是请求对象,而response是响应对象。

  • HttpServletResponse功能介绍

    response对象的功能分为以下四种:
     设置响应头信息;addHeader(“reFresh”, “5;URL=xxxx”);
     发送状态码;sendError(404);
     设置响应正文;getWriter().print(“fdsfdsa”);
     重定向:sendRedirect(“path”);

  • 设置状态码及其他方法
     response.setContentType(“text/html;charset=utf-8”):设置响应类型为html,编码为utf-8,处理相应页面文本显示的乱码;
     response.setCharacterEncoding(“utf-8”):如果响应类型为文本,那么就需要设置文本的编码类型,然后浏览器使用这个编码来解读文本。注意,如果没有设置contentType,那么浏览器会认为contentType为text/html,如果没设置编码,那么默认为ISO-8859-1编码。所以以上两点在使用response返回结果之前必须设置。
     response.setStatus(200):设置状态码;
     response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。

  • 设置响应头信息

     response.setHeader(“contentType”, “text/html;charset=utf-8”):与setContentType()方法的功能相同。setContentType()方法属于便捷方法;
    刷新(定时重定向):
     response.setHeader(“Refresh”,“5; URL=http://www.baidu.com”):5秒后自动跳转到百度主页。

    /**

            * forward和redirect的区别
            * 
    
              resp.getWriter().write("登录成功!resp");
    
    
            * forward:是服务器端的跳转,地址栏不发生变化
    
            * redirect:是客服端的跳转,地址栏发送变化
    
            */
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
要在Eclipse中编译和运行Servlet,您需要遵循以下步骤: 1. 首先,确保您已经安装了Java Development Kit(JDK)并将其配置为Eclipse的默认JDK。您可以在Eclipse的“Window”菜单下的“Preferences”中找到JDK设置。 2. 创建一个新的动态Web项目。在Eclipse的“File”菜单中,选择“New”>“Dynamic Web Project”。在弹出的对话框中,输入项目的名称和目标运行时,并单击“Finish”来创建项目。 3. 在创建的项目中,右键单击“src”文件夹,选择“New”>“Servlet”。在“Servlet Name”字段中输入您想要的Servlet名称,并单击“Next”。 4. 在“Java package”字段中指定Servlet所属的包,并选择合适的类和方法。然后,单击“Finish”以生成Servlet类。 5. 编写您的Servlet代码。在生成的Servlet类中,您可以重写doGet()、doPost()或service()方法来处理HTTP请求和响应。 6. 确保您已经下载和配置了Java Servlet API。如果没有,请从官方网站下载并将其添加到类路径中。 7. 准备部署项目。在项目导航器中,右键单击项目名称,选择“Properties”。然后选择“Deployment Assembly”,确保您的Java Servlet API库已经包含在部署路径中。 8. 单击“Apply”保存更改并关闭对话框。 9. 最后,右键单击项目并选择“Run As”>“Run on Server”。选择适当的服务器(如Tomcat)并单击“Finish”以运行项目。 这样,您就可以在Eclipse中成功编译和运行Servlet了。在浏览器中访问相应的URL时,您将能够查看Servlet的输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值