Java Web开发过程中常遇的小问题

问题1:各种中文乱码问题

网页显示的中文乱码问题:

设置pageEncoding为gb2312即可(写在jsp页面的最前边)

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

数据库中文乱码问题:

对数据库的编码可以进行直接的设置,直接设置为gb2312或者utf-8即可。

这个由于不同的数据库不同的可视化界面操作可能不同,在此不赘述,可自行百度适合自己数据库的相关方法,建议是如果数据库的表不是很复杂可以新建一下,在建的时候直接选择即可。


getParameter时显示中文乱码问题(即用户输入中文到input中,你在后台getParameter时get到的中文会出现乱码)

解决方法:

在String XXX = request.getParameter("XXX");这句的前边写:

            request.setCharacterEncoding("gb2312");
            response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表
            response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开
直接进行粘贴应该就可以解决中文乱码问题




问题2:如何防止用户在不登录的情况下通过记住URL地址直接在地址栏输入URL地址进入本不能进入的页面

思路:在完成登录验证并验证成功之后,在重定向之前在session里存一个变量,记录一下用户的ID或者是用户名

String userid = request.getParameter("ID");
session.putValue("userid",userid);

然后每一个必须登录才能进入的界面的开头部分,我们要验证一下session中的userid这个值有没有被设置过,如果设置过了就是我们用户的id那么就说明已经登录过了,可以显示这个页面,反之如果这个值是null证明没有设置过,证明用户没有进行登录操作,这样我们就不能让他进入

       <%

	if (session.getValue("userid")==null)
	{
       %>
	<script>
	alert("请先登陆!");
	window.close();
	document.location = 'http://localhost:8888/finalpro_bone/portfolio.html';
	</script>

	<%
	}
	%>




问题3:Md5加密的函数

主要是用来登录时存用户的密码的,避免直接存密码导致不安全的问题

//开始生命md5加密
    	
    	
    	public String Md5(String plainText){
			try{
				MessageDigest md = MessageDigest.getInstance("MD5");
				md.update(plainText.getBytes());
				byte b[] = md.digest();
	
				int i;
	
				StringBuffer buf = new StringBuffer("");
				for (int offset = 0; offset < b.length; offset++) {
					i = b[offset];
					if(i<0) i+= 256;
					if(i<16) buf.append("0");
					buf.append(Integer.toHexString(i));
				}
	
				//System.out.println("result: " + buf.toString());//32位的加密
	
				System.out.println("result: " + buf.toString().substring(8,24));//16位的加密
				String str = buf.toString().substring(8,24);
				return str;
				
			}catch(NoSuchAlgorithmException e){
				// TODO Auto-generated catch block
				e.printStackTrace(); 
				return null;
			}
		} 
    	
    	//结束声明MD5加密

使用的时候直接调用这个函数就行了,可以选择16位或者32位的md5加密密码



问题4:防止sql注入漏洞

思路:使用 PreparedStatement,不要使用拼接sql语句的方法,那样会出现sql注入漏洞


String sql = "select * from user where ID=? and password=?";
    	
    	System.out.println(sql);  
    	  
    	if(!getid.equals("")){
    		System.out.println("用户名不是空");
    	}else{
    		%>
    			<script type="text/javascript">
    				alert("用户ID不能为空!");
    				history.back(1);
    			</script>
    		<% 
    	}
    	if(!getpassword.equals("")){
    		System.out.println("密码不是空");
    	}else{
    		%>
    			<script type="text/javascript">
    				alert("用户密码不能为空!");
    				history.back(1);
    			</script>
    		<%
    	}
    	
    	 PreparedStatement prep= conn.prepareStatement(sql);   
         prep.setString(1, getid);  
         prep.setString(2, getpassword);  
         
          ResultSet rs = prep.executeQuery();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值