sm框架-登录界面小结

来源:互联网 发布:淘宝全球购上传身份证 编辑:程序博客网 时间:2024/03/29 03:00
一、jsp页面
1.form表单提交
<form action="<%=request.getContextPath()%>/dologin" id="myform"><table id="mytable"><tr><td>用户名:</td><td><input type="text" id="username" name="username" style="height:30px"/></td></tr><tr><td>密    码:</td><td><input type="password" id="password" name="password"style="height:30px"/></td></tr><tr><td>验证码:</td><td><input type="text"  id="code" name="code" style="height:30px"/></td><td>  <img id="checkcode" src="<%=request.getContextPath()%>/getYzm" width="80px" height="40px"/></td></tr><tr><td><input type="button" value="登录" style="padding:5px 10px;"onclick="fn()"/></td><td ><input type="button" value="注册" style="padding:5px 10px;margin-left: 40px;"onclick="window.location.href='register'"/></td></tr></table></form>
注意: <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径。
其中本次是将表单内容提交到/dologin 目录下,提交方式采用了ajax的提交方式,但提交之前要
判断表单中是否有相应的数据,避免出现空值和空串:
function fn() {    var username=$("#username").val().trim();  var password=$.trim($("#password").val());    var code=$("#code").val().trim();    if(code==""){    alert("请输入验证码")    return;    }  if(username ==""){    alert("用户名不能为空");        return;   }   if(password ==""){    alert("密码不能为空");        return;   }
注意:trim()方法返回调用字符串对象的一个副本,但是所有起始和结尾的空格都被删除了
例:String s=" Hello World ".trim();就是把"Hello World"放入s中。
2.ajax提交表单
   $.ajax({   url:"${pageContext.request.contextPath}/dologin",   type:"post",   data:$("#myform").serialize(),   dataType:"json",   success:function(data){   if(data.status==0){   alert("验证码错误!");   }else  if(data.status==-1){   alert("用户名或密码错误!");   }else{   if(data.role=="普通用户"){   alert("登录成功!");   location.href="${pageContext.request.contextPath}/game";      }   if(data.role=="管理员"){   alert("登录成功!");   location.href="${pageContext.request.contextPath}/user";      }    }      }   })
注意: ajax属性很多,不需要每个属性都标上,其中几个常用的属性如下;
url:表单所提交的地址;form中的action
async: false(默认是true);当async: true 时,ajax请求是异步的。
type:提交方式
post:通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起
传送到ACTION属性所指的URL地址,是看不到相对安全一些;传递的参数无限制的。
get: 把参数数据队列加到提交表单的ACTION属性所指的URL中所以是信息不安全的;
并且url的长度是有限制的。
data:serialize()方法序列化表单内容为字符串,用于Ajax请求。

二、cotroller控制层
1.标签的注入:
ServiceImpl 实现类: 
添加@Service注解将Service 对象注入bean容器,
并使用@Autowired将 Dao层对象注入 Service对象中
@Service("userService")public class UserServiceImp implements UserService {@Autowiredprivate UserDao userDao;public void regist(User user) {userDao.addUser(user);}
Controller 类
使用@Controller将Controller对象注入bean容器中
并使用@Autowired将Service层对象注入Controller对象的属性中
@Controller@RequestMapping("/")public class UserController {@Autowiredprivate GuessService guessService;@Autowired@Qualifier("userService")private UserService userService;@RequestMapping("/")      public ModelAndView getIndex(){       ModelAndView mav = new ModelAndView();    mav.setViewName("index");       return mav;      }
@Qualifier在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。
@RequestMapping注解的作用是映射路径标签
@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML

2.处理传入数据
对于ajax传入到controller层的数据需要接收处理,比如本次是将表单中的信息传入,首先判断其验证码是否正确,然后判断其用户名和密码是否正确,最后返回相应的状态码到原来的页面,显示相应的内容
@RequestMapping("dologin")  @ResponseBody    public Map<String,Object> dologin(User user,HttpServletRequest request){Map<String,Object> map=new HashMap<String, Object>();String inputcode =request.getParameter("code");String checkcode =(String)request.getSession().getAttribute("_code"); if(inputcode.equals(checkcode)){String username=user.getUsername();String password=user.getPassword();    List<User> list= userService.login(username, password);    if(list!=null&&list.size()>0){    User resUser=list.get(0);    map.put("status", 1);    map.put("role", resUser.getRole());     }else{    map.put("status", -1);    }}else{map.put("status", 0);}return map;}
注意:
1、验证码是存放在session中的,当需要验证码时只需要从session中取出,不需要重新
创建session,使用HttpServletRequest 对象直接调用即可
2、Map<String,Object> map=new HashMap<String, Object>();
map中的数据以键值对的形式存在,我们知道某一个键时,我们很容易通过键找到对应的值
三、UUID的使用
当在做猜数字游戏的时候,需要把猜测记录回显到jsp时,但当时每次记录是插入数据库中的,造成数据太多,所以用到uuid,是每次猜测的记录生成唯一标识,重新计数
dao层
public interface GuessDao {public void insertGuess(Guess guess);public List<Guess> selectGuess(String uuid);}
mapper数据接入层
<select id="selectGuess" resultType="com.itcast.domain.Guess" parameterType="string">select *from guesswhere 1=1<if test="_parameter!=null and _parameter!=''">  and uuid=#{uuid}</if></select
controller层
@RequestMapping("guess")@ResponseBody    public Map<String,Object> guess(String num,String uuid,HttpServletRequest request,HttpServletResponse response){         if(uuid==null||"".equals(uuid)){        uuid=getUUID();        }Map<String,Object> map=new HashMap<String, Object>();String random=(String) request.getSession().getAttribute("random");if(random==null || "".equals(random)){random=Integer.toString((int)(Math.random()*100+1));request.getSession().setAttribute("random", random);}int result;if(num.compareTo(random)==0){result=0;random=Integer.toString((int)(Math.random()*100+1));request.getSession().setAttribute("random", random);}else if(num.compareTo(random)<0){result=-1;}else{result=1;}//保存猜的記錄Guess guess =new Guess();    int num1=Integer.valueOf(num).intValue();guess.setGuessnum(num1);guess.setUuid(uuid);guessService.insertGuess(guess);map.put("result", result);//回显记录    List<Guess> guessList = guessService.selectGuess(uuid);          map.put("guessList", guessList);    map.put("uuid", uuid);return map;    } //生成唯一标识public static String getUUID(){        UUID uuid=UUID.randomUUID();        String str = uuid.toString();         String uuidStr=str.replace("-", "");        return uuidStr;      }