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包存放如下