Servlet
运行在服务端的小程序
生命周期方法
package daqi;
import javax.servlet.*;
import java.io.IOException;
public class servlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
配置
xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>daqi.servlet</servlet-class>
<!-- 访问时创建:负数
启动服务器时创建:0或正整数
-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
</web-app>
注解配置
@WebServlet(urlPatterns = "/demo")
public class servlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
// 或者直接@WebServlet("/demo")
request
请求数据方法
String method = request.getMethod();
System.out.println(method);
String contextPath = request.getContextPath();
System.out.println(contextPath); // 获取虚拟目录
String servletPath = request.getServletPath();
System.out.println(servletPath);
String queryString = request.getQueryString();
System.out.println(queryString);
String requestURI = request.getRequestURI();
System.out.println(requestURI); // 获取URI(标识符),范围比URL大
StringBuffer requestURL = request.getRequestURL();
System.out.println(requestURL); // 获取URL(定位符)
String protocol = request.getProtocol();
System.out.println(protocol);
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);
案例:用户登录
public class JDBCUtils {
private static DataSource ds;
static{
try {
// 加载配置文件
Properties pro = new Properties();
// 使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
// 初始化连接处对象
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取连接池对象
public static DataSource getDataSource(){
return ds;
}
// 获取连接Connection对象
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
//操作数据库
public class UserDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
public User login(User loginUser){
String sql = "select * from user where username = ? and password = ?";
try {
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(), loginUser.getPassword());
return user;
} catch (EmptyResultDataAccessException e) {
return null;
}
}
}
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置编码
req.setCharacterEncoding("utf-8");
// 获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
// 封装user对象
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);
// 调用UserDao的login方法
UserDao dao = new UserDao();
User user = dao.login(loginUser);
// 判断user
if(user == null) {
// 登录失败
req.getRequestDispatcher("/failServlet").forward(req,resp);
} else {
// 登录成功
// 存储数据
req.setAttribute("user", user);
// 转发数据
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
BeanUtils工具类
简化封装操作
// 获取所有数据请求
Map<String, String[]> map = req.getParameterMap();
// 创建User对象
User loginUser = new User();
// 用BeanUtils进行封装
try {
BeanUtils.populate(loginUser,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
方法
属性是方法去头去大学,如getUsername -> username
BeanUtils.populate(loginUser,map);
// 设置的是属性,不是变量,大部分时候相同
BeanUtils.setProperty(user,"hehe", "male");
String gender = BeanUtils.getProperty(user,"hehe");