jsp插入数据的时候,页面空白,怎么解决?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp插入数据的时候,页面空白,怎么解决?相关的知识,希望对你有一定的参考价值。
在jsp中向数据库插入数据,由于数据量很大,中间这段时间页面时空白状态,怎么可以给个提示页面,比如说:请稍后,数据处理中!! 然后等数据插入完毕后转跳到新的页面!跪求解决方案,不胜感激~!
首先要考虑jsp的安全性,通常,jsp页面是放在web程序主目录下或子目录下的。就算用户没有登录,他仍然可以通过以前访问过的jsp路径访问到这些jsp,如果你的程序设计的不是很完善,当用户在这些jsp中提交时,很有可能插入很多错误的或无效的数据。所以为了jsp的安全,可以有两种方式解决:
1、开发一个自定义标签,在标签中对当前用户是否登录做一个判断,这个判断应该很简单了,你的登录程序应该在用户成功登录后在session中放一些用户信息,所以这里的判断就是判断session中是否有用户信息,如果没有(用户未登录),return SKIP_PAGE(自定义标签中的一个功能)用来跳过整个页面,不要执行;如果有(用户已经登录),return EVAL_PAGE(自定义标签中的一个功能)继续执行页面中的内容。
现在就可以把这个自定义标签加入你的所有jsp页面的顶部,当用户没有登录来访问这些jsp,页面将显示空白。你也可以在自定义标签中修改一下,没有登录时跳转到登录页面去。
2、将所有jsp放到WEB-INF目录下或其子目录下。WEB-INF是应用服务器的安全目录,用户是无法通过url的方式访问到该目录下的任何内容的。但是服务器端的程序可以访问它们,比如Action。
在action中,你可以使用mapping.findForward()来跳转到这些WEB-INF下的jsp,当然你需要在struts- config.xml中配置它们了,和配置一般的jsp路径类似,只是要加上/WEB-INF/page/xxx.jsp这样的。
这种做法就是,用户在前台所有的访问都必须访问一个.do,然后来到一个Action中,在Action中你可以做很多事情了,判断用户是否登录、初始化 jsp的各种数据等等,然后跳转到jsp去;用户在jsp中提交数据后又回到Action来。(参见 /Expert/TopicView3.asp?id=4767304中我的回答)
为了免去在每一个Action都要写一段判断用户是否登录的方法的麻烦,你可以做一个BaseAction,其他的Action都继承它。
大概类似这样,你可以扩展它:
public abstract class BaseAction extends Action
public BaseAction()
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
//在这里判断用户是否登录,如果没有登录就直接return到登录界面去
String strforward = " ";
try
ActionForward forward = doMainAction(mapping, form, request,
response);
strforward = forward.getName();
catch (Exception e)
strforward = "homePage ";
ActionForward returnActionForward = (mapping.findForward(strforward));
return returnActionForward;
public abstract ActionForward doMainAction(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException;
每一个继承了BaseAction的Action类,不用实现execute方法,但要实现doMainAction方法,和使用execute方法类似。
以上这些只是说明如何确保jsp的安全性,也只判断了只有登录用户才能操作系统,但没有权限控制。在web项目权限控制是重要而复杂的。一个用户可能关联了一个权限列表,说明这个用户有哪些权限,比如这个用户可能是信息发布人员,他本只能访问CreateInfoAction,另一个用户是信息审核人员,他只能访问AuditInfoAction。现在的问题是这两个Action要怎么和两个权限关联在一起。
你可以在前边提到的doMainAction这个方法的一开始就判断当前用户是否具有某一个权限,如果有则继续执行,否则就return。
这样应该可以简单的实现权限控制了,但不够灵活,并且把权限控制的代码写到Action中,结构也不合理。
所以你可以使用一些安全框架来完成这样的功能,如Acegi,这个框架如果结合spring一起使用效果更好。它要做的事情就是在一个配置文件中设置好url和角色的对应关系,如:
/createInfo.do=creater,admin
/auditInfo.do=auditer,admin
也就是说,admin这个角色可以访问这两个路径,creater角色可以访问前一个路径,auditer这个角色可以访问后一个路径。
acegi要做的事情就是,在用户每一次访问一个路径时(也可能是从一个表单提交来的),就对请求的url进行检查,并检查用户是否具有访问该url的角色,如果没有就跳转到登录界面,否则继续访问后台,这其实就是用几个filter实现的。
开发人员要做的事情就是维护一个用户和角色的对应关系,维护一个url和角色的对应关系,剩下的判断就交给acegi去做了。
acegi很强大,功能不止如此,还有对方法调用的权限检查、记住我的功能等等,但是它的初期配置也是比较复杂的,你需要花一些时间来学习它的配置和原理。
至于加密,你可以考虑https协议的使用。 参考技术A 用c:if($>=XXX)
<option vlaue="XXX">XXX</option>
</c:if>
jstl语法我忘了 大概就是上面的意思 参考技术B 可以异步处理,自己查查。我现在没空解答本回答被提问者采纳
jsp插入数据库乱码 中文的参数怎么处理
a.jsp?name=张三 插入数据库出现乱码
1、JSP页面乱码这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,
2、数据库乱码
这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下: 在数据库连接字符串中加入编码字符集 String
Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
并在页面中使用如下代码:
response.setContentType("text/html;charset=gb2312"); request.setCharacterEncoding("gb2312");
3、中文作为参数传递乱码
当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下: 在参数传递时对参数编码,比如
RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords) 然后在接收参数页面使用如下语句接收
keywords=new String(request.getParameter("keywords").getBytes("8859_1"));
response.sendRedirect("?gh=0001&xm=" + java.net.URLEncoder.encode("忘忧草")); String s=new String(request.getParameter("xm").getBytes("ISO8859_1"),"gb2312"); out.println(s);
4、JSP页面乱码加这句?
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="err.jsp" %>
5、在form中用get方法传参乱码解决方法 如: 1、 login.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%> <html> <head>
<title>get传参乱码问题</title> </head> <body>
<form name="form1" action="login_do.jsp" method="GET"> <input type="text" name="username"/><br>
<input type="password" name="password"/><input type="submit" value="提交"/> </form> </body> </html> ============ 2、login_do.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%> <%
String temp=request.getParameter("username"); if(temp!=null) temp=new String(temp.getBytes("8859_1"),"GBK");
out.println(temp); %> 参考技术A get形式,参数中中文要编码,java.net.Encoder,插入数据库要java.net.Decoder还原数据追问
我在插入数据库前把sql语句out.println,看了下,是正常的中文。因为我已经解码了,将%A%B这样的中文转成utf8,但不知道为什么插入数据库就成了%A%C%D这样的,我的数据库是mysql utf8编码。
参考技术B 打印一下页面接受信息之后,插入数据库之前是不是已经乱码,插入数据库之前不是乱码的话,将数据库的编码格式改成你页面中的编码格式,否则,你页面中的编码格式改为UTF-8或者GBK追问我在插入数据库前把sql语句out.println,看了下,是正常的中文。因为我已经解码了,将%A%B这样的中文转成utf8,但不知道为什么插入数据库就成了%A%C%D这样的,我的数据库是mysql utf8编码。 页面中改成utf-8后,中文字符显示不正常了。
追答就是说你以前写代码的时候数据库和页面的编码格式不一样,现在改成一样的了,就成乱码了,现在讲jsp页面中的乱码改成你需要的文字就行了
本回答被提问者采纳 参考技术C a.jsp?name=张三这是一个向另一个页面发送请求,并传递参数,但参数你用的是中文,所以要进行格式转换,给你个参考http://blog.csdn.net/joywy/article/details/8006645 参考技术D 使用UTF-8编码。追问
我在插入数据库前把sql语句out.println,看了下,是正常的中文。因为我已经解码了,将%A%B这样的中文转成utf8,但不知道为什么插入数据库就成了%A%C%D这样的,我的数据库是mysql utf8编码。
以上是关于jsp插入数据的时候,页面空白,怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章
你好,请问一下你的jsp页面连接数据库后是空白是怎么解决的?