servlet的使用

本文详细介绍了Servlet的基本使用,包括注解配置、请求处理、请求转发、重定向以及设置编码。此外,还展示了如何通过Filter解决跨域问题,并结合JDBC实现简单后端接口。涵盖了HTTP方法、参数获取、数据传递等多个关键知识点。
摘要由CSDN通过智能技术生成

servlet的基本使用

package com.xxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//@WebServlet("/ser01")
//@WebServlet(name="Servlet01",value="/ser01")
//@WebServlet(name="Servlet01",value={"/ser01","/ser001"})
@WebServlet(name="Servlet01",urlPatterns={"/s01","/s001"})//这里设置地址的
public class servlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello servlet");
        String URL = req.getRequestURL()+"";//stringbuff转为string直接再后面加""
        System.out.println("获取请求的完整路径:"+URL);

        String uri = req.getRequestURI();
        System.out.println("获取请求的部分路径:"+uri);

        String queryString = req.getQueryString();
        System.out.println("获取请求时的参数字符串:"+queryString);

        String method = req.getMethod();
        System.out.println("获取请求的方法:"+method);

        String prototol = req.getProtocol();
        System.out.println("获取请求的协议版本:"+prototol);

        String webapp = req.getContextPath();
        System.out.println("获取项目的站点名:"+webapp);

        /*获取请求的参数*/
        //获取指定名称的参数值
        String uname = req.getParameter("uname");
        String upwd = req.getParameter("upwd");
        System.out.println("uname:"+uname);
        System.out.println("upwd:"+upwd);

        //获取指定名称的参数的所有参数值,返回字符串数组(用于复选框)
        String[] hobbys = req.getParameterValues("hobby");
        if(hobbys!=null&&hobbys.length>0){
            for(String hobby:hobbys){
                System.out.println("爱好:"+hobby);
            }
        }
    };
}

servlet请求转发

package com.xxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//请求转发
@WebServlet("/s02")
public class servlet02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*获取请求的参数*/
        //获取指定名称的参数值
        String uname = req.getParameter("uname");
        System.out.println("servlet02 uname:"+uname);
        //请求转发到servlet03
        //可以传客户端传过来的参数
        req.getRequestDispatcher("s03").forward(req,resp);//也可以请求转发到jsp和html
//        req.getRequestDispatcher("login.html").forward(req,resp);//也可以请求转发到jsp和html
    };
}

/s03

package com.xxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/s03")
public class servlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*获取请求的参数*/
        //获取指定名称的参数值
        //可以获取/s02转发过来的参数uname
        String uname = req.getParameter("uname");
        System.out.println("servlet03 uname:"+uname);
    };
}

servlet转发自定参数

package com.xxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//传值到不同servlet中
@WebServlet("/s04")
public class servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet04");
        //可以传自定义的参数,用setAttribute
        req.setAttribute("name","admin");
        req.setAttribute("age",18);
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        req.setAttribute("list",list);

        //请求转发到servlet05
        //地址不改变
        //参数可共享
        req.getRequestDispatcher("s05").forward(req,resp);
    };
}

/s05

package com.xxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//传值到不同servlet中
@WebServlet("/s05")
public class servlet05 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet05");
        //获取域对象内容
        String name = (String) req.getAttribute("name");
        System.out.println("name:"+name);

        Integer age = (Integer) req.getAttribute("age");
        System.out.println("age:"+age);

        List<String> list = (List<String>) req.getAttribute("list");
        System.out.println("list:"+list.get(0));
    };
}

servlet设置服务端和客户端编码

package com.xxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet("/s06")
public class servlet06 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置服务端的编码
//        resp.setCharacterEncoding("UTF-8");
        //设置客户端的响应类型和编码
//        resp.setHeader("content-type","text/html'charset=UTF-8");

        //同时设置客户端和服务端的编码格式
        resp.setContentType("text/html;charset=UTF-8");

        //设置字符流
        PrintWriter writer = resp.getWriter();
        writer.write("<h2>你好</h2>");

        //字节流
//        ServletOutputStream out = resp.getOutputStream();
//        out.write("hi".getBytes());
    };
}

servlet重定向

package com.xxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
//重定向
@WebServlet("/s07")
public class servlet07 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet07");
        //重定向跳转到s08
        //地址会发生改变,变成s08的地址
        //数据无法共享,request,response不共享
        resp.sendRedirect("s08");
    };
}

servlet+filter+jdbc做一个简单的后端接口

设置一个公共可用的jdbc接口

package com.xxx.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class jdbc {
    private static String driver = null;
    private static String url = null;
    private static String username = null;
    private static String password = null;
    static {
        try{
            driver = "com.mysql.cj.jdbc.Driver";
            url = "jdbc:mysql://localhost:3306/chinaschool?serverTimezone=UTC";
            username = "root";
            password = "123456";

            //驱动只加载一次
            Class.forName(driver);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //获取链接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,username,password);
    }
    //释放链接资源
    public static void release(Connection c, Statement s, ResultSet r) throws SQLException {
        if(r!=null){
            r.close();
        }
        if(s!=null){
            s.close();
        }
        if(c!=null){
            c.close();
        }
    }
}

filter

package com.xxx.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/test02")//设置拦截的接口
//@WebFilter("/*")//拦截所有资源
public class Filter02 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Filter01 init...");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter");
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        //解决跨域请求问题
        resp.setHeader("Access-Control-Allow-Origin", "*");
        filterChain.doFilter(servletRequest,resp);
        //
    }
    @Override
    public void destroy() {

    }




}

servlet

package com.xxx.test;

import com.xxx.utils.jdbc;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

//servlet导入的驱动放在web/web-inf/lib下
@WebServlet("/test02")
public class test02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("utf-8");
        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
            conn = jdbc.getConnection();
            System.out.println(conn);
            String sql = "select sub.subject,sub.station_name from subjects as sub where sub.subject = ?";
            st = conn.prepareStatement(sql);
            st.setString(1,"化学");
            rs = st.executeQuery();
            JSONArray result = resultToJsonArray(rs);
            PrintWriter out = resp.getWriter();
            out.println(result);

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                jdbc.release(conn,st,rs);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static JSONArray resultToJsonArray(ResultSet rs) throws SQLException {
        JSONArray array = new JSONArray();
        ResultSetMetaData metaData = rs.getMetaData();
        int column = metaData.getColumnCount();
        while (rs.next()){
            JSONObject jsonObj = new JSONObject();
            for(int i = 1;i<=column;i++){
                String columnName = metaData.getColumnLabel(i);
                String value = rs.getString(columnName);
                jsonObj.put(columnName,value);
            }
            array.put(jsonObj);
        }
        return array;
    }
}

注意!servlet导入的jar包放在web/web-inf/lib下,并且不要用任何文件夹包含
jar包存放如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值