如何在jsp页面使用html5元素

我在用jsp编写程序时,使用html5支持的元素但是显示的时候不符合预期,请问如何在jsp页面使用html5元素?

1个回答

每一个jsp开头都有个<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-trasitional.dtd">(通常是这样)但要支持h5要改成这样<!DOCTYPE html> 而且有些浏览器不支持h5,浏览器推荐使用火狐或者谷歌

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
jsp页面初始化时,css无法对append追加的元素进行渲染
## 1.前提:所有js css 都引用正常。 jsp页面,直接写这样,input标签可以进行css渲染 ``` <body> <div id="max"> <input class="easyui-textbox" > </div> </body> ``` ![图片说明](https://img-ask.csdn.net/upload/202002/18/1582020303_856431.png) ## *2.*如果在js中进行追加,则css没有渲染** ![图片说明](https://img-ask.csdn.net/upload/202002/18/1582020550_976362.png) ![图片说明](https://img-ask.csdn.net/upload/202002/18/1582020718_338128.png) ## 不明白这是什么原因导致的 ,求解
java后台Graphics生成图片,如何用<img>在jsp页面显示出来?
利用Graphics能够进行绘图,但是这个图形怎么才能够用<img>标识在jsp网页显示出来呢?当前我尝试和相关说明如下: (1)我的图形用JFreeChart不好生成,所以用Graphics类绘制,图能够绘制出来; (2)网上说了用BufferedImage,倒是能够在jsp页面显示图片,但是整个页面就显示了这样的一个图片,背景全是黑色的(代码和显示结果如下所示)。我希望生成的就是一个图片显示在网页中,就是说只将中间白色背景的图片显示出来,而黑色的背景不要显示,同时将网页中“Hello World”等元素正常显示。如何实现呢? ``` <%-- Document : testImg Created on : 2019-11-15, 21:43:37 Author : Administrator --%> <%@page import="java.io.File"%> <%@page import="java.awt.Graphics2D"%> <%@page import="java.awt.Transparency"%> <%@page import="javax.imageio.ImageIO"%> <%@page import="java.awt.Color"%> <%@page import="java.awt.Graphics"%> <%@page import="java.awt.image.BufferedImage"%> <%@page contentType="text/html" pageEncoding="GB2312"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> <% BufferedImage image=new BufferedImage(500,200,BufferedImage.TYPE_INT_RGB); Graphics2D g=image.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, 500,200); g.setColor(Color.GREEN); g.fillRect(5, 5, 100, 150); g.dispose(); response.reset(); ServletOutputStream o = response.getOutputStream(); // 输出图象到页面 ImageIO.write(image, "JPEG",o); o.flush(); o.close(); o = null ; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); %> <p><font color="#FF0000">网页页面显示</font></p> </body> </html> ``` 显示的结果如下: ![图片说明](https://img-ask.csdn.net/upload/201911/16/1573869974_476897.jpg)
jsp页面引入外部js,导致整个页面无法显示
这是jsp页面的头文件 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE"/> <title></title> <link rel="stylesheet" type="text/css" href="${basePath}/css/all.css"/> <link rel="stylesheet" type="text/css" href="${basePath}/css/pop.css"/> <link rel="stylesheet" type="text/css" href="${basePath}/css/main.css"/> <%--<script type="text/javascript" src="${basePath}/js/common/jquery-1.8.3.js"/>--%> <%--<script type="text/javascript" src="${basePath}/js/content/adList.js"/>--%> </head> 而且用firebug查看元素时,body里面是没有东西的
JSP页面中,被include进来的页面有什么要求或规范?
<jsp:include page="/webreg/LeftMenu.jsp"></jsp:include> 比如上面这样的引入。LeftMenu.jsp中需不需要把所有的元素(包括<html><head><body>等等)写全以及什么情况下要写全,什么时候不用写全。 如果能多说一些相关知识更好,谢谢。
怎么将后台内容显示在jsp页面上?
报得错误是: NoSuchMethodException: com.krt.person.action.personAction.select() java.lang.Class.getMethod(Class.java:1605) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) 代码如下: public class person_entity_dao { //连接数据库 public Connection connectionDB() throws Exception{ String url="jdbc:mysql://localhost:3306/test"; Connection conn=null; try{ Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection(url, "root", "123456"); } catch(ClassNotFoundException e){ System.out.println("驱动失败"); } catch(SQLException e){ System.out.println("连接数据库失败"); } return conn; } public List quaryList(String name,String age,String sex){ //构造map集合 Map map= new HashMap(); //定义一个元素数据并赋初值 ResultSetMetaData md=null; //构造一个数组列表 List listofRows =new ArrayList(); try { Connection conn=this.connectionDB(); String select="select * from tb_user where name='"+name+"' and age='"+age+"' and sex='"+sex+"'"; System.out.println(select); PreparedStatement ps=conn.prepareStatement(select); //获得结果集 ResultSet rs=ps.executeQuery(); //获得数据集 md=rs.getMetaData(); //获得数据集中列的总数 int num=md.getColumnCount(); //读取数据 while (rs.next()){ //构造一个LinkedHashMap存储数据 LinkedHashMap mapofvalues =new LinkedHashMap(); for(int i=1;i<num;i++){ mapofvalues.put(md.getColumnName(i), rs.getObject(i)); } //将mapofvalues添加到listofRows中 listofRows.add(mapofvalues); } } catch (Exception e) { e.printStackTrace(); } return listofRows; } } public List quaryList(String name, String age,String sex){ return dao.quaryList(name, age, sex); } public String select(ServletRequest Request) throws Exception{ String name=ServletActionContext.getRequest().getParameter("name"); String age=ServletActionContext.getRequest().getParameter("age"); String sex=ServletActionContext.getRequest().getParameter("sex"); List listofRows= service.quaryList(name, age, sex); System.out.println(listofRows.toString()); ((ServletRequest) Request).setAttribute("listofRows", listofRows ); ActionContext.getContext().getSession().put("listofRows",listofRows); //双向搜索接口 Iterator its=listofRows.iterator(); while( its.next()!= null){ return "ok"; } return "error"; } } jsp文件: </head> <body> <form action="ok.action" method="post"> <table border="1" cellspacing="0" cellpadding="0" width="100%"align="center"> <tr style="font-weight:bold"> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>入职时间</th> <th>联系电话</th> <th>职位号</th> <th>部门号</th> <th>用户名</th> <th>密码</th> <% List listofRows =(List)request.getAttribute("listofRows"); if(listofRows.size()!=0){ for(int i=0;i<listofRows.size();i++){ pageContext.setAttribute("listofRows",listofRows.get(i)); } } %> <tr> <td>${listofRows.id}</td> <td>${listofRows.name}</td> <td>${listofRows.age}</td> <td>${listofRows.sex}</td> <td>${listofRows.time}</td> <td>${listofRows.telphone}</td> <td>${listofRows.rid}</td> <td>${listofRows.did}</td> <td>${listofRows.username}</td> <td>${listofRows.password}</td> </tr> </table> </form> </body> </html>
表单提交后页面跳转问题
表单提交后html页面好像跳转了,对话框弹出新页面JavaScript写的内容,屏幕显示的还是原来的界面,地址栏也没变。但我手动输入新页面的URL地址,正确显示了新页面的内容和地址。 旧的页面是login.jsp,这是后端跳转的代码: @RequestMapping("/logUser") public String logUser(User user, Model model) { List<User> userlist1 = userService.searchUser1(); for (User user1 : userlist1) { if (user.getUsername().equals(user1.getUsername()) && user.getPassword().equals(user1.getPassword())) { model.addAttribute("loginsuccess", "登陆成功"); model.addAttribute("currentUser", user1); return "userindex"; } if (user.getUsername()==null||user.getUsername().trim()==""||user.getPassword()==null||user.getPassword().trim()=="") { model.addAttribute("loginnull", "请输入用户名或密码"); return "login"; } } model.addAttribute("loginfail", "用户名或密码错误"); return "login"; } 新界面userindex.jsp用EL表达式将model值取出,并用JavaScript获取元素弹框。登陆成功后提示登陆成功,但还在旧的页面 ![图片说明](https://img-ask.csdn.net/upload/201911/12/1573547142_531217.png) ![图片说明](https://img-ask.csdn.net/upload/201911/12/1573547374_618268.png)
jsp和js分开写时,js里面的中文乱码
项目用到的是spring MVC+layui,我的jsp页面: ``` <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>数据库列表</title> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/static/layui/css/layui.css"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script src="<%=request.getContextPath()%>/static/layui/layui.all.js"></script> <script src="<%=request.getContextPath()%>/static/js/tableList.js" charset="UTF-8"></script> </head> <body> <div class="layui-row"> <div class="layui-col-md4"> </div> </div> <div> <table id="tables" class="layui-hide" lay-filter="tables"> </table> </div> </body> </html> ``` 我的js代码: ``` window.onload=function(){ console.info("already run"); clik(); }; function clik() { layui.use('table', function(){ var table = layui.table; table.render({ elem: '#tables' ,method:'post' ,url:'http://localhost:8080/Hungry_tyrants_war_exploded/tables/get/name' ,cellMinWidth: 300 //全局定义常规单元格的最小宽度,layui 2.2.1 新增 ,cols: [[ {field:'name', width:80, title: '表名', sort: true} ,{field:'desc', width:80, title: '注释'} ]] }); table.on('row(tables)', function(obj){ console.log(obj.tr) //得到当前行元素对象 console.log(obj.data) //得到当前行数据 $.ajax({ url:"http://localhost:8080/Hungrytyrants_war/tables/toOne", data:obj.data, success:function (back) { if (back.code.eq(-1)){ layer.msg(back.desc); } } }); //obj.del(); //删除当前行 //obj.update(fields) //修改当前行数据 }); }); } ``` 环境编码是UTF-8;直接复制代码带文本,查看代码也是utf-8。只要是写在js页面的中文都会乱码,实在搞不懂为什么,有没有懂的大神帮忙解决一下????
SiteMesh框架中复用页面,CSS无法使用问题
我在WebRoot下建立了一个decorators的文件夹里面建立了一个复用的jsp页面 main.jsp现在我通过在 <title> </title>中用 <link href="style.css" type="text/css" rel="stylesheet" /> 引入css文件,在Myeclipse的main.jsp的预览中一切都显示正常 项目运行过后页面却和没有css的纯html页面一样,但是通过 <decorator:body />却能正常的将页面显示出来,控制台中也没有出现任何的错误! 在WEB-INF 中的decorators.xml文件的内容如下 ========================================== <?xml version="1.0" encoding="GBK"?> <decorators defaultdir="/decorators"> <!-- 在excludes元素下指定的页面将不会由SiteMesh来装饰 --> <excludes> </excludes> <!-- 创建一个名为main的装饰器,该装饰器页面为main.jsp, 用于装饰pattern指定的URL的所有页面--> <decorator name="main" page="main.jsp"> <pattern>/* </pattern> </decorator> </decorators> ========================================== WEB-INF.xml的配置 =========================================== <!-- 定义整合SiteMesh必需的ActionContextCleanUp Filter --> <filter> <filter-name>struts-cleanup </filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class> </filter> <!-- 定义整合SiteMesh和核心 Filter --> <filter> <filter-name>sitemesh </filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter </filter-class> </filter> <!-- ActionContextCleanup的Filter必须排在第一位 --> <filter-mapping> <filter-name>struts-cleanup </filter-name> <url-pattern>/* </url-pattern> </filter-mapping> <!-- SiteMesh页面装饰的核心过滤器排在第二位 --> <filter-mapping> <filter-name>sitemesh </filter-name> <url-pattern>/* </url-pattern> </filter-mapping> ============================================ 请问这是怎么回事啊? 但是CSS的引用是没有问题的。 将CSS代码直接放入页面之中,通过 <style> </style>来直接使用CSS页面没有问题, 但是CSS里面通过:background:#1F2C08 url(img01.jpg) repeat-x left top; 引入的img01.jpg图片无法引入。 注意:在预览,jsp这些标签去掉后以html的方式直接打开都是没有任何问题的,页面和设计的一样,但是运行后却出现CSS没有使用以及图片没有使用! [b]问题补充:[/b] 被装饰的页面将CSS从head中提取出来单独成一个css文件后,通过 <link href="../css/css.css" type="text/css" rel="stylesheet" /> 或者 <% String contextPath = request.getContextPath(); %> <link rel="stylesheet" rev="stylesheet" href="<%=contextPath%>/CSS/style.css" type="text/css" media="screen" /> 这两种方式都不能使被装饰的页面被CSS装饰布局。 目录结构是这样的 [img]/upload/attachment/111325/e5192cd7-9255-326c-a187-cff0bab793e0.jpg[/img] 现在jsp里面的jsp页面不能使用css目录里的css,而decorators里的main。jsp也不能使用当前目录下的css文件夹下的style。css。 main.jsp以及jsp目录下的页面在运行后都没有了css的装饰,请问这是怎么回事? 就像这样 [img]/upload/attachment/111327/704bce02-a693-3b4b-b820-e196bdc6930e.jpg[/img]
jsp 分页 出现空指针异常
实在是看不到那出错了 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <html> <head> <title>My JSP 'search_result.jsp' starting page</title> </head> <jsp:include page="search.jsp" /> <body> <% Connection conn=null; Statement stmt=null; ResultSet rs=null; try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String strConn="jdbc:sqlserver://PC201311011725\\MSSQLSERVER:1433;DatabaseName=Xk"; String strUser="sa"; String strPWD="feng123"; conn=DriverManager.getConnection(strConn,strUser,strPWD); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); String str1=request.getParameter("txt1"); String strSql=""; if(str1==null || str1==""){ strSql="select * from studnet"; }else{ strSql="select * from student where stuname like '"+str1.trim()+"%'"; } rs=stmt.executeQuery(strSql); }catch(Exception e){ } %> <table border=1> <tr><th>stuno</th><th>classno</th><th>stuname</th><th>Pwd</th></tr> <% String str=(String)request.getParameter("page"); if(str==null){ str="0"; } int pagesize=5;//每页地 个数 rs.last(); int recordCount=rs.getRow();//总行数 int maxPage=0; maxPage=(recordCount%pagesize==0)?(recordCount/pagesize):(recordCount/pagesize+1);//可以分成多少个页面 int currentPage=Integer.parseInt(str);//当前页面 if(currentPage<1){ currentPage=1; } else{ if(currentPage>maxPage){ currentPage=maxPage; } } rs.absolute((currentPage-1)*pagesize+1);//定位到每个当前页面的第一个元素 for(int i=1;i<=pagesize;i++){ %> <tr> <td><%=rs.getString(1) %></td> <td><%=rs.getString(2) %></td> <td><%=rs.getString(3) %></td> <td><%=rs.getString(4) %></td> </tr> <% try{ if(!rs.next()){break;} }catch(Exception e){ } } %> </table> <p>跳转到<input type="text" size="3" name="page" value="<%=currentPage%>"> 当前页数:<%=currentPage %>/<%=maxPage %> </p> <% if(currentPage>=1){ %> <a href="search_result.jsp?page=1">第一页</a> <a href="search_result.jsp?page=<%=currentPage-1%>">上一页</a> <% } if(currentPage<maxPage) { %> <a href="search_result.jsp?page=<%=currentPage+1%>">下一页</a> <a href="search_result.jsp?page=<%=maxPage%>">尾页</a> <% } rs.close(); stmt.close(); conn.close(); %> </body> </html>
JSP用户权限和界面显示
我设计有三个表:User、Role、Action和两张中间表User_Role 、Role_Action。User表存放用户信息;Role表存放不同类型用户,比如:超级管理员,一般用户等;Action表存放操作,不如:增加一般用户,删除一般用户等。User_Role 三个字段:id,user_id,Role_id;Role_Action也是三个字段:id,role_id,action_id。 现在问题是:我想要根据不同用户类型显示不同页面,最重要的地方是,根据不同类型用户页面显示不同元素,比如按钮的显示与隐藏,菜单项的显示与隐藏。 在网上查询之后,有些网友说用过滤器,我对这个一点也不熟悉;也有些说用HTML的display:none,我觉得这个不安全。有没有比较完美的方式,各位大侠给指点指点,有源码、实例什么的最好啦!
js 的range的替换选中html
js的range.deleteContents()为什么不能彻底删除选中内容,比如<font size=7>1111<font> 选中这段内容后使用该方法,结果还剩下<font size=7><font>,该方法不能删除 元素节点吗? 使用range.detach();方法在jsp页面也不能删除选中的内容,怎么样可以彻底删除 选中的内容呢
本人是初学者看一些代码有些不懂,还请大神指点一下,谢谢
${ msg }表示什么意思呢??? index.jsp怎么跳转到main.jsp呢??? **index.jsp** ``` <html > <title>聊天室</title> <link href="CSS/style.css" rel="stylesheet"> <script type="text/javascript"> function check(){ if(document.getElementById("form1").username.value==""){ alert("请输入用户名!"); document.getElementById("form1").username.focus(); return false; } if(document.getElementById("form1").password.value==""){ alert("请输入密码名!"); document.getElementById("form1").password.focus(); return false; } } </script> <body> <br> <center><h3 style="color:red;">${ msg }</h3></center> <form id="form1" name="form1" method="post" action="${pageContext.request.contextPath }/user" onSubmit="return check()"> <input type="hidden" name="method" value="login"> <table width="371" height="230" border="0" align="center" cellpadding="0" cellspacing="0" background="images/login.jpg"> <tr> <td height="120" colspan="3" class="word_dark">&nbsp;</td> </tr> <tr> <td width="53" align="center" valign="top" class="word_dark">&nbsp;</td> <td width="216" align="center" valign="top" class="word_dark"> <table width="100%" height="100%"> <tr> <td>用户名:</td> <td><input type="text" name="username" class="login"></td> </tr> </table> </td> <td width="94" valign="top" class="word_dark"></td> </tr> <tr> <td width="53" align="center" valign="top" class="word_dark">&nbsp;</td> <td width="216" align="center" valign="top" class="word_dark"> <table width="100%" height="100%"> <tr> <td>密&nbsp;&nbsp;码:</td> <td><input type="password" name="password" class="login"></td> </tr> </table> </td> <td width="94" valign="top" class="word_dark"></td> </tr> <tr> <td width="53" align="center" valign="top" class="word_dark">&nbsp;</td> <td width="216" align="center" valign="top" class="word_dark"> <input name="Submit" type="submit" class="btn_bg" value="进 入"> </td> <td width="94" valign="top" class="word_dark"> </td> </tr> </table> </form> </body> </html> ``` **main** ``` <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ include file="safe.jsp"%> <html> <head> <title>聊天室</title> <link href="CSS/style.css" rel="stylesheet"> <script type="text/javascript" src="${ pageContext.request.contextPath }/js/jquery-1.8.3.js"></script> <script type="text/javascript"> var sysBBS = "<span style='font-size:14px; line-height:30px;'>欢迎光临心之语聊天室,请遵守聊天室规则,不要使用不文明用语。</span><br><span style='line-height:22px;'>";var sysBBS = "<span style='font-size:14px; line-height:30px;'>欢迎光临心之语聊天室,请遵守聊天室规则,不要使用不文明用语。</span><br><span style='line-height:22px;'>"; window.setInterval("showContent();",1000); window.setInterval("showOnLine();",10000); window.setInterval("check();",1000); // Jquery:JS框架. // 相当于window.onload $(function(){ showOnLine(); showContent(); check(); }); function check(){ $.post("${pageContext.request.contextPath}/user?method=check",function(data){ if(data == 1){ // 提示用户下线了 alert("用户已经被踢下线了!"); // 回到登录页面! window.location = "index.jsp"; } }); } // 显示在线人员列表 function showOnLine(){ // 异步发送请求 获取在线人员列表 // Jquery发送异步请求 $.post("${pageContext.request.contextPath}/online.jsp?"+new Date().getTime(),function(data){ // $("#online") == document.getElementById("online"); $("#online").html(data); }); } // 显示聊天的内容 function showContent(){ $.post("${pageContext.request.contextPath}/user?"+new Date().getTime(),{'method':'getMessage'},function(data){ $("#content").html(sysBBS+data); }); } function set(selectPerson){ //自动添加聊天对象 if(selectPerson != "${existUser.username}"){ form1.to.value=selectPerson; }else{ alert("请重新选择聊天对象!"); } } function send(){ if(form1.to.value==""){ alert("请选择聊天对象!"); return false; } if(form1.content.value==""){ alert("发送信息不可以为空!"); form1.content.focus(); return false; } // $("#form1").serialize():让表单中所有的元素都提交. // jquery提交数据.{id:1,name:aa,age:25} $.post("${pageContext.request.contextPath}/user?"+new Date().getTime(),$("#form1").serialize(),function(data){ $("#content").html(sysBBS+data+"</span>"); }); } function exit(){ alert("欢迎您下次光临!"); window.location.href="${pageContext.request.contextPath}/user?method=exit"; } function checkScrollScreen(){ if(!$("#scrollScreen").attr("checked")){ $("#content").css("overflow","scroll"); }else{ $("#content").css("overflow","hidden"); //当聊天信息超过一屏时,设置最先发送的聊天信息不显示 //alert($("#content").height()); $("#content").scrollTop($("#content").height()*2); } setTimeout('checkScrollScreen()',500); } </script> </head> <body> <table width="778" height="150" border="0" align="center" cellpadding="0" cellspacing="0" background="images/top.jpg"> <tr> <td>&nbsp;</td> </tr> </table> <table width="778" height="276" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="165" valign="top" bgcolor="#f6fded" id="online" style="padding:5px">在线人员列表</td> <td width="613" height="200px" valign="top" background="images/main_bj.jpg" bgcolor="#FFFFFF" style="padding:5px; "> <div style="height:290px; overflow:hidden" id="content">聊天内容</div></td> </tr> </table> <table width="778" height="95" border="0" align="center" cellpadding="0" cellspacing="0" bordercolor="#D6D3CE" background="images/bottom.jpg"> <form action="" id="form1" name="form1" method="post"> <input type="hidden" name="method" value="sendMessage"/> <tr> <td height="30" align="left">&nbsp;</td> <td height="37" align="left"> <input name="from" type="hidden" value="${existUser.username}">[${existUser.username} ]对 <input name="to" type="text" value="" size="35" readonly="readonly"> 表情 <select name="face" class="wenbenkuang"> <option value="无精打采的">无精打采的</option> </select> 说:</td> <td width="189" align="left">&nbsp;&nbsp;字体颜色: <select name="color" size="1" class="wenbenkuang" id="select"> <option selected>默认颜色</option> <option style="color:#999999" value="999999">烟雨蒙蒙</option> </select> </td> <td width="19" align="left"><input name="scrollScreen" type="checkbox" class="noborder" id="scrollScreen" onClick="checkScrollScreen()" value="1" checked> </td> </tr> <tr> <td width="21" height="30" align="left">&nbsp;</td> <td width="549" align="left"> <input name="content" type="text" size="70" onKeyDown="if(event.keyCode==13 && event.ctrlKey){send();}"> <input name="Submit2" type="button" class="btn_grey" value="发送" onClick="send()"> </td> <td align="right"><input name="button_exit" type="button" class="btn_grey" value="退出聊天室" onClick="exit()"> </td> <td align="center">&nbsp;</td> </tr> <tr> <td height="30" align="left">&nbsp;</td> <td align="center">&nbsp;</td> </tr> </form> </table> </body> </html> ```
听说这里牛人多,对这个不知道大家是怎么做的
有这样的一个需求, <br />通过一个xml文件定义页面上要生成的元素,比如 按钮,下拉列表等等, <br />而页面则自动根据xml 文件中定义的元素来生成相应的界面内容, <br />问题是: <br />比如按钮的位置,大小,上面的文字内容以及样式,本身的样式,事件等等 <br />这些东西太多,如何比较好的在xml中定义 <br />小弟我想了好久,基本没什么头绪,所以来这里请教了,还望大家多多指导<br /><strong>问题补充</strong><br />zk? taglib? <br />本人入行不久,tablig还知道点,zk就不清楚了,还请楼上的说的详细些 <br />比如: <br />我在xml文件中定义了一个button,一个下拉列表(它们的位置 和样式等) <br />页面根据这个xml文件 自动生成一个button 和一个下拉列表,样式和位置生成什么都是根据 <br />这个xml文件定义的 <br /><br /><strong>问题补充</strong><br />我查了下,zk是一个ajax框架,但不是这样 <br />我基本所有的页面元素都在xml文件中定义好了,这个xml文件实际就是一个页面模板 <br />它存放了所有页面要显示的元素<br /><strong>问题补充</strong><br /><div class="quote_title">rainerWJY 写道</div><div class="quote_div">直接用swing映射html.</div><br />直接用swing映射html应该不行 <br /> <br />html还算熟悉 dom 就一般了, <br />详细的我还没想好,但是页面上要显示的html元素 都要在xml文件中定义好 <br />就是没什么思路,不知道xml文件中该如何来定义, <br />因为html元素种类多,属性多,页面可能还有嵌套的元素,所以比较麻烦感觉<br /><strong>问题补充</strong><br /><div class="quote_title">bloodrate 写道</div><div class="quote_div">用taglib好,否则你可能要在每次调用展现层的时候都传大量乱七八糟的数据和业务数据搅和在一起...</div><br />你说的也是, <br />但使用标签的话,达不到自动生成的页面的效果 <br />而且我比如要去掉一个button 直接修改xml文件就可以了,不用去jsp页面上进行修改 <br /><strong>问题补充</strong><br /><div class="quote_title">rainerWJY 写道</div><div class="quote_div"><div class="quote_title">seety 写道</div><div class="quote_div"><div class="quote_title">rainerWJY 写道</div><div class="quote_div">直接用swing映射html.</div> <br />直接用swing映射html应该不行 <br /> <br />html还算熟悉 dom 就一般了, <br />详细的我还没想好,但是页面上要显示的html元素 都要在xml文件中定义好 <br />就是没什么思路,不知道xml文件中该如何来定义, <br />因为html元素种类多,属性多,页面可能还有嵌套的元素,所以比较麻烦感觉</div> <br /> <br /> <br />这个问题我是思考过的。 <br />1.这个思路很多人都能想的到。如果有这样的好的解决方案,我相信swing会很火。 <br />2.没有,替代是什么?或许是flex。不过我没什么研究 <br />3.html解析+渲染这个还是交给浏览器去做吧。他们就做这个的。 <br />4.简单的实用性不强,不简单的一个人做不来。。。</div> <br /> <br /> <br />其实我也觉得有点难度,所以跑到这里来了,集思广益, <br />弄个还算过的去的就可以了,以后有心思路了再改进 <br />
一个页面中切换表格时分页栏未能作用于其相应表格的数据
![图片说明](https://img-ask.csdn.net/upload/201603/10/1457581046_902081.png) jsp页面有未读反馈和已读反馈 两个表格,现在切换表格时,下面的分页栏只对未读反馈起效果,当表格切换到已读反馈时,分页栏还是作用于未读反馈表格.求帮忙解决!!! 页面代码如下: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <link rel="stylesheet" type="text/css" href="${ctx}/static/css/feedback/feedback.css"> <div class="appMain"> <div class="appLeft"> <!-- 主要内容区域 --> <div class="mainContent"> <div class="feedback"> <div class="feedbackMain"> <ul> <li onclick="tab('tab1')" class="navCurrent" id="navli0">未读反馈</li> <li onclick="tab('tab2')" id="navli1">已读反馈</li> </ul> <div class="tabList"> <div> <ol id="tab1" style="display: block;"> <%-- <li> <div clsass="feedbackTop"> <h2></h2> <p></p> </div> <div class="feedMain"> <p></p> </div> <img src="${ctx}/static/images/gray.png" class="hideImg"> </li> --%> </ol> </div> <div> <ol id="tab2" style="display: none;"> <%-- <li> <div class="feedbackTop"> <h2></h2> <p></p> </div> <div class="feedMain"> <p></p> </div> <img src="${ctx}/static/images/gray.png" class="hideImg"> </li> --%> </ol> </div> </div> </div> </div> </div> <br><div id="pageFooter"></div> <!-- 主要内容区域结束 --> </div> <!-- 右边搜索栏 --> <div class="appRight" id="feedBakForm"> <div class="rightMain"> <ul> <li> <h2>搜索</h2> </li> <li> <h3>关键字搜索:</h3> <input type="text" name="keywords" placeholder="请输入关键字" /> </li> <li> <h3>时间范围:</h3> <input type="text" readonly name="startTime" onclick="laydate()" placeholder="开始时间"/> <input type="text" readonly name="endTime" onclick="laydate()" placeholder="结束时间" /> </li> <li> <h3>邮箱账号搜索:</h3> <input type="text" name="email" placeholder="请输入邮箱账号" /> </li> </ul> <a class="btn" style="margin-left: 10px;" id="feedBackSearch">确认搜索</a> </div> <%-- <div class="rightMain"> <ul class="detail"> <li> <h2>批量处理</h2> </li> <li> <h3 class="showImg">批量处理</h3> </li> <li> <a data-type="read" class="editFeedback" href="${ctx}/admin/feedback/list" data-id="">标记为已处理</a> </li> <li> <a data-type="del" class="delFeedback" href="${ctx}/admin/feedback/list" data-id="">删除</a> </li> </ul> </div> --%> </div> </div> <script type="text/javascript" src="${ctx}/static/js/laydate/laydate.js"></script> <script type="text/javascript" src="${ctx}/static/js/laypage/laypage.js"></script> <script type="text/javascript"> var pageSign = true; var FeedBackService = { init: function (pageIndex) { var me = this; var params = ServiceUtils.getInputDomain('feedBakForm'); params.pageIndex = pageIndex || 1; ServiceHttp.execute('${ctx}/admin/feedback/list?_=' + new Date().getTime(), params, function (cb) { if (cb.success) { me.setData(cb.result.data || []); me.setPage(cb.result.totalPages); } else { bootbox.alert(cb.message); } }) }, setData: function (data) { var me = this; $('#tab1').html(''); var html = ''; $.each(data, function (index, value) { html += '<li>'; html += '<div class="feedbackTop">'; html += '<h2>' + (value.email || '') + '</h2>'; html += '<p>' + (value.createTime || '') + '</p>'; html += '</div>'; html += '<div class="feedMain">'; html += '<p>' + (value.content || '') + '</p>'; html += '</div>'; html += '<img src="${ctx}/static/images/gray.png" class="hideImg">'; html += '</li>'; }); $('#tab1').html(html); }, setPage: function (pages) { var me = this; if (pageSign) { laypage({ cont: 'pageFooter', pages: pages || 0, skip: true, groups: 3, jump: function (obj, first) { if (!first) { me.init(obj.curr); } } }); } pageSign = false; } , reload:function(){ pageSign=true; FeedBackService.init(1); } } var FeedBack2Service = { init: function (pageIndex) { var me = this; var params = ServiceUtils.getInputDomain('feedBakForm'); params.pageIndex = pageIndex || 1; ServiceHttp.execute('${ctx}/admin/feedback/list2?_=' + new Date().getTime(), params, function (cb) { if (cb.success) { me.setData(cb.result.data || []); me.setPage(cb.result.totalPages); } else { bootbox.alert(cb.message); } }) }, setData: function (data) { var me = this; $('#tab2').html(''); var html = ''; $.each(data, function (index, value) { html += '<li>'; html += '<div class="feedbackTop">'; html += '<h2>' + (value.email || '') + '</h2>'; html += '<p>' + (value.createTime || '') + '</p>'; html += '</div>'; html += '<div class="feedMain">'; html += '<p>' + (value.content || '') + '</p>'; html += '</div>'; html += '<img src="${ctx}/static/images/gray.png" class="hideImg">'; html += '</li>'; }); $('#tab2').html(html); }, setPage: function (pages) {alert(111) var me = this; if (pageSign) { laypage({ cont: 'pageFooter', pages: pages || 0, skip: true, groups: 3, jump: function (obj, first) { if (!first) { me.init(obj.curr); } } }); } pageSign = false; }, reload:function(){ pageSign=true; FeedBack2Service.init(1); } } $(function () { // FeedBackService.init(1); $('#feedBackSearch').on('click', function () { pageSign = true; FeedBackService.init(1); FeedBack2Service.init(1); }) }) </script> <script type="text/javascript" src="${ctx}/static/bootstrap/js/bootstrap.min.js"></script> <script type="text/javascript"> function tab(pid) { var tabs = ["tab1", "tab2"]; for (var i = 0; i < 7; i++) { if (tabs[i] == pid) { document.getElementById(tabs[i]).style.display = "block"; $('#navli'+i).eq(0).addClass("navCurrent"); if(tabs[i]=='tab1'){ FeedBackService.init(1); }else{ FeedBack2Service.init(1); } } else { document.getElementById(tabs[i]).style.display = "none"; $('#navli'+i).eq(0).removeClass("navCurrent"); } } }; /* laydate({ elem: '#hello', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class' event: 'focus', //响应事件。如果没有传入event,则按照默认的click festival: true //显示节日 }); */ </script>
(新手)关于HTML简单登录的问题代码的问题
<html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>登录界面</title> <script> //登录处理 function Login(){ if(DL.mail.value==""){ mess.innerHTML="请输入邮箱帐号" DL.mail.focus; //return false; }else{ mess.innerHTML=""; //return true; } if(DL.password.value==""){ mess1.innerHTML="请输入密码" DL.password.focus; return false; }else{ mess1.innerHTML=""; loginMsg.style.display="block";//块级元素 login.style.display="none";//不显示login的内容 setTimeout("mySubmit(),3000"); return false; } } function mySubmit(){ DL.submit(); } </script> </head> <body> <form name="DL" action=""><!--登录处理JSP--> <table border="0" background="../../Login/PIC/pic_login.gif" width="420" height="265"> <tr height="50"> <td colspan="4">&nbsp;</td> </tr> <tr> <!--账号输入框--> <td width="20%" align="right"><font size="2">邮箱:</font></td> <td colspan="2" width="45%"> <input type="text" name="mail" size="25" /> <div id="mess" style="font-size: small; color: #F00;"></div> <!--DIV用来输出提示信息--> </td> <td>&nbsp;</td> </tr> <tr> <!--密码输入框--> <td align="right"><font size="2">密码:</font></td> <td colspan="2"> <input type="password" name="password" size="25" /> <div id="mess1" style="color:red; font-size:small"></div> </td> <td><font size="2"><a href="">忘记密码</a></font></td> </tr> <tr height="20"> <!--记住登录状态--> <td>&nbsp;</td> <td width="25%"> <font size="2"> <input type="checkbox" name="save" />记住登录状态</font> </td> <td><font size="2"><a href="">Https安全访问</a></font></td> <td width="28%">&nbsp;</td> </tr> <tr height="50"> <td>&nbsp;</td> <div id="login"> <td colspan="2"> <input type="image" src="../../Login/PIC/button_login_new.gif" onclick=" return Login()" /> <!--JS函数Login处理登录--> <div id="loginMsg" style="color:red; display:none; font-size:small"> 正在登录搜狐通行证,请稍后.... </div> </td> </div> <td>&nbsp;</td> </tr> <tr> <td colspan="4">&nbsp;</td> </tr> </table> </form> </body> </html> 问题是这样的:点击了图片登录按钮后,按理来说会出现“正在登录搜狐通行证,请稍后....”3秒,然后才提交刷新页面,可是实际却瞬间就提交刷新了.....一直找不到问题所在。请大家帮我看下==
Tomcat 虚拟站点下的子目录无法请求 Struts中的action
在webapps目录下,部署了一个web 工程 :ttest ttest的目录结构如下图: ttest WEB-INF classes lib struts-config.xml struts-html.tld struts-bean.tld struts-html.tld struts-logic.tld web.xml xhtmlmp login.jsp *****.jsp login.jsp *****.jsp 问题描述: 工程采用jsp+struts 来实现。 在ttest 的目录下有一部分jsp文件,同时在其子目录xhtmlmp目录下也有一部分jsp文件。 把ttest部署到tomcat 的webapps目录下以后, 如果以ip地址的形式 来访问这两部分jsp文件,请求的action ,可以进行处理 例如: 192.168.22.228:8080/ttest/login.jsp 请求loginAction ,可以请求action 没问题。 192.168.22.228:8080/ttest/xhtmlmp/login.jsp 请求mobileLoginAction ,也没问题。 现在的问题是 通过配置虚拟站点,来进行访问这两部分jsp 就有问题了。 ttest下的jsp文件可以 请求对应的action,但是子目录里的xhtmlmp中的jsp 文件 就无法请求到 action,页面会报出404错误! 例如: http://mmvd.ttest.com/ttest/login.jsp 这个地址可以请求到action [color=red] http://mmvd.ttest.com/xhtmlmp/login.jsp 这个地址就 无法请求action ! [/color] 我在tomcat的 conf目录中的server.xml 中 配置了 一个Host 元素: <Host name="mmvd.ttest.com" appBase="/usr/local/tomcat/webapps/ttest/" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/usr/local/tomcat/webapps/ttest" debug="0" reloadable="true" /> <Context path="/wml" docBase="/usr/local/tomcat/webapps/wml"> </Context> <Context path="/xhtmlmp" docBase="/usr/local/tomcat/webapps/ttest/xhtmlmp"/> <Context path="/mmsFile" docBase="/usr/local/mmvd/mmsFile"> </Context> </Host> 另外 在ttest工程下的WEB-INF目录里,strtuts-config.xml的部分信息如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="loginActionForm" type="com.ttest.pc.LoginActionForm" /> <form-bean name="mobileLoginActionForm" type="com.ttest.mobile.MobileLoginActionForm" /> <action-mappings> <!-- ****************************** ttest *********************************** --> <action input="/login.jsp" name="loginActionForm" path="/loginAction" scope="session" type="com.ttest.pc.LoginAction" validate="false"> <forward name="retrieve" path="/retrieve.jsp" redirect="false" /> <forward name="login" path="/login.jsp" redirect="true" /> </action> <action name="mobileLoginActionForm" path="/xhtmlmp/mobileLoginAction" scope="request" type="com.ttest.mobile.MobileLoginAction" validate="false"> <forward name="retrieve" path="/xhtmlmp/retrieve.jsp" redirect="false" /> <forward name="login" path="/xhtmlmp/login.jsp" redirect="true" /> </action> </action-mappings> <message-resources parameter="ApplicationResources" /> </struts-config> [color=blue]-----------------------------------------------------------------[/color] 在补充一下: 现在的问题是 这四个 链接 请求action的状况: Ip形式访问 192.168.22.228:8080/ttest/login.jsp 请求loginAction ,可以请求action 没问题。 192.168.22.228:8080/ttest/xhtmlmp/login.jsp 请求mobileLoginAction ,也没问题。 通过配置host,以虚拟站点形式访问: http://mmvd.ttest.com/ttest/login.jsp 这个地址可以请求到action [color=red]http://mmvd.ttest.com/xhtmlmp/login.jsp 这个地址就 无法请求action ! [/color] host的配置就是这个样子,而且要求不能改变: <Host name="mmvd.ttest.com" appBase="/usr/local/tomcat/webapps/ttest/" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/usr/local/tomcat/webapps/ttest" debug="0" reloadable="true" /> <Context path="/wml" docBase="/usr/local/tomcat/webapps/wml"> </Context> <Context path="/xhtmlmp" docBase="/usr/local/tomcat/webapps/ttest/xhtmlmp"/> <Context path="/mmsFile" docBase="/usr/local/mmvd/mmsFile"> </Context> </Host>
struts2+ajax登录问题
action中: public String execute() throws Exception { User u=userService.findUserByNameAndPassword(user); try { u.setStudentCourseInfoList(null); u.setTeacherCourseInfoList(null); user.setId(u.getId()); return String.valueOf(u.getType()); /*return SUCCESS;*/ } catch (NullPointerException e) { //json.fromObject("用户名密码错误,请重新登录!"); //this.message="错误"; JSONObject jsob = new JSONObject(); jsob.put("success", "用户名密码错误或不存在"); json = JSONObject.fromObject(jsob); return ERROR; } } 配置文件中: <action name="loginPro" class="com.lb.action.UserAction"> <result name="1">/jsp/teacher/teacher.jsp</result> <result name="2">/jsp/student/student.jsp</result> <result name="0">/jsp/admin/admin.jsp</result> <!-- <result name="error">/jsp/login/fail.jsp</result> <result type="json" name="error"> <param name="root">json</param> </result>--> </action> 页面中: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>用户登录界面</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/icon.css"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/color.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.min.css"> <script src="${pageContext.request.contextPath}/jquery/jquery-2.1.3.min.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/easyui/jquery.easyui.min.js"></script> <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.min.js"></script> <style type="text/css"> .myBackground { background: url("${pageContext.request.contextPath}/picture/background.jpg") no-repeat; background-position: 50px 50px; } .myInstitute { background: url("${pageContext.request.contextPath}/picture/logo.jpg") no-repeat; } .myBackgroundColor { background-color: #fff; } </style> </head> <body class="easyui-layout"> <div data-options="region:'north',split:false" style="height: 100px" class="myInstitute myBackgroundColor"></div> <div data-options="region:'center',split:false" style="width: 800px" class="myBackground"> <div style="margin-top: 30px; margin-left: 250px;"> <h2 style="font-size: 40px; color: grey;">学生信息管理系统</h2> <h4 style="font-size: 15px; color: grey; margin-left: 100px; margin-top: 30px;">——光山县第二高级中学</h4> </div> <div style="margin-top: -10px; margin-left: 800px;"> <form id="loginForm" method="post" style="border-left: #CCC 2px solid"> <div style="margin: 20px; margin-left: 50px;"> <input type="text" name="user.username" class="form-control" id="inputUsername" placeholder="用户名" style="width: 250px;"> </div> <div style="margin: 20px; margin-left: 50px;"> <input type="password" name="user.password" class="form-control" id="inputPassword" placeholder="密码" style="width: 250px;"> </div> <div style="margin: 20px; margin-left: 50px;"> <button id="login" type="submit" class="btn btn-default" style="width: 250px;">登录</button> </div> </form> </div> </div> <script type="text/javascript"> function loginHandle() { $.ajax({ //url:g_contextPath+'/servlet/LoginHandleServlet', url:'loginPro.action', //url表示服务器端处理用户登录的URL地址 //data表示要提交到服务器端的数据,更加简洁的写法 data: $('#loginForm').serialize(), //serialize()方法的作用是将form表单中的内容序列化成字符串 dataType: 'json', type:'post', success: function(data) { var dataObj=eval(data); $.messager.alert('提示',dataObj.success,'error'); } }); }; $("#loginForm").keydown(function(e){ if(e.keyCode == 13){ loginHandle(); } }); $(function(){ $('#login').click(function() { //var params=$('input').serialize(); //将input元素序列化,返回JSON数据格式 $.ajax({ type: 'post', //请求方式为post方式 url: 'login.action', //请求地址 dataType: 'json', //服务器返回类型为JSON类型 data:$('#loginForm').serialize(), //发送到服务器的数据 success:function(data){ //请求成功后的回调函数 var dataObj=eval(data); $.messager.alert('提示',dataObj.success,'error'); } }); }); }) </script> </body> </html> 问题:学生 老师 管理员都在一个用户表,用类型区分,用户登录判断用户名和密码,判断用户类型 跳转对应页面,如果用户名或密码错误,弹出错误消息
ssh中 no result defined for action and result error
![图片说明](https://img-ask.csdn.net/upload/201610/24/1477317986_290498.png) ``` <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="swork" extends="struts-default" namespace=""> <!-- 全局异常 --> <global-exception-mappings> <!-- result 会取找全局视图的名称 --> <exception-mapping result="null" exception="java.lang.NullPointerException"></exception-mapping> <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping> </global-exception-mappings> <!-- Action实例交给spring容器创建 --> <!-- 招聘信息Action --> <action name="swork_*" class="searchworkAction" method="{1}"> <!-- 招聘列表展示 --> <result name="sworkList">/WEB-INF/list.jsp</result> <result name="error">/WEB-INF/list.jsp</result> <!-- 跳转到添加页面 --> <result name="sworkAdd">/WEB-INF/sworkadd.jsp</result> <!-- 添加成功,进入列表 (防止刷新就多一条记录问题,所以用重定向) --> <result name="sworklistAction" type="redirectAction">swork_list</result> <!-- 进入修改页面 --> <result name="edit">/WEB-INF/sworkedit.jsp</result> </action> </package> </struts> ``` action ``` import java.util.List; import java.util.Map; import org.apache.struts2.interceptor.RequestAware; import com.zx.entity.Searchwork; import com.zx.service.ISearchworkService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.opensymphony.xwork2.util.ValueStack; /** * 新闻模块控制器开发: * 1.招聘列表展示 * 2. 添加招聘信息 * 3. 修改招聘信息 * 5. 删除新闻 * @author zhang x * */ public class SearchworkAction extends ActionSupport implements ModelDriven<Searchwork>, RequestAware{ /** * */ private static final long serialVersionUID = 1L; /*******一、封装数据********/ private Searchwork swork = new Searchwork(); // 【模型驱动】 // 封装请求的部门id(下拉列表的实际的值) public void setSearchwork(Searchwork swork) { this.swork = swork; } public Searchwork getSearchwork() { return swork; } public Searchwork getModel() { return swork; // 返回实例化后的对象 } /*******二、注入招聘信息Service********/ private ISearchworkService searchworkService; public void setSearchworkService(ISearchworkService searchworkService) { this.searchworkService = searchworkService; } /** * 1. 招聘信息列表展示 */ public String sworkList() { // 查询所有员工 List<Searchwork> listSwork = searchworkService.getAll(); // 保存到request request.put("listSwork", listSwork); return "sworkList"; } /** * 2. 进入到添加招聘信息页面 */ public String viewAdd(){ return "sworkAdd"; } /** * 2. 添加员工 - 添加招聘信息数据 */ public String save(){ // 调用Service,保存信息 searchworkService.save(swork); return "sworklistAction"; // 重定向到Action } /** * 3. 修改招聘信息 - 进入修改视图 */ public String viewUpdate(){ // 获取要修改的记录的id int id = swork.getId(); // 1. 根据招聘信息的主键查询 (lazy="false") Searchwork swork = searchworkService.findById(id); // 已经有部门信息 // 数据回显 ValueStack vs = ActionContext.getContext().getValueStack(); vs.pop();// 移除栈顶元素 vs.push(swork); // 入栈 return "sworkEdit"; } /** * 4. 修改招聘信息 - 确认修改 */ public String update() { //1. 更新招聘信息 searchworkService.update(swork); return "sworklistAction"; // 重定向到列表 } /** * 5. 修改招聘信息 - 删除 */ public String delete(){ // 获取要删除招聘信息的主键 int sworkId = swork.getId(); // 调用service删除 searchworkService.delete(sworkId); return "sworklistAction"; } // 接收框架运行时候传入的代表request对象的map private Map<String, Object> request; public void setRequest(Map<String, Object> request) { this.request = request; } } ``` ``` %@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>招聘列表展示</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <div align="center" style="width:80% "> <s:a href="swork_viewAdd">添加招聘信息</s:a> </div> <table border="1" align="center" width="80%" cellpadding="5" cellspacing="0"> <tr> <th>序号</th> <th>工作名称</th> <th>工作地点</th> <th>薪水</th> <th>操作</th> </tr> <s:if test="#request.listSwork != null"> <s:iterator var="swork" value="#request.listSwork" status="st"> <tr> <td> <s:property value="#st.count"/> </td> <td> <s:property value="#swork.id"/> </td> <td> <s:property value="#swork.jobName"/> </td> <td> <s:property value="#swork.workPlace"/> </td> <td> <s:property value="#swork.income"/> </td> <td> <s:a href="swork_viewUpdate?id=%{#swork.id}">修改</s:a> <s:a href="swork_delete?id=%{#swork.id}">删除</s:a> </td> </tr> </s:iterator> </s:if> <s:else> <tr> <td colspan="5">对不起,没有你要找的数据!请先录入。</td> </tr> </s:else> </table> </body> </html> ``` 初学者求大神告知哪里出错,为什么用浏览器打开jsp会报错no result defined for action and result error
spring mvc+shiro+cas 实现cas client功能 跳转回来404
http://securitycenter.com:8080/gtsys/cas?ticket=ST-14-HEDhc1GVQt0UYdiZpi7R-cas 返回这个地址 404 ![图片说明](https://img-ask.csdn.net/upload/201510/09/1444404164_27274.png) ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd" > <!-- 定时器开关 开始 --> <task:annotation-driven /> <!-- 标注类型 的事务配置 如果使用注解事务。就放开 <tx:annotation-driven />--> <!-- 统一异常处理方式 --> <bean id="exceptionHandler" class="com.lanyuan.exception.MyExceptionHandler"/> <!-- 初始化数据 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > <property name ="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driverClass}" /> </bean> <bean id="pagePlugin" class="com.lanyuan.plugin.PagePlugin"> <property name="properties"> <props> <prop key="dialect">mysql</prop> <prop key="pageSqlId">.*query.*</prop> </props> </property> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动匹配Mapper映射文件 --> <property name="mapperLocations" value="classpath:mappings/*-mapper.xml"/> <property name="typeAliasesPackage" value="com.lanyuan.entity"/> <property name="plugins"> <array> <ref bean="pagePlugin" /> </array> </property> </bean> <!-- 通过扫描的模式,扫描目录在com.lanyuan.mapper目录下,所有的mapper都继承SqlMapper接口的接口, 这样一个bean就可以了 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.lanyuan.mapper" /> </bean> <!-- 事务配置 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- <aop:config> <aop:pointcut expression="execution(public * com.lanyuan.controller.*(..))" id="pointcut" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="query*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="modify*" propagation="REQUIRED" /> <tx:method name="logicDelById" propagation="REQUIRED" /> </tx:attributes> </tx:advice> --> <!-- <aop:aspectj-autoproxy proxy-target-class="true"/> <bean id="log4jHandlerAOP" class="com.lanyuan.logAop.LogAopAction"></bean> <aop:config proxy-target-class="true"> <aop:aspect id="logAspect" ref="log4jHandlerAOP"> <aop:pointcut id="logPointCut" expression="execution(* org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(..))" /> <aop:around method="logAll" pointcut-ref="logPointCut" /> </aop:aspect> </aop:config> --> <!-- 使用Spring组件扫描的方式来实现自动注入bean --> <context:component-scan base-package="com.lanyuan.task" /> <!-- 隐式地向 Spring 容器注册 --> <context:annotation-config /> </beans> spring-application.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd" > <tx:annotation-driven /> <context:component-scan base-package="com.lanyuan.controller" /> <context:component-scan base-package="com.lanyuan.logAop" /> <!-- 启动对@AspectJ注解的支持 --> <!--通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller--> <aop:aspectj-autoproxy proxy-target-class="true"/> <!-- 注解支持 --> <context:annotation-config/> <!--避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>text/json;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <!-- 采用SpringMVC自带的JSON转换工具,支持@ResponseBody注解 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJackson2HttpMessageConverter" /> <!-- JSON转换器 --> </list> </property> </bean> <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> <mvc:annotation-driven> <!-- 处理responseBody 里面日期类型 --> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> <import resource="spring-mvc-shiro.xml"/> </beans> spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd" > <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > <property name ="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean> <bean id="credentialsMatcher" class="com.lanyuan.shiro.credentials.RetryLimitHashedCredentialsMatcher"> <!-- hashAlgorithmName必须的,没有默认值。可以有MD5或者SHA-1,如果对密码安全有更高要求可以用SHA-256或者更高。 这里使用MD5 storedCredentialsHexEncoded默认是true,此时用的是密码加密用的是Hex编码;false时用Base64编码 hashIterations迭代次数,默认值是1。 --> <constructor-arg ref="cacheManager" /> <property name="hashAlgorithmName" value="md5" /> <!--<property name="hashIterations" value="2" />--> <!--<property name="storedCredentialsHexEncoded" value="true" />--> </bean> <!-- 会话Cookie模板 --> <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <!-- sid如果改为JSESSIONID会导致重定向循环 --> <constructor-arg value="sid"/> <property name="httpOnly" value="true"/> <property name="maxAge" value="-1"/> </bean> <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg value="rememberMe"/> <property name="httpOnly" value="true"/> <property name="maxAge" value="2592000"/><!-- 30天 --> </bean> <!-- rememberMe管理器 --> <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager"> <!-- rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)--> <property name="cipherKey" value="#{T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}"/> <property name="cookie" ref="rememberMeCookie"/> </bean> <bean id="casSubjectFactory" class="org.apache.shiro.cas.CasSubjectFactory"/> <!-- 凭证匹配器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="casRealm" /> <property name="sessionManager" ref="sessionManager"/> <!-- 使用下面配置的缓存管理器 --> <property name="cacheManager" ref="cacheManager" /> <property name="rememberMeManager" ref="rememberMeManager"/> <property name="subjectFactory" ref="casSubjectFactory"/> </bean> <!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) --> <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/> <property name="arguments" ref="securityManager"/> </bean> <!--自定义Realm --> <!-- <bean id="myRealm" class="com.lanyuan.shiro.MyRealm"> <property name="credentialsMatcher" ref="credentialsMatcher" /> <property name="cachingEnabled" value="false" /> --> <!-- 如需要自定义缓存时间放开以下.修改 ehcache.xml--> <!--<property name="authenticationCachingEnabled" value="true"/>--> <!--<property name="authenticationCacheName" value="authenticationCache"/>--> <!--<property name="authorizationCachingEnabled" value="true"/>--> <!--<property name="authorizationCacheName" value="authorizationCache"/>--> <!-- </bean> --> <!-- <property name="userService" ref="userService"/> --> <bean id="casRealm" class="com.lanyuan.shiro.MyCasRealm"> <property name="cachingEnabled" value="true"/> <property name="authenticationCachingEnabled" value="true"/> <property name="authenticationCacheName" value="authenticationCache"/> <property name="authorizationCachingEnabled" value="true"/> <property name="authorizationCacheName" value="authorizationCache"/> <!--该地址为cas server地址 --> <property name="casServerUrlPrefix" value="${shiro.casServer.url}"/> <!-- 该地址为是当前应用 CAS 服务 URL,即用于接收并处理登录成功后的 Ticket 的, 必须和loginUrl中的service参数保持一致,否则服务器会判断service不匹配--> <property name="casService" value="${shiro.client.cas}"/> </bean> <bean id="sysUserFilter" class="com.lanyuan.shiro.filter.SysUserFilter"/> <bean id="kickoutSessionControlFilter" class="com.lanyuan.shiro.filter.KickoutSessionControlFilter"> <property name="cacheManager" ref="cacheManager"/> <property name="sessionManager" ref="sessionManager"/> <property name="kickoutAfter" value="false"/> <property name="maxSession" value="1"/> <property name="kickoutUrl" value="/login.shtml"/> </bean> <bean id="casFilter" class="org.apache.shiro.cas.CasFilter"> <!--配置验证错误时的失败页面(Ticket 校验不通过时展示的错误页面) --> <property name="failureUrl" value="${shiro.failureUrl}"/> </bean> <bean id="casLogoutFilter" class="io.github.howiefh.cas.session.CasLogoutFilter"> <property name="sessionManager" ref="sessionManager"/> </bean> <bean id="logoutFilter" class="org.apache.shiro.web.filter.authc.LogoutFilter"> <property name="redirectUrl" value="${shiro.logout.url}"/> </bean> <!-- 配置shiro的过滤器工厂类,id- shiroFilter要和我们在web.xml中配置的过滤器一致 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <!-- <property name="loginUrl" value="/login.shtml" /> <property name="successUrl" value="/index.shtml" /> --> <property name="loginUrl" value="${shiro.login.url}"/> <property name="successUrl" value="${shiro.login.success.url}"/> <property name="unauthorizedUrl" value="/denied.jsp" /> <!-- 自定义权限配置 --> <property name="filterChainDefinitionMap" ref="chainDefinitionSectionMetaSource" /> <property name="filters"> <util:map> <entry key="cas" value-ref="casFilter"/> <entry key="logout" value-ref="logoutFilter" /> <entry key="casLogout" value-ref="casLogoutFilter" /> <entry key="sysUser" value-ref="sysUserFilter"/> <entry key="kickout" value-ref="kickoutSessionControlFilter"/> </util:map> </property> </bean> <!--自定义filterChainDefinitionMap --> <bean id="chainDefinitionSectionMetaSource" class="com.lanyuan.shiro.ChainDefinitionSectionMetaSource"> <property name="filterChainDefinitions"> <value> /casFailure.jsp = anon /cas = casLogout,cas /logout = logout /favicon.ico = anon /admin_files/** = anon /fonts/** = anon /404/** = anon /error.jsp = anon /js/** = anon /layer-v1.9.2/** = anon /notebook/** = anon /login.shtml = anon /denied.jsp = anon /install.shtml = anon /lanyuan.shtml = anon /** = casLogout,user </value> </property> </bean> <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/> <!-- 会话DAO --> <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO"> <property name="activeSessionsCacheName" value="shiro-activeSessionCache"/> <property name="sessionIdGenerator" ref="sessionIdGenerator"/> </bean> <!-- 会话验证调度器 --> <!-- 全局的会话信息检测扫描信息间隔30分钟--> <bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler"> <property name="sessionValidationInterval" value="1800000"/> <property name="sessionManager" ref="sessionManager"/> </bean> <!-- 会话管理器 --> <!-- 全局的会话信息设置成30分钟,sessionValidationSchedulerEnabled参数就是是否开启扫描 --> <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> <property name="globalSessionTimeout" value="1800000"/> <property name="deleteInvalidSessions" value="true"/> <property name="sessionValidationSchedulerEnabled" value="true"/> <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/> <property name="sessionDAO" ref="sessionDAO"/> <property name="sessionIdCookieEnabled" value="true"/> <property name="sessionIdCookie" ref="sessionIdCookie"/> </bean> <!--shiro缓存管理器 --> <bean id="cacheManager" class="com.lanyuan.shiro.spring.SpringCacheManagerWrapper" > <property name="cacheManager" ref="springCacheManager"/> </bean> <bean id="springCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="ehcacheManager"/> </bean> <!--ehcache--> <bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml"/> </bean> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /> </beans> spring-shiro.xml <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="false"> <display-name>gtsys</display-name> <!-- 单点登出 --> <!-- <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-shiro.xml,classpath:spring-application.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <async-supported>true</async-supported> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.shtml</url-pattern> </servlet-mapping> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> --> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.eot</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.ttf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.xml</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.swf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.zip</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.woff</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>login.shtml</welcome-file> </welcome-file-list> </web-app> web.xml ## shiro shiro.session.timeout=1800000 shiro.session.validate.timespan=1800000 # cas\u767B\u5F55URL shiro.login.url=https://localhost:8443/cas-server/login?service=http://securitycenter.com:8080/gtsys/cas # cas logout shiro.logout.url=https://localhost:8443/cas-server/logout?service=http://securitycenter.com:8080/gtsys # cas\u767B\u5F55\u6210\u529F\u8DF3\u8F6CURL shiro.login.success.url=http://securitycenter.com:8080/gtsys/index.shtml # cas\u670D\u52A1\u5668URL shiro.casServer.url=https://localhost:8443/cas-server # \u5BA2\u6237\u7AEFCAS\u767B\u5F55URL shiro.client.cas=http://securitycenter.com:8080/gtsys/cas # \u5BA2\u6237\u7AEFCAS\u9A8C\u8BC1\u5931\u8D25\u8DF3\u8F6CURL shiro.failureUrl=/casFailure.jsp ## dataSource dataSource.driver=com.mysql.jdbc.Driver dataSource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8 dataSource.username=root dataSource.password=1234 properties文件 <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true"> <diskStore path="java.io.tmpdir"/> <!-- <diskStore>==========当内存缓存中对象数量超过maxElementsInMemory时,将缓存对象写到磁盘缓存中(需对象实现序列化接口) * <diskStore path="">==用来配置磁盘缓存使用的物理路径,Ehcache磁盘缓存使用的文件后缀名是*.data和*.index * name=================缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里) * maxElementsOnDisk====磁盘缓存中最多可以存放的元素数量,0表示无穷大 * maxElementsInMemory==内存缓存中最多可以存放的元素数量,若放入Cache中的元素超过这个数值,则有以下两种情况 * 1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中 * 2)若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素 * eternal==============缓存中对象是否永久有效,即是否永驻内存,true时将忽略timeToIdleSeconds和timeToLiveSeconds * timeToIdleSeconds====缓存数据在失效前的允许闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,此为可选属性 * 即访问这个cache中元素的最大间隔时间,若超过这个时间没有访问此Cache中的某个元素,那么此元素将被从Cache中清除 * timeToLiveSeconds====缓存数据在失效前的允许存活时间(单位:秒),仅当eternal=false时使用,默认值是0表示可存活时间无穷大 * 即Cache中的某元素从创建到清楚的生存时间,也就是说从创建开始计时,当超过这个时间时,此元素将从Cache中清除 * overflowToDisk=======内存不足时,是否启用磁盘缓存(即内存中对象数量达到maxElementsInMemory时,Ehcache会将对象写到磁盘中) * 会根据标签中path值查找对应的属性值,写入磁盘的文件会放在path文件夹下,文件的名称是cache的名称,后缀名是data * diskPersistent=======是否持久化磁盘缓存,当这个属性的值为true时,系统在初始化时会在磁盘中查找文件名为cache名称,后缀名为index的文件 * 这个文件中存放了已经持久化在磁盘中的cache的index,找到后会把cache加载到内存 * 要想把cache真正持久化到磁盘,写程序时注意执行net.sf.ehcache.Cache.put(Element element)后要调用flush()方法 * diskExpiryThreadIntervalSeconds==磁盘缓存的清理线程运行间隔,默认是120秒 * diskSpoolBufferSizeMB============设置DiskStore(磁盘缓存)的缓存区大小,默认是30MB * memoryStoreEvictionPolicy========内存存储与释放策略,即达到maxElementsInMemory限制时,Ehcache会根据指定策略清理内存 * 共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出) --> <!-- 注意,以下缓存是永久有效,是系统初始化数据到缓存中,如果不需要永久有效,请另写,或在 --> <cache name="cache" maxEntriesLocalHeap="10000" maxEntriesLocalDisk="1000" eternal="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="0" timeToLiveSeconds="0" memoryStoreEvictionPolicy="LFU" transactionalMode="off"> </cache> <!-- 登录记录缓存 锁定10分钟 --> <cache name="passwordRetryCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> <!-- <cache name="authorizationCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> <cache name="authenticationCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> --> <cache name="shiro-activeSessionCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> <cache name="shiro-kickout-session" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> </ehcache> ehcache.xml package com.lanyuan.shiro; //import com.github.zhangkaitao.shiro.chapter15.service.UserService; import java.util.List; import javax.inject.Inject; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.cas.CasRealm; import org.apache.shiro.subject.PrincipalCollection; import com.lanyuan.entity.ResFormMap; import com.lanyuan.mapper.ResourcesMapper; import com.lanyuan.mapper.UserMapper; /** * <p>User: Zhang Kaitao * <p>Date: 14-2-13 * <p>Version: 1.0 */ public class MyCasRealm extends CasRealm { // private UserService userService; // // public void setUserService(UserService userService) { // this.userService = userService; // } @Inject private ResourcesMapper resourcesMapper; @Inject private UserMapper userMapper; @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username = (String)principals.getPrimaryPrincipal(); // PathMatchingFilterChainResolver SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); //authorizationInfo.setRoles(userService.findRoles(username)); // authorizationInfo.setStringPermissions(userService.findPermissions(username)); String userId = SecurityUtils.getSubject().getSession().getAttribute("userSessionId").toString(); List<ResFormMap> rs = resourcesMapper.findUserResourcess(userId); for (ResFormMap resources : rs) { authorizationInfo.addStringPermission(resources.get("resKey").toString()); } return authorizationInfo; } } MyCasRealm.java ``` ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <aop:config proxy-target-class="true"></aop:config> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean> </beans> spring-mvc-shiro.xml ``` 这个是更改 网上的蓝缘系统的 cas server 和cas client参考的 http://howiefh.github.io/2015/05/19/shiro-cas-single-sign-on/?utm_source=tuicool 不知道为什么会返回404
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Elastic:菜鸟上手指南
您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1) Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2) Elasticsearch中的一些重要概念:cluster, n
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
Java知识体系最强总结(2020版)
更新于2020-01-05 18:08:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 整理的Ja
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我
复习一周,京东+百度一面,不小心都拿了Offer
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 还记得我上周说的重庆邮电研二的读者么? 、 知道他拿了Offer之后我也很开心,我就想把它的面试经历和面试题分享出来
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 很多次小伙伴问到学习方法,我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 其实学习方法这个事情,我没啥发言权
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了......,这可都是提升你幸福感的高效率生产力工具哦! 走起!...... NO、1 ScreenToGif 屏幕,摄像头和
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦......,嗯,我们导员是所有导员中最帅的一个,真的...... 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强......,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧?
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每
史上最全的IDEA快捷键总结
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 相关文章: Idea 中最常用的10款插件,提高开发效率 Eclipse 最牛逼的 10 组快捷键,提高开发效率
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
【综合篇】浏览器的工作原理:浏览器幕后揭秘
web(给达达前端加星标,提升前端技能) 了解浏览器是如何工作的,能够让你站在更高的角度去理解前端 浏览器的发展历程的三大路线,第一是应用程序web化,第二是web应用移动化,第三是web操作系统化。是不是有点不直白。 应用程序web化就是随着现在技术的发展,现在越来越多的应用转向了浏览器与服务器,就是B/S架构;web应用移动化,就是在移动设备应用,什么是移动设备呢。 “移动设备:
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
死磕Lambda表达式(二):Lambda的使用
在哪使用Lambda表达式?怎么样正确的使用Lambda表达式?
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠;但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具。那段时间,不少人开始推荐 Chrome 浏览器,我想那就试试吧,期初我觉得用起来很别扭,毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多,也就习惯了。 Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问