Servlet学习总结(1)

一、部署文件结构

部署文件结构

二、常见错误

(1)404

a.含义: 404是一个状态码,表示服务器依据请求路径找不到对应的资源。
b.原因:

b1.请求路径写错。
	应该按照http://ip:port/appname/url-pattern来写。
b2.应用没有部署或者部署失败。

(2)500

a.含义:500是一个状态码,表示服务器运行出错。
b.原因:

b1.代码没有严格遵守servlet规范。
比如,没有实现servlet接口或者继承HttpServlet类。
又比如web.xml中将servlet-class写错或者servlet-name不一致。

b2.代码不严谨。
比如,对请求参数没有做检查就做类型转换。

(3)405

a.含义: 一个状态码,表示服务器找不到处理方法。
b.原因:

service方法没有按照正确的格式来写,即没有正确override
HttpServlet的service方法。
step3.添加一个java类(比如DateServlet)

三、Servlet基本书写方法

1、Servelet的java类基本格式

public class DateServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) 
					throws ServletException, 
					IOException {
		
		Date date = new Date();
		SimpleDateFormat sdf = 
				new SimpleDateFormat("yyyy-MM-dd");
		String dateStr = 
				sdf.format(date);
		
		response.setContentType("text/html");
		response.getWriter().println(dateStr);
	}
}

2、.在web.xml文件,配置该Servlet。

<servlet>
	<servlet-name>dateServlet</servlet-name>
	<servlet-class>web.DateServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>dateServlet</servlet-name>
	<url-pattern>/date</url-pattern>
</servlet-mapping>

四、两种请求方式(get/post)

1)get请求

a.哪些情况下,浏览器会发送get请求?
  a1.在浏览器地址输入某个地址。
  a2.表单默认的提交方式。
  a3.点击链接。

b.特点?
  a1.会将请求参数显示在浏览器地址栏,不安全。
	注:
		有一些网络设备,比如路由器,会记录请求地址。
  a2.会将请求参数添加到请求资源路径的后面,只能提交少量的
	数据给服务器。
	注:
		请求行大约只能存放2k左右的数据。

2)post请求

a.哪些情况下,浏览器会发送post请求?
 a1.将表单的method属性设置为post。
b.特点?
 b1.不会将请求参数显示在地址栏,相对安全一些。
 注:
	http协议并不会对数据包中数据进行加密,所以,对于
	敏感数据,一定要加密。
 b2.会将请求参数添加到实体内容里面,可以提交大量的数据
给服务器。

五、servlet输出中文,如何处理乱码问题?

(1)为什么会产生乱码?

out.println方法默认会使用iso-8859-1来编码。

(2)如何处理?

/*
 * 1.设置content-type消息头的值。
 * 2.out.println方法会使用指定的字符集来编码。
 */
response.setContentType("text/html;charset=utf-8");

六、读取请求参数值

(1)String request.getParameter(String paramName);

注:
	如果请求参数名与实际传递过来的请求参数名不一致,会获得
	null值。
	一般时通过表单的name属性寻找对应的值

(2)String[] request.getParameterValues(String paramName);

注:
	有多个请求参数名相同时,使用此方法。
	对于多选框,如果没有选择任何选项,会获得null值。
	一般时通过表单的name属性寻找对应的值

七、表单包含有中文参数值,如何处理乱码问题?

(1)为什么会有乱码?

     表单提交时,浏览器会对中文参数值进行编码(比如,使用utf-8来编码),
服务器端默认会使用iso-8859-1来解码,所以,会产生乱码。

注:
	浏览器会使用打开该表单所在的页面时的字符集来进行编码。

(2)如何解决?

1)post请求

	/*
	 * 设置请求参数值的解码方式。
	 * 注:
	 * 	a.该方法一定要添加到所有的getParameter
	 * 方法的前面。
	 *  b.该方法只针对post请求有效。
	 */
	request.setCharacterEncoding("utf-8");

2)get请求

修改server.xml,<Connector URIEncoding="utf-8"/>
注:
	如果是tomcat8.0及以上版本,可以不用加。

八、重定向

(1)什么是重定向?

服务器通知浏览器向某个地址发送请求。

注:
	服务器可以通过发送302状态码及location消息头(该消息头的值是一个地址,一般称之为重定向地址)给浏览器,浏览器收到之后,会
	立即向重定向地址发送请求。

(2)如何重定向?

response.sendRedirect(String url);

注:
	url就是重定向地址。
	重定向之前,服务器会清空response对象上存放的所有数据。

(3)重定向的特点

a.重定向的地址是任意的。

b.重定向之后,浏览器地址栏的地址会发生变化。

九、转发

(1)什么是转发?

一个web组件将未完成的处理交给另外一个web组件继续做。

注:
	web组件是servlet和jsp的统称。
	常见的情况是一个servlet获得数据之后,转发给一个jsp来
	展现这些数据。

(2)如何转发?

step1.绑订数据到request对象上。

request.setAttribute(String name,Object obj);
注:
	name称之为绑订名,obj称之为绑订值。
	内部的实现,实际上是将数据放到了一个map对象里面。 

step2.获得转发器。

RequestDispatcher rd = 
	request.getRequestDispatcher(String uri);
注:
	a.RequestDispatcher是一个接口,该方法会返回一个实现了
	该接口的对象(即转发器)。
	b.uri是转发的目的地,通常是一个jsp的地址。
	c.RequestDispatcher可以理解为是一个媒介,web组件
	可以通过RequestDispatcher来通知容器去调用另外一个web
	组件。
	d.转发的本质是一个web组件通知容器去调用另外一个web组件。

step3.转发

rd.forward(request,response);		

(3)转发的特点

a.转发之后,浏览器地址栏的地址不变。

b.转发的目的地有限制,要求属于同一个web应用。

十、 比较转发与重定向

a.浏览器地址栏的地址有无变化?

重定向之后,浏览器地址栏的地址会发生变化;
转发之后,浏览器地址栏的地址不变。

b.目的地有无限制?

重定向地址没有任何限制,转发有限制(要求属于同一个web应用)。

c.能否共享request对象?

转发所涉及的各个web组件可以共享同一个request对象,
重定向不行。
注:
	c1.容器收到请求之后,会立即创建request对象和response
	对象,一旦响应发送完毕,容器会立即删除这两个对象。
	即request对象和response对象的生存时间很短暂(在
	一次请求与响应期间存在)。

	c2.重定向是两次请求,上次请求创建的request对象和response
	对象已经被删除。

d.转发是一件事没有做完,让另外一个web组件继续做;而重定向是一件事已经完成,去做另外一件独立的事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值