servlet小结 请求转发和重定向的区别
servlet小结
package com;
class AA extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse) throws IOException,ServletException
{
PrintWriter out = response.getWriter();
out.println("<html></html>");
}
doPost
}
|----web.xml
在web.xml中配置servlet
<servlet>
<servlet-name>AA</servlet-name><servlet-class>com.AA</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AA</servlet-name>
<url-pattern>/Hello.do</url-pattern>
</servlet-mapping>
服务器的操作方法
catalina.bat start||stop
初始化,服务,销毁
inti service destroy
flag = true;
while(flag){
Sockcet s = socket.accept();
s.getWriter();
HTTP数据包中的数据
String method = "get";
String uri = "/Hello.do";
查找web.xml配置文件,找到要访问的Servlet的信息
String className = "com.AA";
//AA a = new AA();
Object(Servlet/HttpServlet) obj = Class.forName(className).newInstance();
HttpServletRequest request = new HttpServletRequest();
//把HTTP数据包中,的用户提交的数据和浏览器的附加信息等封装到request
HttpServletResponse response = new HttpServletResponse();
//在response中封装请求客户端的流对象
Runnable st = new St(obj,method,request,response);
Thread t = new Thread(st);
t.start();
}
class St implements Runnable
{
private Servlet s;
private String method;
private HttpServletRequest request;
private HttpServletResponse response;
public St(Servlet s,method,request,response)
{
this.s = s;
this.method = method;
this.request = request;
this.response = response;
}
public void run()
{
if("get".equalsInca(method))
{
s.doGet(request,response);
}
else
{
s.doPost(request,response);
}
}
}
class AA
{
static
{
}
}
1.获取用户提交的数据
2 获取客户端附件的信息
3.处理数据(存储到数据库中,)
4.给用户一个新的响应
5.在响应中添加附加信息。
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
String str = request.getParameter("key");
String[] str = request.getParameterValues("key");
修改server.xml
<connector URIEncoding="utf-8"
String h = request.getHeader("key");
Enumeration e = request.getHeaderNames();
练习一:
编写一个Servlet,用FireFox来访问这个Servlet,显示出你好,火狐!如果是使用IE浏览器来访问Servlet,显示出你好,微软!如果是其它牌子的浏览器访问这个Servlet,显示出我不认识
你!
练习二:
编写一个Servlet,如果客户端浏览器的语言设置为en-US,那么显示出Hello,美国佬!
如果浏览器的语言是中文的话,显示你好,聪明的中国人!如果是日文的话,显示XXXXXX
关于Servlet线程安全性的问题!
练习三:
编写一个Servlet,用来完成计数功能。(线程安全)
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
</form>
byte[]
流方式获取字节方式的数据。
响应:
//设置响应类型
字符型的响应
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html></html>");
response.sendError(500,"fdsafafdsa");
字节型响应
response.setContentType(MIME类型);
OutputStream os = response.getOutputStream();
os.write();
练习四:
编写一个Servlet,客户端访问这个Servlet的时候,将服务器端C:\的一个1.pdf的文件返回给客户端浏览器,并且客户端浏览器可以用查看pdf文件的软件来查看相应。
文件的下载:
response.setContentType("bin");
//在响应中添加了附加的信息
response.addHeader("Content-Disposition", "attachment;filename=\""
+ "aa.jpg" + "\"");
练习五:
编写一个HTML页面,
1.doc下载
aa.jpg下载
bb.mp3下载
重定向和请求转发的区别:
Servlet中利用响应完成重定向的工作:
response.sendRedirect(URL);
1.转发一次请求/响应的过程,而重定向是两次请求/响应的过程
2.转发地址栏的地址不变化,而重定向地址会发生变化。
3.转发方式可以利用request对象来传递数据,而重定向不能利用request传递数据。
4.如果是插入数据,更新数据,删除数据以后到结果页面应该采用重定向的方式。
最后更新:2017-04-03 15:21:51