如何在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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
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
Ueditor 跨域上传图片,图片回显不能接收到json数据问题。
问题描述:搭建了俩服务器,一个资源服务器,一个应用服务器, 当使用Ueditor上传功能时,必须将图片上传到资源服务器,也就是远程服务器时,会出现跨域问题,一个应用服务器时用Ueditor上传图片到一个应用中,没有问题,json也可以接收到,但上传到资源服务器时,上传的Controller可以正常执行、返回json数据,但接收不到json数据,导致图片无法回显 使用 document.domain = "http://localhost";会报错,不知如何配置。 菜鸟一枚,请高手指点一二 **1.downFile=文件服务器 / tuji=项目目录** (文件服务器地址为:http://localhost:8080 项目目录地址:http://localhost:80) ![图片说明](https://img-ask.csdn.net/upload/201708/11/1502443327_119661.png) ![图片说明](https://img-ask.csdn.net/upload/201708/11/1502443386_267950.png) . Ueditor.all.js报错的位置 ![图片说明](https://img-ask.csdn.net/upload/201708/11/1502444900_772575.png) **2.jsp页面代码** ``` <%@ page language="java" contentType="text/html; charset=UTF-8" import="com.tuji.utils.FileUtil" pageEncoding="UTF-8"%> <%@ page trimDirectiveWhitespaces="true" %> <% String contextPath = FileUtil.httpPath; %> <%-- <% String contextPath = "http://"+request.getServerName()+":"+request.getLocalPort()+request.getContextPath(); %> --%> <!DOCTYPE html> <script type="text/javascript" charset="utf-8" src="<%=contextPath%>/resource/web/common/ueditor/third-party/jquery-1.10.2.js"></script> <script type="text/javascript" charset="utf-8" src="<%=contextPath%>/resource/web/common/ueditor/ueditor.config.js"></script> <script type="text/javascript" charset="utf-8" src="<%=contextPath%>/resource/web/common/ueditor/ueditor.all.js"> </script> <script type="text/javascript" charset="utf-8" src="<%=contextPath%>/resource/web/common/ueditor/lang/zh-cn/zh-cn.js"></script> <script> //编辑器资源文件根路径 最好在ueditor.config.js中配置 window.UEDITOR_HOME_URL = "<%=contextPath%>/"; //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例 var ue = UE.getEditor('editor',{initialFrameHeight: 500,initialFrameWidth:800,maximumWords:3000,elementPathEnabled:false}); //复写UEDITOR的getActionUrl 方法,定义自己的Action UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl; UE.Editor.prototype.getActionUrl = function(action) { if (action == 'uploadimage' || action == 'uploadfile') { var id = $('#carInfoId').val(); return '<%=contextPath %>/file/ueditorUpload'; } else { return this._bkGetActionUrl.call(this, action); } }; // 复写UEDITOR的getContentLength方法 解决富文本编辑器中一张图片或者一个文件只能算一个字符的问题,可跟数据库字符的长度配合使用 UE.Editor.prototype._bkGetContentLength = UE.Editor.prototype.getContentLength; UE.Editor.prototype.getContentLength = function(){ return this.getContent().length; } </script> <html> <head> <%@ include file="../../common/common.jsp"%> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="${ctx}/resource/web/sys/sys/sys.css"> <link rel="stylesheet" type="text/css" href="${ctx}/resource/web/common/css/backstageCommon.css"> <%-- <script type="text/javascript" charset="utf-8" src="${ctx }/resource/web/common/ueditor/ueditor.config.js"></script> --%> <%-- <script type="text/javascript" charset="utf-8" src="${ctx }/resource/web/common/ueditor/ueditor.all.min.js"> </script> --%> <!-- 建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败 --> <!-- 这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文 --> <%-- <script type="text/javascript" charset="utf-8" src="${ctx }/resource/web/common/ueditor/lang/zh-cn/zh-cn.js"></script> --%> </head> <body class="bgColor2" style="text-align: center;"> <div style="width: 20%;margin: 0 auto;margin-top: 10%;"> <form id="saveForm" action="${ctx }/sys/opus/saveContent" method="post"> <input type="hidden" name="id" value="${opus.id }"> <input type="button" id="close" class='bgColor2 borderColor2 fontColor1 btn alertBtn pageBtn' style='margin: 0 auto;font-size:12px;margin-bottom: 80px;' value="关&nbsp;闭"> <input type="button" id="saveContent" class='bgColor2 borderColor2 fontColor1 btn alertBtn pageBtn' style='margin: 0 auto;font-size:12px;margin-bottom: 80px;' value="保&nbsp;存"> <br/> <div style="color: white;margin-bottom: 30px;">${opus.name }</div> <script name="content" id="editor" type="text/plain"> ${opus.content } </script> </form> </div> <%@ include file="../../common/upload.jsp"%> </body> <!-- 富文本编辑器 --> <script type="text/javascript"> // document.domain = "http://localhost:8080"; $("#close").click(function() { window.close(); }); var isFirst = true; $("#saveContent").click(function() { if(!isFirst){ return; } $("#saveForm").submit(); return; $.ajax({ type: "POST", url: "${ctx}/sys/opus/saveContent", data:{ "id" : '${opus.id}', "content" : $("#editor").val() }, dataType : "json", success: function(data) { if(data.result == 0){ alert("保存成功!") }else{ alert(data.msg); } } }); }); $(".pageBtn").hover(function() { $(this).removeClass("bgColor2"); $(this).addClass("bgColor1"); $(this).removeClass("fontColor1"); $(this).addClass("fontColor3"); $(this).css("transition", "all 0.25s ease"); }, function() { $(this).removeClass("bgColor1"); $(this).addClass("bgColor2"); $(this).removeClass("fontColor3"); $(this).addClass("fontColor1"); $(this).css("transition", "all 0.5s ease"); }); </script> </html> ``` ``` **3.接收Ueditor上传的Conroller** /** * Ueditor 文件上传Action * @param req * @return UEDITOR 需要的json格式数据 */ @CrossOrigin @RequestMapping(value="ueditorUpload",method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public Map<String,Object> upload(HttpServletRequest request){ Map<String,Object> result = new HashMap<String, Object>(); MultipartHttpServletRequest mReq = null; MultipartFile file = null; InputStream is = null ; String fileName = ""; try { mReq = (MultipartHttpServletRequest)request; // 从config.json中取得上传文件的ID file = mReq.getFile("upfile"); // 原始文件名 UEDITOR创建页面元素时的alt和title属性 String originalFileName = file.getOriginalFilename(); String filePath = ""; if (!file.isEmpty()) { try { String newName = UUID.randomUUID().toString() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); String path = FileUtil.getUeditorDownPath(); FileUtil.uploadFile(request, new BufferedInputStream(file.getInputStream()), path + newName); filePath = path + newName; Long fileSize = file.getSize(); SysFile sysFile = new SysFile(); sysFile.setPath(filePath); sysFile.setSize(fileSize + ""); sysFile.setName(originalFileName); sysFileServiceI.saveOrUpdate(sysFile); result.put("state", "SUCCESS");// UEDITOR的规则:不为SUCCESS则显示state的内容 result.put("url", FileUtil.getHttpPath() + filePath); result.put("title", originalFileName); result.put("original", originalFileName); } catch (IOException e) { e.printStackTrace(); result.put("success", false); result.put("msg", "服务器异常,请联系管理员!"); } return result; } else { result.put("success", false); result.put("msg", "文件内容为空!"); return result; } } catch (Exception e) { System.out.println(e.getMessage()); result.put("state", "文件上传失败!"); result.put("url",""); result.put("title", ""); result.put("original", ""); System.out.println("文件 "+fileName+" 上传失败!"); } return result; } ```
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
MyBatis研习录(01)——MyBatis概述与入门
C语言自学完备手册(33篇) Android多分辨率适配框架 JavaWeb核心技术系列教程 HTML5前端开发实战系列教程 MySQL数据库实操教程(35篇图文版) 推翻自己和过往——自定义View系列教程(10篇) 走出思维困境,踏上精进之路——Android开发进阶精华录 讲给Android程序员看的前端系列教程(40集免费视频教程+源码) 版权声明 本文原创作者:谷哥的小弟 作者博客
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
文章目录1. 前言2. 数据下载3. 数据处理4. 数据可视化 1. 前言 今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。 2月6日追记:本文发布后,腾讯的数据源多次变更u
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序
Python:爬取疫情每日数据
前言 有部分同学留言说为什么412,这是因为我代码里全国的cookies需要你自己打开浏览器更新好后替换,而且这个cookies大概只能持续20秒左右! 另外全国卫健委的数据格式一直在变,也有可能会导致爬取失败! 我现在已根据2月14日最新通报稿的格式修正了! 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 为什么已经有大量平台做
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
粒子群算法求解物流配送路线问题(python)
粒子群算法求解物流配送路线问题(python) 1.查找论文文献 找一篇物流配送路径优化+粒子群算法求解的论文 参考文献:基于混沌粒子群算法的物流配送路径优化 2.了解粒子群算法的原理 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/details/81382794 3.确定编码方式和解码策略 3.1编码方式 物流配送路线的
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang.
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问