编程语言
首页 > 编程语言> > Java-servelt

Java-servelt

作者:互联网

一、Servlet线程特性

(一)Web应用服务器将为每个客户端的连接启动一个线程来服务

(二)多个浏览器客户端访问同一个Servlet,服务器会创建多少个Servlet对象

(三)课堂练习

1.目标

2.步骤

(1)创建 Web Project

(2)创建Servlet

(3)分别在构造方法、无参init方法、doGet方法、doPost方法中编写打印输出语句进行验证

(4)启动多个浏览器访问同一个servlet,最终访问的是同一个servlet实例

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
    public HelloServlet() {
        System.out.println("HelloServlet的构造方法");
    }
    @Override
    public void init() throws ServletException {
        System.out.println("HelloServlet.init()方法");
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("HelloServlet.doPost()方法");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("HelloServlet.doGet()方法");
    }
}

3.结论

二、请求和响应接口

(一)Web应用基于HTTP协议,HTTP协议基于请求/响应模型

1.什么是请求数据

2.什么是响应数据

3.封装和操作请求数据和响应数据是请求接口和响应接口

4.doXXX

public abstract class HttpServlet
extends GenericServlet
implements java.io.Serializable

1、OPTIONS

2、HEAD 

 3、GET

4、POST

5、PUT

6、DELETE

7、TRACE

课堂练习

5.目标

6.步骤

7.结论

三、利用Servlet对客户端不同方式请求作出动态响应

(一)客户端访问服务器端Servlet的方式有三种

  1. 直接从地址栏输入URL访问;

  2. 在网页中点击超级链接访问;

  3. 在网页中通过表单提交访问;

(二)课堂练习

1.目标

2.步骤

  1. 编写Servlet

  2. doGet():网页输出:"您好,目前调用的是doGet方法,您的IP地址是:"+ip

  3. doPost():网页输出:"您好,目前调用的是doPost方法,您的IP地址是:"+ip

    @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置编码
            resp.setContentType("text/html;charset = utf-8");
            /*ServletRequest接口
            String getRemoteAddr();    返回发送请求的客户端的互联网协议(IP)地址。*/
            //获取ip
            String ip = req.getRemoteAddr();
            //输出ip
            resp.getWriter().println("您好,目前调用的是doGet方法,您的IP地址是:" + ip);
    }
    @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html;charset = utf-8");
            String ip = req.getRemoteAddr();
            resp.getWriter().write("您好,目前调用的是doPost方法,您的IP地址是:" + ip);
        }
  4. 直接在浏览器地址栏输入URL访问:Get

  5. 在网页中点击超链接访问:Get

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <a href="http://localhost:8080/0428-web-servlet/TestServlet">Go servlet</a>
    </body>
    </html>

  6. 在网页中通过表单提交

    1. 没有指定method的表单,默认是get方式

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      <form action="http://localhost:8080/0428-web-servlet/TestServlet">
        <input type="submit" value="提交"/>
      </form>
      </body>
      </html>

    2. 指定method为post的表单,提交方式为post

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      <form action="http://localhost:8080/0428-web-servlet/TestServlet" method="post">
        <input type="submit" value="提交"/>
      </form>
      </body>
      </html>

3.总结

  1. 直接使用URL访问,是GET方式,调用doGet方法;
  2. 超级链接访问,是GET方式,调用doGet方法;
  3. 表单提交访问,取决form的method属性的值,默认是get,指定为post时,调用doPost方法;

四、Servlet中获取普通请求不同名或同名的参w数(name1=value1&name2=value2&...)的方法

(一)客户端向服务器servlet传递请求参数的方式有2种

(二)服务器会将请求参数封装到请求对象中

(三)如何从请求对象中得到请求参数的值

   

(四)Get请求方式的中文乱码的解决

  

  

(五)Post请求方式的中文乱码的解决

  

(六)课堂练习

1.目标

2.步骤

(1)写一个TestParamServlet,用于接收请求参数name,age的值

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*String getParameter(String var1);
        以字符串形式返回请求参数的值,或者如果参数不存在则返回null
    */
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    resp.setContentType("text/html;charset = utf-8");
    //把得到的请求参数的值显示出来	
    PrintWriter printWriter = response.getWriter();
    printWriter.print("name="+name);
    printWriter.print("age="+age);
    //response.getWriter().write("name="+name+"age="+age);
	}
①不传参得到的null

②传参得到是参数的值

(七)课堂练习二

1.目标

2.步骤

(1)c.html,添加a标签

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <a href="/0428-web-servlet/TestParamServlet?name=zs&age=20">name和age请求参数</a>
    </body>
</html>

(2)写一个TestParamServlet,用于接收请求参数name,age的值

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*String getParameter(String var1);
        以字符串形式返回请求参数的值,或者如果参数不存在则返回null
    */
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    resp.setContentType("text/html;charset = utf-8");
    //把得到的请求参数的值显示出来	
    PrintWriter printWriter = response.getWriter();
    printWriter.print("name="+name);
    printWriter.print("age="+age);
    //response.getWriter().write("name="+name+"age="+age);
	}

(八)课堂练习三

1.目标

2.步骤

(1)d.html,添加form标签 <input>标签

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/0428-web-servlet/TestParamServlet" method="post">
            姓名:<input type="text" name="name"><br>
            年龄:<input type="text" name="age"><br>
            <input type="submit" value="提交">
        </form>
    </body>
</html>

(2)写一个TestParamServlet,用于接收请求参数name,age的值

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //post请求 Tomcat默认编码 iso-8859-1 只支持英文 ,需设置请求编码
        req.setCharacterEncoding("utf-8");
        String name = req.getParameter("name");
        String age = req.getParameter("age");
        //设置响应编码
        resp.setContentType("text/html;charset = utf-8");
        resp.getWriter().write("name:" + name + "age:" + age);
    }

(九)课堂练习四

1.目标

2.步骤

(1)d.html,添加form标签 <input>标签

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/0428-web-servlet/TestParamServlet" method="post">
  姓名:<input type="text" name="name"/><br/>
  年龄:<input type="text" name="age"/><br/>
  爱好:
    <input type="checkbox" name="hobbies" value="吃"/>吃
    <input type="checkbox" name="hobbies" value="喝"/>喝
    <input type="checkbox" name="hobbies" value="玩"/>玩
    <input type="checkbox" name="hobbies" value="乐"/>乐<br/>
  <input type="submit" value="提交"/>
</form>
</body>
</html>

(2)写一个TestParamServlet,用于接收请求参数name,age的值

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    /*String[] getParameterValues(String var1);
        返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。
    */
    String[] hobbies = request.getParameterValues("hobbies");
    for (String string : hobbies) {
        System.out.println(string);
    }
    response.setContentType("text/html;charset=UTF-8");
    //把得到的请求参数的值显示出来
    PrintWriter printWriter = response.getWriter();
    printWriter.print("name="+name);
    printWriter.print("age="+age);
}

五、Servlet初始化参数

(一)什么是Servlet初始化参数

(二)特点

(三)设置Servlet的初始化参数

 <servlet>
        <servlet-name>TestInitParameterServlet</servlet-name>
        <servlet-class>com.tjetc.TestInitParameterServlet</servlet-class>
        <init-param><!--配置初始化参数 放在 servlet-name servlet-class 后面-->
            <param-name>company</param-name>
            <param-value>SEVENTEEN</param-value>
        </init-param>
    </servlet>

(四)在servlet中如何取得初始化参数的值

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String company = super.getInitParameter("company");
        System.out.println(company);
        resp.setContentType("text/html;charset = utf-8");
        resp.getWriter().write("servlet初始化参数:"+company);
    }

六、知识点6: 全局参数

(一)什么是全局参数

(二)全局参数的特点

(三)设置全局参数

<!--配置全局参数-->
    <context-param>
        <param-name>student-name</param-name>
        <param-value>carat </param-value>
    </context-param>

(四)得到全局参数

 /*GenericServlet类
     ServletContext getServletContext()
*/
ServletContext servletContext = getServletContext();
String carat = servletContext.getInitParameter("student-name");
System.out.println(carat);
carat

七、 Servlet加载启动选项

(一)什么是servlet的启动选项

(二)如何配置Servlet的启动选项

 <servlet>
    <description></description>
    <display-name>TestLoadServlet</display-name>
    <servlet-name>TestLoadServlet</servlet-name>
    <servlet-class>com.tjetc.servlet.TestLoadServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

八、Servlet配置中通配符*的用法

(一)什么是通配符配置

(二)使用方式2种

 <servlet-mapping>
    <servlet-name>TestLoadServlet</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>
 <servlet-mapping>
    <servlet-name>TestLoadServlet</servlet-name>
    <url-pattern>/admin/*</url-pattern>
  </servlet-mapping>

九、web.xml中首页及错误页面等其他配置信息

(一)配置首页

 <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

(二)配置错误页面

当应用中出现响应错误或者异常时,可以跳转到错误页面

web.xml配置  error-page

1.错误码

 <error-page>

    <error-code>404</error-code>

    <location>/404.html</location>

  </error-page>

2.异常类型

  <error-page>

    <exception-type>java.lang.NullPointerException</exception-type>

    <location>/exception.html</location>

  </error-page>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

空指针异常

</body>

</html>

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        String s=null;

        int length = s.length();

        System.out.println(length);

        response.getWriter().append("Served at: ").append(request.getContextPath());

    }

十、知识点10:Servlet中获取请求头属性的方法

十一、知识点11:重要的请求头属性(请求长度、请求MIME类型、请求referer等)

(一)重要的请求头属性

(二)课堂练习(10分钟)

1.目标

重要的请求头属性(请求长度、请求MIME类型、请求referer

2.步骤

(1)创建TestHeadServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //Content-Length获得请求的长度

        int length = request.getIntHeader("Content-Length");

        System.out.println("请求你的长度:"+length);

        //Accept:获得MIME类型

        String mime = request.getHeader("Accept");

        System.out.println("MIME类型:"+mime);

        //Referer:来路路径

        String referer = request.getHeader("Referer");

        System.out.println("来路路径:"+referer);

        response.getWriter().append("Served at: ").append(request.getContextPath());

    }

(2)创建html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<a href="/0430-web/TestHeadServlet?name=zs">访问TestHeadServlet</a>

<form action="/0430-web/TestHeadServlet">

用户名:<input type="text" name="username"/><br/>

  <input type="submit" value="提交"/>

</form>

<form action="/0430-web/TestHeadServlet" method="post">

  用户名:<input  type="text" name="username"/><br/>

  <input type="submit" value="提交"/>

</form>

</body>

</html>

 

(3)测试

①超链接

请求的长度:-1

MIME类型:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

来路路径:http://localhost:8080/0430-web/a.html

 

②form的get请求

请求你的长度:-1

MIME类型:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

来路路径:http://localhost:8080/0430-web/a.html

③form的post请求

请求的长度:11

MIME类型:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

来路路径:http://localhost:8080/0430-web/a.html

 

十二、总结

1.servlet的线程特性:多线程单实例

2.请求和响应接口

       1.请求接口:HttpServletRequest-ServletRequest

       2.响应接口:HttpServletResponse-ServletResponse

       3.Tomcat在每次请求servlet的时候会创建

              1.HttpServletRequest接口的实现类RequestFacade对象

              2.HttpServletResponse接口的实现类ResponseFacade对象

              3.将这两个对象作为doXxx()方法参数传进来,程序员能够直接使用这两个对象

3.访问servlet的方式:

       1、直接使用URL访问,是GET方式,调用doGet方法;

       2、超链接访问,是GET方式,调用doGet方法;

       3、表单提交访问,取决form的method属性的值,默认是get,指定为post时,调用doPost方法;

4.如何获得请求参数

       1.获得不同名的请求参数:String request.getParameter(name)

       2.获得同名的请求参数:String[] request.getParameterValues(name)

5.servlet获取初始化参数的方法

       super.getInitParameter(name)

6.servlet获取全局参数的方法

       getServletContext().getInitParameter(name)

7.加载启动项

       <load-on-startup>1</load-on-startup>

8.Servlet配置中通配符*的用法

       1.*.扩展名   *.do          /abc/*.jpg

       2.以/开头.以/*结尾   /admin/*

9.配置首页

       welcome-file-list  welcome-file

  配置错误页面

       error-page

              1.error-code  <location>

              2.exception-type <location>

10.Servlet中获取请求头属性的方法        

       request.getHeader(name)

       request.getIntHeader(name)

11.重要请求头

       1.Content-Length:获得请求长度

       2.Accept:浏览器能接受的MIME(它全名叫多用途互联网邮件扩展(Multipurpose Internet Mail        Extensions),最初是为了将纯文本格式的电子邮件扩展到可以支持多种信息格式而定制的。后来被应用到多种协议里,包括我们常用的HTTP协议。MIME的常见形式是一个主类型加一个子类型,用斜线分隔。比如text/html、application/javascript、image/png等。在访问网页时,MIME type帮助浏览器识别一个HTTP请求返回的是什么内容的数据,应该如何打开、如何显示)类型

       3.Referer:来路路径,代表请求从哪个页面转过来的.

12.提问:

Servlet的线程性质是什么?

       多线程单实例

web.xml中可以配置哪些信息?

       1.servlet

       2.servlet-mapping

       3.init-param load-on-startup

       4.context-param

       5.welcome-file-list  welcome-file

       6.error-page

Servlet初始化参数和全局参数有什么区别?

       1.Servlet初始化参数只能在当前的servlet使用,不能在其他的servlet使用

       2.全局参数可以在所有的servlet使用

如何获得请求参数?

       request.getParameter(name)

如何获得请求属性头?

       request.getHeader(name)

       request.getIntHeader(name)

标签:Java,请求,Servlet,request,参数,servelt,servlet,name
来源: https://www.cnblogs.com/seventeen9588/p/16318108.html