除了获取请求数据之外,还要讲一下他的其他方法:
其他方法
获取请求参数通用方法
中文乱码问题:
get方式:tomcat 8 已经将get方式的乱码问题解决了
post方式:依然乱码
原因:get通过url获取参数,而post表面是通过getParameter方式获取,本质是通过流获取
纠正乱码:获取参数前,设置request的编码
// 1.设置流的编码: req.setCharacterEncoding("utf-8");
- 1
- 2
请求转发:理解为一种在服务器内部的资源跳转方式
共享数据
获ServletContext:
案例实践:用户登录
需求:
分析:

步骤:
创建项目:
准备材料
创建数据库环境
create DATABASE NorthWind
USE NorthWind
CREATE table user(
id int primary key AUTO_INCREMENT,
username VARCHAR(32) UNIQUE NOT NULL,
password VARCHAR(32) NOT NULL
)
创建包,创建user类对应user表,并且生成他的getter和setter方法、以及toString方法。
完成userDao
public class UserDao{
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* @param loginUser
* @return user包含用户全部数据
*/
public User login(User loginUser){
String sql = "select * from USER where username = ? and password = ?";
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(),loginUser.getPassword());
return user;
}
}
创建一个Util包,下面包含JDBCUtils的工具类,用于数据库连接
public class JDBCUtils{
private static DataSource ds;
// 代码块用于初始化
static {
try {
// 1.加载配置文件
Properties pro = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
// 2.初始化连接池对象
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();
}
}
编写LoginServlet类
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.
req.setCharacterEncoding("utf-8");
// 2.
String username = req.getParameter("username");
String pwd = req.getParameter("password");
// 3.
User loginUser = new (username,pwd);
// 4.
UserDao userDao = new UserDao();
User user = userDao.login(loginUser);
// 5.
if(user==null){
// 登录失败
req.getrequestDispatcher("/failServlet").forward(req,resp);
}else{
// 登录成功
req.setAttribute("user",user);
req.getrequestDispatcher("/successServlet").forward(req,resp);
}
}
}
}
实现FailServlet和SuccessServlet
BeanUtils工具类简化数据封装
Map<Srting ,String[]>map = req.getParameterMap();
User loginUser = new User();
// 使用BeanUtils
try{
BeanUtils.populate(loginUser,map);
}catch (Exception e){
e.printStackTrace();
}
用于封装javaBean的工具类