Request的函数
获得行的内容
request.getMethod()//用于获得HTTP请求信息中的请求方式(如get和post)
request.getRequestURI()//用于获取请求行中资源名称部分,即位于URL的主机和端口之后,参数部分之前的部分
request.getRequestURL()//用于获取客户端发出请求时的完整url,包括协议、服务器名、端口号、资源路劲等等。
request.getContextPath()//用于获取请求URL中属于web应用程序的路径,这个路径以“/”开头。
request.getRemoteAddr()//用于获取请求客户端的IP地址
获得头的内容
request.getHeader(name)
获得请求体的内容
String request.getParameter(name)//请求参数
Map<String,String[]> request.getParameterMap();
String[] request.getParameterValues(name)
注意:客户端发送的参数到服务器端都是字符串
中文乱码的解决方式
post解决:request.setCharacterEncoding("UTF-8");
get解决:parameter = new String(parameter.getBytes("iso8859-1"),""UTF-8)
Request的转发和重定向的区别
1.重定向两次请求,转发一次请求
2.重定向地址栏的地址变化,转发地址不变
3.重定向可以访问外部网站,转发只能访问内部资源
4.转发的性能要优于重定向
重定向代码:sendRedircet(地址)
转发代码: setRequestDispatcher(地址).forward(request,response) //前面部分实则在创建转发器
登陆注册界面功能实现
需要有两个servlet对象,一个为注册功能,另外一个为登录查询功能
注册界面和登录界面的制作略过,需要注意的是在表单form标签下加入 action 与method,action表示发送表单的地址,method代表提交方式,一般为post或者get。此外几个重要的提交数据都需要加上name属性,name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据。
中间插入了重定向与转发的2个使用,这里需要理解掌握。
register的servlet代码
//设置requestd 编码----只适合post方式
request.setCharacterEncoding("UTF-8");
//get方式的乱码解决方式,同样适用post
//String username = request.getParameter("username");//乱码
//先用iso8859-1编码 在使用utf-8解码
//username = new String(username.getBytes("iso8859-1"),"UTF-8");
//使用BeanUtils进行自动映射封装
//BeanUtils的工作原理,将map中的数据根据Key与实体的属性的对应关系封装、
//只要key的名字与实体的属性的名字一样就自动封装到实体中
Map<String,String[]> properties = request.getParameterMap();
Usernew user = new Usernew();
try {
BeanUtils.populate(user, properties);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//此时user对象已经封装好了,需要手动封装uid---uuid---随机不重复的字符串32位
user.setUid(UUID.randomUUID().toString());
//将参数传递给一个业务方法
regist(user);
//认为注册成功,下一步跳转到登录界面 ---使用重定向
response.sendRedirect(request.getContextPath()+"/login.jsp");
其中regist为与数据库交互的一个业务方法,具体代码如下
public void regist(Usernew user) {
QueryRunner runner =new QueryRunner(JDBCutils.getDataSource());
String sql = "insert into usernew values(?,?,?,?,?,?,?,?,?,?)";
try {
runner.update(sql,user.getUid(),user.getUsername(),user.getPassword(),user.getName(),
user.getEmail(),null,user.getBirthday(),user.getSex(),null,null);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
login的servlet代码
//获得用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
Usernew login = null;
//调用一个业务方法进行用户查询
try {
login = method(username,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(login!=null) {
response.sendRedirect(request.getContextPath());
}else {
//跳回到login.jsp
request.setAttribute("loginInfo", "用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
method为与数据库交互的业务方法,代码如下
public Usernew method(String username, String password) throws SQLException {
QueryRunner qr = new QueryRunner(JDBCutils.getDataSource());
String sql = "select * from usernew where username=? and password=?";
Usernew user = qr.query(sql,new BeanHandler<Usernew>(Usernew.class),username,password);
return user;
}
以上为笔者认为比较重要的核心代码。