JSP 学习总结 03 核心组件 Servlet

 

1 Servlet 简绍

  Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

  Servlet的架构图如下所示:

JSP 学习总结 03 核心组件 Servlet_第1张图片

  Servlet特点:

  • Servlet运行于服务端。
  • Servelet没有main方法。 
  • Servlet的创建,销毁由Servlet容器管理,如Tomcat,Jetty等。

 

2 使用Eclipse新建一个Servlet小程序

  使用Eclipse新建一个Servlet小程序, HelloServlet。

JSP 学习总结 03 核心组件 Servlet_第2张图片

 

生成一个HelloServlet.java,如下图所示:

JSP 学习总结 03 核心组件 Servlet_第3张图片

 

新建 HelloServlet.java

package com.bank.study.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        response.setCharacterEncoding("utf-8");
        response.addHeader("Content-type", "text/html;charset=utf-8");
        PrintWriter pw  = response.getWriter();
        pw.println("你好 ,Servlet ....");
        pw.flush();
        pw.close();
        pw = null;
        
    }

    @Override
    public void destroy()
    {
        System.out.println("===== serlet destory() ====== ");
        super.destroy();
    }

    @Override
    public void init() throws ServletException
    {
        System.out.println("===== serlet init() ====== ");
        super.init();
    }

    @Override
    public void init(ServletConfig config) throws ServletException
    {
        System.out.println("===== serlet init(config) ====== ");
        String name = config.getInitParameter("name");
        System.out.println("name=" + name);
        super.init(config);
    }
    
}

   在web.xml新建如下内容:


      HelloServlet
      class>com.bank.study.controller.HelloServletclass>
      
          name
          lisi
      
  
  
  
      HelloServlet
      /HelloServlet
  

  然后访问这个Servlet,加入Web工程名为DynaWeb,这个Servlet的访问地址为:

http://127.0.0.1:8888/DynaWeb/HelloServlet

  注意:确认下 Eclipse使用的JDK ,是否和本机安装JDK一致,如果不一致,即使web.xml 配置正常了,也无法正常显示Servlet。

JSP 学习总结 03 核心组件 Servlet_第4张图片

   查看打印消息,参考  Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试 , 配置Tomcat的用户权限。

   然后访问这个Servlet,如果一切正常如下图所示:

JSP 学习总结 03 核心组件 Servlet_第5张图片

    没有打印出Servlet的destory() 方法,进行下一步实验,从Tomcat管理控制平台,移除这个应用。如下图所示:

JSP 学习总结 03 核心组件 Servlet_第6张图片

  然后再查看Tomcat console打印信息,是否打印出這个Servlet的destory方法里的调试信息。  

 

   url-partten中的路径也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。

第一种: *.扩展名

  把 web.xml配置映射路径改为如下:


      HelloServlet
      class>com.bank.study.controller.HelloServletclass>
      
          name
          lisi
      
  
  
  
      HelloServlet
      *.action
  

  那么以下地址都是合法的:

http://localhost/studyweb/abc/hello.action
http://localhost/studyweb/aaa.action

 第二种: 以正斜杠(/)开头并以“/*”结尾。

把 web.xml配置映射路径改为如下:


      HelloServlet
      class>com.bank.study.controller.HelloServletclass>
      
          name
          lisi
      
  
  
  
      HelloServlet
      /hello/*
  

 那么以下地址都是合法的:

http://localhost/studyweb/hello
http://localhost/studyweb/hello/1
http://localhost/studyweb/hello/1/2/3

 

3 Tomcat服务器的执行流程

  Tomcat服务器的执行流程

JSP 学习总结 03 核心组件 Servlet_第7张图片

第一次执行:

  • 客户端通过电脑连接服务器,因为是请求是动态的,所以所有的请求交给WEB容器来处理
  • 在容器中找到需要执行的*.jsp文件
  • 之后*.jsp文件通过转换变为*.java文件
  • *.java文件经过编译后,形成*.class文件
  • 最终服务器要执行形成的*.class文件

第二次执行:

  • 因为已经存在了*.class文件,所以不在需要转换和编译的过程

修改后执行:

  • 源文件已经被修改过了,所以需要重新转换,重新编译。

4 Servlet输出中文乱码

 1 新建一个Servlet, MainServlet.java

package com.bank.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MainServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public MainServlet() {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.addHeader("Content-type", "text/html;charset=utf-8");
        response.setCharacterEncoding("utf-8");;
              
        PrintWriter pw = response.getWriter();
        pw.println("

你好

" + new Date() +"中文乱码111"); pw.close(); pw = null; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

   注意 response.setCharacter() ,response.addHeader() 要告知浏览器的编码方式,返回的响应信息是 html网页格式。

2 web.xml


        MainServlet
        class>com.bank.controller.MainServletclass>
      
    
        MainServlet
        /*    
    

 

3 然后访问这个MainServlet,查看页面是否显示正常。

参考资料: JavaWeb学习总结-07 Filter 学习和使用

 

5 Servlet获得表单数据

1 新建 form.html




"utf-8" />
Insert title here



"post" action="/studyweb/GetFormServlet"> 用户名:"text" name="username" maxlength="5"/>
密码:"password" name="pwd" />
性别: "radio" name="gender" value="male"/>男    "radio" name="gender" value="female" checked />女
爱好:"checkbox" name="interest" value="football" />足球 "checkbox" name="interest" value="basketball" />篮球
城市: <select name="city"> select>
简绍:
"submit" value="提交表单内容" /> "reset" />

 

2 新建 GetFormServlet.java

GetFormServlet的参考代码

package com.bank.study.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetFormServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             System.out.println("--- doPost --- ");
            //设置请求的字符集为utf-8
             request.setCharacterEncoding("UTF-8");
            
            String username = request.getParameter("username");
            System.out.println("username=" + username);

            String password =  request.getParameter("pwd");
            System.out.println("password=" + password);

            String gender = request.getParameter("gender");
            System.out.println("gender=" + gender);
            
            String[] interests = request.getParameterValues("interest");
            System.out.println("interests=" + interests);
            StringBuffer selInterest = new StringBuffer();
            if(null != interests){
                for(int i=0, j= interests.length;i < j ;i++){
                    selInterest.append(interests[i]);

                    if( i < j - 1){
                        selInterest.append(",");
                    }
                }
            }

            String city = request.getParameter("city");
            System.out.println("city=" + city);
            
            String desc = request.getParameter("desc");
            System.out.println("desc=" + desc);
            
            //设置响应的字符集为utf-8
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            
            PrintWriter out = response.getWriter();
            out.println("获得以下的参数值");
            out.println("username=" + username);
            out.println("
"); out.println("password=" + password); out.println("
"); out.println("gender=" + gender); out.println("
"); out.println("selInterest=" + selInterest); out.println("
"); out.println("city=" + city); out.println("
"); out.println("desc=" + desc); out.println("
"); String path = request.getContextPath(); out.println("返回表单"); out.flush(); out.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

 

3 web.xml

  
    GetFormServlet
    class>com.bank.study.controller.GetFormServletclass>
  
  
    GetFormServlet
    /GetFormServlet
  

 

转载于:https://www.cnblogs.com/wangshuo1/p/7501368.html

你可能感兴趣的:(web.xml,开发工具,java)