JavaWeb学习-Servlet

写在前面的话:为什么突然要写一篇这个?因为明天考试要考这个

Servlet


一、创建Servlet

1.编写一个类实现Servlet接口

public class HelloServlet implements Servlet {

	//处理请求和相应的方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("该已执行");
    }
    
	//初始化
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

	
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }


	
    @Override
    public String getServletInfo() {
        return null;
    }
    
	//销毁
    @Override
    public void destroy() {

    }
}

2.到Web.xml文件中配置访问地址

	<!--<servlet>标签给Tomcat配置Servlet程序-->
    <servlet>
        <!--<servlet-name>给程序起别名,一般是类名        -->
        <servlet-name>HelloServlet</servlet-name>
        
        <!--<servlet-class>servlet程序的全类名-->
        <!--<servlet-class>访问HelloServlet中的service方法-->
        <servlet-class>com.example.Test_service.HelloServlet</servlet-class>
    </servlet>

    <!--servlet-mappingServlet配置访问地址-->
    <servlet-mapping>
        <!--<servlet-name>告诉服务器当前配置的程序给哪一个服务器使用 -->
        <servlet-name>HelloServlet</servlet-name>
        <!-- url-pattern 标签配置访问地址
               / 斜杠在服务器解析的时候表示地址为http://ip:port/工程路径
               /hello 为http://ip:port/工程路径/hello
         -->
         
        <!--hello的命名要与模块(HelloServlet)有对应关系        -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

3.到运行servlet

http://localhost:8080/Test_service_war_exploded/hello
// http://  协议
// localhost:8080  ip地址
// Test_service_war_exploded  工程名
// hello XML文件中‘hello’所对应的类

二、处理请求

1.基本请求

创建一个HTML表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
	<!--请求方法为GET-->
	<!--填写完整请求响应路径-->
    <form action="http://localhost:8080/Test_service_war_exploded/hello" method="get">
        <input type="submit">
    </form>
</body>
</html>

2.POST与GET区分请求

1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4. Get执行效率却比Post方法好。Get是form提交的默认方法。

1.区分GET与POST方法需要在Servlet的实现方法中设置

public class HelloServlet implements Servlet {

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //1.为了使用类型判断方法,需要将servletRequest的类型转换为子类httpservletRequest
        HttpServletRequest httpservletRequest=(HttpServletRequest) servletRequest;
        
        //2.使用类型判断请求方式
        String str=httpservletRequest.getMethod();
        
        //3.区分请求处理信息
        if(str.equals("POST")) System.out.println("HelloPOST");
        else if (str.equals("GET")) System.out.println("HelloGET");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
    }
}

2.为了进一步区分GET与POST请求,将两种状态封装函数

public class HelloServlet implements Servlet {

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //1.为了使用类型判断方法,需要将servletRequest的类型转换为子类httpservletRequest
        HttpServletRequest httpservletRequest=(HttpServletRequest) servletRequest;
        //2.使用类型判断请求方式
        String str=httpservletRequest.getMethod();
        //3.区分请求处理信息
        if(str.equals("POST")) doPost();//直接调用
        else if (str.equals("GET")) doGet();

    }
    
    //4.做GET请求
    public void doGet(){
        System.out.println("HelloGET");
    }
    
    //5.做POST请求
    public void doPost(){
        System.out.println("HelloPOST");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

三、常用Servlet开发原则

1.直接继承子类HttpServlet

PS:快速重写类的方法 鼠标点击类后CTRL+O

public class HelloServlet2 extends HttpServlet {

	//直接在方法里面做处理,不需要重写service方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("GET");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("POST");
    }
}
上一篇:使用httpsession实现验证登录


下一篇:2021-06-21javax.servlet.ServletException: Servlet[springmvc]的Servlet.init()引发异常