1.
@ExceptionHandler(ArithmeticException.class)
public ModelAndView getArithmeticException(Exception ex){
ModelAndView mv = new ModelAndView("error");
mv.addObject("ex", ex);
return mv;
}
@RequestMapping("/zero")
public void ac(@RequestParam("i") int i){
System.out.println(10/i);
}
當(dāng)發(fā)生ArithmeticException異常的時(shí)候,在error.jsp頁(yè)面輸出異常 。
2.
@ControllerAdvice
public class Exceptions {
@ExceptionHandler(ArithmeticException.class)
public ModelAndView getArithmeticException(Exception ex){
ModelAndView mv = new ModelAndView("error");
mv.addObject("ex", ex);
return mv;
}
}
如果在本類中找不到異常處理的方法,就去@ControllerAdvice注解的類中查找異常處理的類的方法。
3.
@ResponseStatus(value=HttpStatus.BAD_REQUEST,reason="請(qǐng)求不對(duì)")
public class UserExceptions extends RuntimeException{
/**
*
*/
private static final long serialVersionUID = 1L;
}
在controller的方法里拋出UserExceptions 異常,在頁(yè)面上顯示
HTTP Status 400 - 請(qǐng)求不對(duì)
(function (){
function Person(){
this.getAge=function (age){
alert(age);
}
}
//讓此類的所有對(duì)象有name屬性,showName方法
Person.prototype.name="yjw";
Person.prototype.showName=function(){
alert(this.name);
}
// new Person().showName();
var v={};
//讓空對(duì)象v繼承Person,含有Person的所有屬性和方法
v.__proto__=new Person();
v.__proto__.constructor=v;
v.getAge(1);
v.showName();
})()
(function (){
//創(chuàng)建一個(gè)人員類
function Person(n){
this.name=n;
this.getAge=function (age){
alert(age);
}
}
//創(chuàng)建教師類
function Teacher(name,books){
//call方法可以將一個(gè)函數(shù)的對(duì)象上下文,從初始化變成由this來(lái)決定
//調(diào)用Person的構(gòu)造函數(shù),
Person.call(this, name);//this就是person的this,name屬性就是person的屬性
this.books=books;
}
//讓教師類繼承人員類
Teacher.prototype=new Person();
Teacher.prototype.constructor=Teacher;//教師的構(gòu)造方法還是使用教師自己的構(gòu)造方法
Teacher.prototype.getBook = function(){//給教師類的原型添加方法
return this.name+" "+this.books;
}
var jim = new Teacher("jim","extjs");
// alert(jim.getBook());
//jim.getAge(2);
function extend(subClass,superClass){
//1.讓子類原型類屬性等于父類的原型屬性,初始化一個(gè)中間空對(duì)象,為了轉(zhuǎn)換主父類關(guān)系
var f = function(){};
f.prototype=superClass.prototype;
//2.讓子類繼承f
subClass.prototype=new f();
subClass.prototype.constructor=subClass;
//3.為子類增加屬性,繼承父類的原型對(duì)象
subClass.fuLei=superClass.prototype;
//4.增加一個(gè)保險(xiǎn),就算父類的原型類是超類object,也要把父類的構(gòu)造函數(shù)的級(jí)別降下來(lái)
if(superClass.prototype.constructor==Object.prototype.constructor){
superClass.prototype.constructor=superClass;
}
}
function Student(name,books){
Student.fuLei.constructor.call(this,name);
this.books=books;
this.getBooks=function(){
return this.name+" "+this.books;
}
}
extend(Student, Person);
var s = new Student("s","a");
alert(s.getBooks());
s.getAge(2);
})()
1.如果兩個(gè)網(wǎng)站域名的一級(jí)域名相同,可以使用cookie和filter實(shí)現(xiàn)單點(diǎn)登錄,因?yàn)榫W(wǎng)站有可能(具體看cookie的設(shè)置)可以共享cookie。例如:www.bbs.aa.cn www.news.aa.cn。
第一個(gè)網(wǎng)站在登錄后,把用戶信息寫到cookie中,當(dāng)訪問(wèn)第二個(gè)網(wǎng)站時(shí),第二個(gè)網(wǎng)站先經(jīng)過(guò)自己的filter,檢查session,如果沒(méi)有,查詢cookie,取出用戶信息,放在session中登錄。
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
if(request.getSession().getAttribute("user")== null){
Cookie[] cs = request.getCookies();
if (cs != null && cs.length > 0) {
for (Cookie c : cs) {
String cName = c.getName();
if (cName.equals("sso")) {
String userName = c.getValue();
request.getSession().setAttribute("user", userName);
}
}
}
}
chain.doFilter(request, resp);
}
2.如果兩個(gè)網(wǎng)站域名的一級(jí)域名不同,不可以使用cookie和filter實(shí)現(xiàn)單點(diǎn)登錄,因?yàn)榫W(wǎng)站不可以共享cookie。例如:www.bbs.cn www.news.cn。
使用cas框架服務(wù)實(shí)現(xiàn)單點(diǎn)登錄。1.部署cas服務(wù)端。2.在服務(wù)器端的ticketGrantingTicketCookieGenerator.xml中修改文件。<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"http://使用http協(xié)議
p:cookieMaxAge="-1"http://cookie有效時(shí)間
p:cookieName="yjwname"http://cookie名稱
p:cookiePath="/" />//項(xiàng)目名稱
3.部署www.bbs.cn www.news.cn服務(wù),在每個(gè)客戶端項(xiàng)目中加入casjar包,在web.xml中配置<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2008, Martin W. Kirst
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Martin W. Kirst nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<web-app id="mywebapp" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>mywebapp</display-name>
<description>
Simple sample, how to use CAS Java Client 3.x.
In this sample exists a public area (/)
and a private area (/protected/*).
</description>
<!-- Sign out not yet implemented -->
<!--
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
-->
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<!--cas服務(wù)器地址-->
<param-name>casServerLoginUrl</param-name>
<param-value>http://www.service.com:8081/login</param-value>
</init-param>
<init-param>
<!--自己的地址-->
<param-name>serverName</param-name>
<param-value>http://www.bbs.com:8081</param-value>
</init-param>
<init-param>
<param-name>renew</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>gateway</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://www.service.com:8081</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://www.bbs.com:8081</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<!-- ************************* -->
<!-- Sign out not yet implemented -->
<!--
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<!--此URL下的資源都需要驗(yàn)證登錄-->
<url-pattern>/protected/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/proxyCallback</url-pattern>
</filter-mapping>
<!-- *********************** -->
<!-- Sign out not yet implemented -->
<!--
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
-->
</web-app>
4.啟動(dòng)服務(wù),這樣就可以實(shí)現(xiàn)單點(diǎn)登錄
1.查看文件命令
命令格式:ls -la (查看所有文件,包括隱藏文件)
ls -l 或者ll (顯示文件詳細(xì)信息)
ls -d (查看目錄屬性)
2.文件類型和權(quán)限標(biāo)示
- rw- rw- r--
-表示文件 d表示目錄 l表示軟鏈接文件
rw- 表示所有者的權(quán)限
rw-表示所有組的權(quán)限
r--表示其他人的權(quán)限
r讀權(quán)限w寫權(quán)限x執(zhí)行權(quán)限
3.命令mkdir 創(chuàng)建目錄 mkdir -p 遞歸創(chuàng)建目錄
4.cd 進(jìn)入目錄 cd .. 返回上層目錄
5.pwd 顯示當(dāng)前所在目錄
6.rmdir 刪除空目錄
7.cp -r 復(fù)制目錄 目的目錄 cp -p 復(fù)制目錄 目的目錄,保留文件屬性
8.mv 剪切文件或者目錄或者 修改文件名
9.rm -r 刪除目錄 rm -f 強(qiáng)制執(zhí)行 rm -rf 強(qiáng)制刪除文件或者目錄
10.touch 創(chuàng)建文件
11. cat 查看文件全文 cat -n 顯示行號(hào)
12.more 查看大文件,f或者空格 向下翻頁(yè),enter 向下每行顯示,
13.less 向上翻頁(yè)查看大文件
14.head 文件名 head -n 10查看文件頭10行
15.tail -n 10 文件名 ,查看文件尾部10行
16.tail -f 文件夾 實(shí)時(shí)查看文件變化