servlet应用【重点】-

1.request对象

 是当客户端向服务器端发送请求时,服务器为本次请求创建request对象,并在调用Servlet的service方法时,将该对象传递给service方法。Request对象中封装了客户端发送过来的所有的请求数据。

①:doGet()方法接收request数据

  • 编写html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="/SecondServlet/regist" method="get"> 用户名:<input type="text" name="username"/> 密码:<input type="text" name="password"/> <input type="submit" value="注册"> </form> </body> </html>

  • 编写doGet()方法

@WebServlet("/regist") public class RegistServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username + " " + password); } }

②:doPost()方法接收request数据

  • 编写html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="/SecondServlet/regist" method="post"> 用户名:<input type="text" name="username"/> 密码:<input type="text" name="password"/> <input type="submit" value="注册"> </form> </body> </html>

  • 编写doPost()方法

@WebServlet("/regist") public class RegistServlet extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username + " " + password + "dopost"); } }

③:请求乱码问题

由于request是接收来自用户的请求,服务器会根据编码格式将请求转换。服务器端默认的编码格式为ISO-8859-1(此编码不支持中文),而我们用户浏览器默认是utf-8的编码格式,所以往往会产生乱码。要想解决乱码问题,需要设置request当中的编码格式,告诉服务器以何种形式来解析数据。或者在接收到乱码以后,通过何种编码格式进行还原

方式一:

request.setCharacterEncoding("UTF-8");

该方法只针对POST有效(必须在接收数据之前设定)

方式二:

new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8"))

借助String对象的方法,该种方式对任何请求有效,都是通用的。

Tomcat8以后的get请求时不会出现乱码的。

④:转发请求【重点】

请求转发是一种服务器行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的url地址不会发生改变,得到相应后,服务器端会将请求发送给客户端,从始至终只有一个请求发出。

request.getRequestDispatcher(url).forward(request, response);

具体实现,定义两个servlet

/** * * @author lenovo * 请求转发跳转 * 可以让服务器端跳转到客户端(或者指定的(Servlet) * 特点: * 1.服务器端行为 * 2.地址栏不会发生改变 * 3.从始至终都是一个请求 * 4.request当中的数据在servlet程序中共享 */ @WebServlet(value="/s01") public class Servlet01 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println("s01="+username + " " + password); // 请求跳转到Servlet02 //req.getRequestDispatcher("s02").forward(req, resp); //请求发送到html页面 req.getRequestDispatcher("RegistServlet.html").forward(req, resp); } }

@WebServlet(value="/s02") public class Servlet02 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println("s02=" + username + " " + password); } }

运行起来我们发现s01和s02都会输出,且只是请求了一次

⑤:request作用域[重点]

request表示一个请求,只要发出一个请求就会创建一个request对象,他的作用域:仅在当前请求中有效。

用处:常用于服务器间同一请求不同页面之间的参数传递,常用于表单的控制值传递。

常用的方法

request.setAttribute(String name,Object value)

设置域对象内容

request.getAttribute(String name)

获取域对象内容

request.removeAttribute(String name)

删除域对象内容

使用方式:给Servlet传值

@WebServlet("/s03") public class Servlet03 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("我是03"); req.setAttribute("user", "qcby"); req.setAttribute("age", 18); req.getRequestDispatcher("s04").forward(req, resp); } }

@WebServlet("/s04") public class Servlet04 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("我是04"); System.out.println(req.getAttribute("user")); System.out.println(req.getAttribute("age")); } }

访问:http://localhost:8080/SecondServlet/s03

②:响应乱码问题

浏览器与服务器传输中文数据会乱码,原因就是服务器响应数据默认采用iso8859-1码表,浏览器默认采用GBK码表,所以就会乱码。

要解决该乱码只能在服务器端告诉服务器使用一种能够支持中文的编码格式,比如UTF-8

response.setCharacterEncoding("UTF-8");

此时还只是完成了一半的工作,要保证数据的正确显示,还要指定客户端的编码方式

response.setHeader("content-type", "text/html;charset=UTF-8");

两端指定编码后,乱码就解决了,一句话:保证发送端和接收端的编码一致

以上两句话可以简化为一句话,同时指定客户端和服务器端

response.setContentType("text/html;charset=utf-8");

案例

@WebServlet(value="/s01") public class Servlet01 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.append("<h1>你好</h1>"); } }

@WebServlet(value="/s01") public class Servlet01 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=utf-8"); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write("<h1>你好</h1>".getBytes()); } }

③:重定向

重定向是一种服务器指导,客户端行为。客户端发出第一个请求,被服务器接收处理后,服务器会给客户端一个响应(一个新的地址),当客户端接收到新的请求后,会立刻马上根据服务器发送来的地址发起第二次请求。服务器接收请求并完成响应,重定向完成。

从上述描述中可以看出重定向存在两次请求,并且是客户端行为

response.sendRedirect(url);

案例

@WebServlet("/s05") public class Servlet05 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("我是s05"); // 重定向到s06 response.sendRedirect("s06"); } }

@WebServlet("/s06") public class Servlet06 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("我是s06"); } }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您的要求,以下是第2章Servlet编程基础的教案。 一、授课形式: 本节课采用讲授和实例演示相结合的授课形式。讲授部分主要介绍Servlet编程基础的相关知识点,实例演示部分则通过具体案例演示,展示Servlet编程基础在实际开发中的应用。 二、教学目的与要求: 1. 理解Servlet编程基础的相关知识点; 2. 掌握http(请求数据、响应数据)的知识; 3. 了解Servlet获取请求参数的方法(获取请求、请求方式、路径); 4. 掌握请求和响应中的中文乱码问题及其解决方法; 5. 能够用Servlet搭建小型应用系统(系统原型、JDBC、连接数据库、查看数据、提问上报、请求重定向)。 三、教学重点: 1. http(请求数据、响应数据)的知识; 2. Servlet获取请求参数的方法(获取请求、请求方式、路径); 3. 请求和响应中的中文乱码问题及其解决方法; 4. Servlet的基本原理及其应用。 四、教学难点: 1. 掌握http(请求数据、响应数据)的知识; 2. 理解Servlet获取请求参数的方法(获取请求、请求方式、路径); 3. 理解请求和响应中的中文乱码问题及其解决方法; 4. 理解Servlet的基本原理及其应用。 五、教学方法与手段: 1. 讲授:通过PPT和板书等方式,介绍Servlet编程基础的相关知识点; 2. 实例演示:通过具体案例演示,展示Servlet编程基础在实际开发中的应用; 3. 互动讨论:通过提问、回答等方式,促进学生对Servlet编程基础的理解和掌握。 六、教学内容及过程设计: 1. Servlet编程基础概述 a. 什么是Servlet? b. Servlet的基本原理和应用场景。 2. http(请求数据、响应数据) a. http请求的基本格式。 b. http响应的基本格式。 3. Servlet获取请求参数 a. 获取请求的方式。 b. 获取请求的请求方式。 c. 获取请求的路径。 4. 请求和响应中的中文乱码问题 a. 中文编码的基本概念。 b. 请求中的中文乱码问题及其解决方法。 c. 响应中的中文乱码问题及其解决方法。 5. Servlet应用实例 a. 搭建开发环境。 b. 设计系统原型。 c. 编写Servlet程序,连接数据库。 d. 查看数据,提问上报。 e. 请求重定向,返回数据。 七、作业: 1. 搭建Servlet开发环境,并编写一个简单的Servlet程序,实现http(请求数据、响应数据)、Servlet获取请求参数、请求和响应中的中文乱码问题的处理。 八、课后小结: 通过本节课的学习,我们了解了Servlet编程基础的相关知识点,掌握了http(请求数据、响应数据)的知识,了解了Servlet获取请求参数的方法,了解了请求和响应中的中文乱码问题及其解决方法,掌握了Servlet的基本原理及其应用。在实际开发中,我们可以根据具体需求选择合适的Servlet开发框架,以提高开发效率和应用性能。 九、参考资料: 1. 《Java Servlet技术详解》 2. 《Servlet和JSP技术教程》 3. 《Head First Servlets and JSP: Passing the Sun Certified Web Component Developer Exam》

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值