servlet

来源:互联网 发布:淘宝店铺试衣间的头像 编辑:程序博客网 时间:2024/06/05 21:59
1).Servlet简介
2).Servlet框架
3).编写Servlet的第一杯咖啡
4).掌握Servlet的生命周期
5).掌握HttpServletRequest和HttpServletResponse的用法
6).掌握Servlet中两种跳转方式q22
7).掌握Servlet读取初始化参数
8).掌握Servlet读取上下文参数
9).掌握Servlet常见API的使用
1、Servlet简介
1).Servlet(Server Applet):是java编写的服务器端程序(服务器端的应用小程序);
2).通过Web容器(Container)的  加载、实例化、初始化,受到容器管理的才得以成为一个Servlet。
3).Servlet的生命是由  服务器  决定的。
4).了解Servlet优点
   直接和服务器交互,在多个程序间共享数据
5)作用:可以做页面,可以处理请求
2、Servlet框架--查阅API
3、
1).创建Servlet
步骤:
(1).创建Dynamic Web Project项目
(2).在src下new Servlet
       1).指定servlet所在的包,存放所有的servlet(com.dre.controller/action)
       2).指定setvlet的名字  (HelloAction)
       3).指定servlet的url mappings    (/hello.action)-命名时和servlet名相似
       4).finish后会在servlet中出现@WebServlet("/hello.action")或
   在web.xml中手动加上配置
    <servlet>
           <servlet-name>hello</servlet-name>
           <servlet-class>com.dre.servlet.HelloAction</servlet-class>
             </servlet>
             <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello.action</url-pattern>
             </servlet-mapping>
(3).在HelloAction类的doGet()方法或doPost()方法中编写代码。
       (servlet可以做页面,可以处理请求)
(4).将web project部署至tomcat服务器中【查看服务器中的项目】
(5).运行tomcat服务器,确保运行无误
(6).在浏览器上访问http://localhost:8080/项目名/hello.action
      最终在浏览器上出现Hello Servlet.   
      这就完成了请求和响应的流程,这属于一次请求。
注意:修改了servlet中的内容,必须把服务器进行重新启动。
               servlet中的内容才会生效。
(7)
<!--若在.java中不用注解  @WebServlet("/hello.action"),就要在web.xml中进行如下的配置 -->
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.dre.controller.HelloAction</servlet-class>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello.action</url-pattern>
  </servlet-mapping>
(8)
      1、   //解决中文乱码
      protected void doPost(){
 request.setCharacterEncoding("utf-8");
 response.setCharacterEncoding("utf-8");
          response.setContentType("text/html;charset=utf-8");
      }
     2、//在写用户名时出现的乱码问题
      protected void doPost(){
             String name=request.getParameter("username");
             name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
             String psw = request.getParameter("password");
             System.out.println("姓名:"+name+"\t"+"密码:"+psw);
      }
4、Servlet的生命周期【重点掌握,面试题】
第一步: 服务器加载和实例化
第二步: 初始化(一般不需要写)
第三步: 调用Servlet方法,处理请求
第四步: 当服务器关闭的时候,Servlet生命结束
注意:第一步,第二步只会执行一次
面试题:HttpServletRequest和HttpServletResponse对象是由 服务器  创建的。
        只要是对象,都是由服务器创建
5、HttpServletRequest和HttpServletResponse的用法
1).HttpServletRequest   request对象
(1).获得表单提交的参数值
  例如获得用户名和密码:
  String name=request.getParameter("username"); //获得用户名   
  name=new String(name.getBytes("ISO-8859-1"),"UTF-8");//处理用户名中文乱码
  String psw = request.getParameter("password");//获得密码
(2).设置请求的编码格式(处理整个页面的中文乱码)
例如:下面的第一句,但是三句通常会一起写
     request.setCharacterEncoding("utf-8");
     response.setCharacterEncoding("utf-8");
     response.setContentType("text/html;charset=utf-8");
(3).往请求域中添加值(页面跳转())
请求转发:
    注意:请求页面跳转:因为发生在服务器端,所以不管传不传值,都能接收到username
  一:跳转加传值:
     request.getRequestDispatcher("success.action?username="+name).forward(request, response);
    接收:
     out.println("<h1>"+request.getParameter("username")+",登陆成功!"+"</h1>");
  二:
    只跳转
     request.getRequestDispatcher("success.action").forward(request, response);
    接收1:
    out.println("<h1>"+request.getParameter("username")+",登陆成功!"+"</h1>");、
    或2:String name=request.getParameter("username");
        name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
        out.println(name);
  三:传值:
    request.setAttribute("name", name);
    接收:
    request.getAttribute("name");
重定向:
    一:
     只跳转:response.sendRedirect("success.action")
   二:
     传值的时候只能用?传值:response.sendRedirect("success.action?username="+name);
                接收:request.getParameter("username")
(4).得到请求域中的值(即可以在某个页面中显示“**,登陆成功!”)
         
    即上面中的两种方法的步骤(2)都是得到请求域中的值(用户名),即在最终页面上显示(用户名,登陆成功)

注意: 上面(3)和(4):请求域中的值只在一次请求中有效。
2).HttpServletResponse response对象
(1).给客户端响应一个页面
(2).设置响应时的编码格式
(3).处理中文乱码
       浏览器页面编码格式设置utf-8
          response.setContentType("text/html;charset=utf-8");
(4)实现页面跳转(重定向)
在LoginAction页面中:response.sendRedirect("success.action");
   这是实现跳转到页面SuccessAction 中
总结:处理中文乱码
1).浏览器页面编码格式设置utf-8
     response.setContentType("text/html;charset=utf-8");
2).request请求过程中出现乱码
     request.setCharacterEncoding("utf-8");
3).response响应过程中出现乱码
     response.setCharacterEncoding("utf-8");
4)若是某个参数如用户名出现乱码
      String sname = request.getParameter("name") ;  
      String name = new String(sname.getBytes("ISO8859_1"),"UTF-8") ;  
6、Servlet中两种跳转方式的区别(请求转发(forward)和重定向(redirect)的区别)【面试题】
 例如有三个界面:顺序是:Login.html,LoginAction(login.action),SuccessAction(success.action)
1). 浏览器地址栏的变化
       redirect:?地址栏会显示转向后的地址,显示的是 success.action
       forward:?地址栏不会显示转向后的地址 显示的是login.action
2).安全性
       redirect:安全较低
       forward: 更安全
3). 实际发生的位置不一样
       redirect:发生在浏览器端
       forward:发生在服务器端
4).发送的请求数
      redirect: 两个请求
      forward:一个请求
5).效率
      redirect:效率较低
      forward:效率高
6). 能够去URL 范围不一样(用的环境)
       redirect:可以跳转到其他的项目
       forward:只能在本项目中跳转
7、Servlet读取初始化参数-ServletConfig
 <servlet>
    <init-param>
   <param-name>username</param-name>
   <param-value>admin</param-value>
     </init-param>
  </servlet>
  通过servlet的  config.getInitParameter()  得到参数值
8、Servlet读取上下文参数-ServletContext
       <context-param>
     <param-name>password</param-name>
     <param-value>888</param-value>
       </context-param>
      通过servlet的?获取ServletContext对象,
      然后通过该对象的?得到参数值。
 9、Servlet常见API
 HttpServletRequest request
  getRequestURI():获得发出请求字符串的客户端地址,不包括请求的参数
  getMethod(): 获得客户端向服务器端传送数据的方法,如get,post
 getRequestURL():获得发出请求字符串的客户端地址
 getRealPath(): 返回当前请求文件的绝对路径
 getServletPath(): 
 getRemoteAddr():获取客户端的IP地址
 getRemoteHost():?
 getServerName():?
 getServerPort():?
 request.getCookies():获取客户端保存的Cookie数据
原创粉丝点击