Servlet基础
第1关:实现第一个servlet程序
-
任务描述
本关任务:实现第一个Servlet程序。 -
相关知识
由于大多数Web应用都是通过HTTP协议和客户端进行交互,且在实际开发servlet中多是编写基于HTTP协议请求的servlet,在Servlet 接口中,专门提供了一个抽象类javax.servlet.http.HttpServlet,它是GenericServlet的子类(GenericServlet是Servlet接口的实现类),专门用于创建应用于HTTP协议的Servlet。为了读者可以更好地了解实际开发中的servle程序实现,本案例将演示如何编写基于HTTP协议请求的servlet。 -
实现思路
- 创建FirstServlet类继承Httpservlet类
- 重写开发常用的方法doGet()和doPost()并完成处理操作
- 对于该servlet的访问请求在浏览器中显示:第一个servlet程序!
- 提交测试
-
编程要求
根据提示,在右侧编辑器注明的代码编写区域补充代码,并提交测试。 -
测试说明
平台会对你编写的代码进行测试: -
测试输入:无
-
预期输出:
第一个servlet程序! -
提示:
-
输出:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//代码写在标记区间之内
/******Begin******/
response.setContentType("text/html;charset=utf-8");
response.getWriter().append("第一个servlet程序!");
/******End********/
}
第2关:ServletConfig接口
-
任务描述
本关任务:掌握ServletConfig对象的使用 -
相关知识
在Servlet运行期间,经常需要一些辅助信息,这些信息可以使用注解@WebServlet或者在web.xml文件中使用一个或多个元素进行配置。当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中。为了让初学者熟悉ServletConfig对象,本关任务将使用ServletConfig对象读取配置文件中的参数。 -
设计思路
1) 在代码编写区间编写代码实现
2) 在代码区间中,用getInitParameterNames()方法获得所有参数名, 用getInitParameter()方法获取所有参数的值
3) 将参数的名称key和值value以 key:value 的形式输出 -
测试说明
平台会对你编写的代码进行测试: -
测试输入:无
-
预期输出:
author:xman
company:GDCVI -
提示:
-
输出:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 代码写在标记区间之内
/****** Begin ******/
PrintWriter out = response.getWriter();
response.setHeader("Content-type","text/html; charset=UTF-8");
ServletConfig cfg = getServletConfig();
Enumeration<String> names = cfg.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
String value = cfg.getInitParameter(name);
out.println(name + ":" + value);
}
/****** End ********/
}
第3关:ServletContext接口
-
任务描述
本关任务:掌握用ServletContext对象实现多个Servlet对象数据共享。 -
相关知识
由于一个Web应用中的所有Servlet共享同一个ServletContext对象,因此ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。为了让初学者熟悉ServletContext对象,本关将演示用ServletContext对象实现多个Servlet对象的数据共享 -
设计思路
统计网站的访问次数:
1) 本关需要完成两个Servlet代码编写,FirstContext用于存储,SecondContext用于显示,可以通过点击代码区左上角代码文件切换不同的文件进行编辑。
2) 在类FirstContext中的init()方法中给次数(count)设置一个初始值101,存入到 ServletContext中。
3) 在类SecondContext中,每次访问doGet()方法就会执行 count + 1,并将count值存入到 ServletContext中。
4) 在类SecondContext中用getAttribute ("count")方法获取到count值,并按照测试说明要求将结果输出到浏览器。 -
测试说明
平台会对你编写的代码进行测试: -
测试输入:无
-
预期输出:
你是本站第102次访客! -
测试输入:
-
预期输出:
-
提示:
-
输出:
FirstContext.java:
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
//代码写在标记区间之内
/******Begin******/
int count = 101;
ServletContext context = this.getServletContext();
context.setAttribute("count", count);
/******End********/
}
SecondContext.java
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//代码写在标记区间之内
/******Begin******/
ServletContext context = this.getServletContext();
int count = (Integer)context.getAttribute("count");
count++;
context.setAttribute("count", count);
response.setHeader("Content-type","text/html; charset=UTF-8");
response.getWriter().append("你是本站第" + count + "次访客!");
/******End********/
}
请求和响应
第1关:通过 response 对象刷新网页
-
任务描述
本关任务:编写一个网页定时刷新并跳转的功能。 -
相关知识
为了完成本关任务,你需要掌握 HttpServletResponse 对象的常用方法和应用。 -
编程要求
在右侧编辑器 Begin-End 之间补充代码,编写一个模拟用户登录成功2秒后跳转至百度首页的功能,在配置文件中将 Servlet 的访问路径设置为/ServletDemo1。 -
测试说明
平台会对你编写的代码进行测试
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/********** Begin **********/
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("用户注册成功,2秒后跳转到百度首页");
response.setHeader("Refresh", "2;url=http://www.baidu.com");
/********** End **********/
}
第2关:通过 request 对象传递数据
-
任务描述
本关任务:编写一个通过 HttpRequest 获取,设置和移除对象的程序。 -
相关知识
为了完成本关任务,你需要掌握 HttpRequest 对象的作用和常用方法。 -
编程要求
在右侧编辑器 Begin-End 之间补充代码,完成使用 HttpRequest 对象传递数据的功能,具体要求如下:
- 首先使用 HttpRequest 对象获取属性为username的对象并强转为字符串对象输出;
- 使用 HttpRequest 对象设置 username 的属性值为张三并将其输出;
- 使用 HttpRequest 移除username属性,再次输出;
- 将 Servlet 的访问路径设置为/ServletDemo2,另外特别注意不要删除通过关卡中的 Servlet 配置,否则会通不过关卡,后面关卡也一样,不再做提示。
- 测试说明
平台会对你编写的代码进行测试
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/********** Begin **********/
response.setContentType("text/html;charset=utf-8");
String username = (String) request.getAttribute("username");
response.getWriter().write(username);
request.setAttribute("username", "张三");
username = (String) request.getAttribute("username");
response.getWriter().write(username);
request.removeAttribute("username");
username = (String) request.getAttribute("username");
response.getWriter().write(username);
/********** End **********/
}
第3关:请求转发
-
任务描述
本关任务:编写一个 Servlet 请求之间转发数据的程序。 -
相关知识
为了完成本关任务,你需要掌握 HttpServletRequest 请求转发的三种使用方式以及他们的区别。 -
编程要求
在右侧编辑器 Begin-End 之间补充代码,完成 ServletDemo3 向 ServletDemo4 转发(forward)数据的程序,具体要求如下:
- 将 ServletDemo3 的访问路径设置为/ServletDemo3,并在类中添加userId属性,值为001;
- 当访问/ServletDemo3时转发至/ServletDemo4;
- 将 ServletDemo4 的访问路径设置为/ServletDemo4,并获取 ServletDemo3 中的userId进行输出;
- 在 ServletDemo4 中模拟获取用户userId对应的信息,即用输出语句将信息输出至网页。信息包括用户名张三,用户年龄20;
具体输出信息格式参考测试说明。
编写在一个 servlet 查询到用户id,然后请求转发到另外一个 servlet,再通过该用户 id 来获取用户信息进行响应。
- 测试说明
平台会对你编写的代码进行测试
web.xml:
<!-- ********** Begin ********** -->
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>com.educode.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo3</servlet-name>
<url-pattern>/ServletDemo3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/ServletDemo4</url-pattern>
</servlet-mapping>
<!-- ********** End ********** -->
ServletDemo3.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/********** Begin **********/
String userId = "001";
request.setAttribute("userId",userId);
// 转发到ServletDemo4
response.getRequestDispatcher("/ServletDemo4").forward(request, response);
/********** End **********/
}
ServletDemo4.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/********** Begin **********/
//设置输出格式
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String userId = (String)request.getAttribute("userId");
out.println("查询编号为" + userId + "的用户信息如下:");
out.println("用户名为:张三");
out.println("用户年龄为:20");
/********** End **********/
}
第4关:请求包含
-
任务描述
本关任务:编写一个 Servlet 请求之间转发数据的程序。 -
相关知识
完成本关需要具备的知识介绍请参见第三关卡。 -
编程要求
在右侧编辑器 Begin-End 之间补充代码,完成 UserServlet 向 OrderServlet 请求转发数据的程序,具体要求如下:
- 使用请求包含(include)的方式;
- 将 UserServlet 的访问路径设置为/UserServlet,并在类中输出用户名为:张三的信息到网页中;
- 当访问/UserServlet时转发至/OrderServlet;
- 在 UserServlet 中编写转发语句后再次编写一个输出语句到网页上,内容为:查询结束;
- 将 OrderServlet 的访问路径设置为/OrderServlet,并模拟获取用户张三对应的订单信息,即用输出语句将信息输出至网页。信息内容为:订单编号:001,订单内容:苹果手机。
具体的输出信息请参考测试说明中图片内容
web.xml:
<!-- ********** Begin ********** -->
... ...
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>OrderServlet</servlet-name>
<url-pattern>/OrderServlet</url-pattern>
</servlet-mapping>
<!-- ********** End ********** -->
UserServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/********** Begin **********/
PrintWriter out = response.getWriter();
out.println("用户名为:张三");
request.getRequestDispatcher("/OrderServlet").include(request, response);
out.println("查询结束");
/********** End **********/
}
OrderServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/********** Begin **********/
PrintWriter out = response.getWriter();
out.println("订单编号:001");
out.println("订单内容:苹果手机");
/********** End **********/
}
标签:username,count,End,request,技术,Servlet,response
From: https://www.cnblogs.com/leiteorz/p/17737002.html