‘壹’ 想写个web服务器,用Go语言实现,需要有哪些前提知识
以我就说只会 JavaScript 啊 Java EE 啊 PHP 的就不要冒充程序员了……
先看看 Go 的 net 包和 net/http 包。基于 net 包里相对低级的接口,用 TCP 写基本的 C/S 通信程序。如果需要权威参考书,Unix Network Programming 是唯一正确的选择。另有 Beej‘s Guide to Network Programming 方便入门。
之后去看 rfc1945 实现基本的 HTTP/1.0。再之后开始实现 HTTP/1.1 的各种细节的时候才需要 http 权威指南吧。
‘贰’ Go语言以后会不会成为web主流开发语言
不会成为web主流
go是设计初衷来做系统应用和取代C++的....
目前主要用传统编译型语言编译成机器码的形式...
和web开发的跨平台标准化等特性有距离...
会成为很方便系统应用开发、客户端开发的语言...
‘叁’ golang适合做web开发吗
适合。框架足够成熟了 A Survey of 5 Go Web Frameworks
小型项目你甚至不用框架,用net/http http - The Go Programming Language
常用库也成熟了 Top - Go Search
golang的web后端即使不concurrent也比php,ruby,python快很多很多
golang里用concurrent真的非常方便,非常非常快,超大web项目golang scale成本低
如果你想,golang的部署可以比php更方便,使用go get和http.ServeAndListen()可以不用nginx和apache
对于文件改动重新编译其实并不是大问题,看pilu/fresh · GitHub,其实你自己写shell脚本(也可以直接用go写,因为它本身就是系统语言)监控文件系统改动然后自动重新build,即使是C/C++的项目这也不是大问题,人们不用C/C++写web是因为它们不是写web app的最佳选择
golang写的代码编译通过后,要比scripting language鲁棒,因为go compiler强制一些最佳实践
‘肆’ struts2拦截器和过滤器的区别
拦截器和过滤器的区别:
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
拦截器 :是在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
下面通过实例来看一下过滤器和拦截器的区别:
使用拦截器进行/admin 目录下jsp页面的过滤
[html]view plain
<packagename="newsDemo"extends="struts-default"
namespace="/admin">
<interceptors>
<interceptorname="auth"class="com.test.news.util.AccessInterceptor"/>
<interceptor-stackname="authStack">
<interceptor-refname="auth"/>
</interceptor-stack>
</interceptors>
<!--action-->
<actionname="newsAdminView!*"class="newsAction"
method="{1}">
<interceptor-refname="defaultStack"/>
<interceptor-refname="authStack">
</interceptor-ref>
packagecom.test.news.util;
importjava.util.Map;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;
importcom.test.news.action.AdminLoginAction;
/**
*@authorchaoyin
*/
{
=-4291195782860785705L;
@Override
publicStringintercept()throwsException{
ActionContextactionContext=actionInvocation.getInvocationContext();
Mapsession=actionContext.getSession();
//exceptloginaction
Objectaction=actionInvocation.getAction();
if(){
returnactionInvocation.invoke();
}
//checksession
if(session.get("user")==null){
return"logout";
}
returnactionInvocation.invoke();//goon
}
}
<filter>
<filter-name>accessfilter</filter-name>
<filter-class>
com.test.news.util.AccessFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>accessfilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
packagecom.test.news.util;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
{
/**
*@authorchaoyin
*/
publicvoiddestroy(){
}
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,
FilterChainfilterChain)throwsIOException,ServletException{
HttpServletRequestrequest=(HttpServletRequest)arg0;
HttpServletResponseresponse=(HttpServletResponse)arg1;
HttpSessionsession=request.getSession();
if(session.getAttribute("user")==null&&request.getRequestURI().indexOf("login.jsp")==-1){
response.sendRedirect("login.jsp");
return;
}
filterChain.doFilter(arg0,arg1);
}
publicvoidinit(FilterConfigarg0)throwsServletException{
}
}
下面是我实现的Interceptor class:
[java]view plain
过滤器:是在javaweb中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.
使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤器配置:
[html]view plain
下面是过滤的实现类:
[java]view plain
‘伍’ 如何在树莓派上安装一个简单的Go Web服务器
工具/原料
树莓派
nat123
LAMP
方法/步骤
在树莓派上安装linux系统,到官网下载系统压缩包,推荐使用raspbian。
如果在windows下安装,需要下载win32diskimager,解压系统,将解压出来的系统映像写到内存卡(内存卡最好大点,推荐8G以上的内存卡)。
如果在Linux系统下安装,先输入命令:sudo fdisk -l
查询内存卡的分区,一般是/dev/sdb。
把系统映像解压到家目录下/home/***,输入命令:
sudo dd bs=1M if=~/2016-02-26-raspbian-jessie-lite.img of=/dev/sdb
这步按你自己的实际情况操作。
看到以下输出就成功写入了。
把内存卡装入树莓派,开机启动,第一次会需要配置系统,可以按默认设置直接启动进入系统。
安装Apache。apache服务器一般在linux软件源列表有,可以用apt安装。
在安装可以先更新一下apt的软件列表,以确定安装的软件是最新。
输入命令:sudo apt-get update
更新完毕可以正式安装apache了。
输入命令:sudo apt-get install apache2
安装mysql。这个也是软件列表中的软件,所以直接用apt安装。因为我们是使用服务器端应用,输入以下命令安装:
sudo apt-get install mysql-server
安装PHP。
输入命令:sudo apt-get install php5
php还需要对数据库进行操作,所以还需要安装php5-mysql
输入命令:sudo apt-get install php5-mysql
8
注册一个域名,用nat123将你的域名与你的IP进行域名解析。若是内网则还需要内网映射。
9
在浏览器输入打开你的网址,网页正常显示服务器就搭建成功了。
‘陆’ Go语言做Web应用开发的框架,哪一个更适合入门
Revel Web开源框架
个高效的Go语言Web开发框架,其思路完全来自 Java 的Play Framework。
特点
热编译,简单可选,同步(每个请求都创建自己的goroutine来处理。
Go语言Web框架:beego
一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra。
支持特性
MVC;
REST;
智能路由;
日志调试;
配置管理;
模板自动渲染;
layout设计;
中间件插入逻辑;
方便的JSON/XML服务;
‘柒’ golang web 浏览器每请求一次 golang是启动一个新的线程吗
是协程,每一个请求都会单独启动一个 goroutine,可以理解为轻量级线程
‘捌’ java web登录后的各种请求在浏览器地址不变,过滤器该怎样拦截每次的请求
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
if(req.getSession().getAttribute("user")==null){
req.setAttribute("error", "请你先登录");
//非法请求才会进到这里面,在这里保存请求的url地址,在成功登录后再进行跳转
req.getSession().setAttribute("goUrl", req.getRequestURL()+"?"+ req.getQueryString());
request.getRequestDispatcher("/ulogin.jsp").forward(request, response);
}
else{
chain.doFilter(request, response);
}
}
上面的代码是过滤器中的代码
下面的是servlet中的代码
if(request.getSession().getAttribute("goUrl")!=null){
String url = (String)request.getSession().getAttribute("goUrl");
response.sendRedirect(url);
}
else{
response.sendRedirect("/webshopping/index.jsp");
}
‘玖’ 大家觉得用Go做WEB有必要用框架吗
第一个:Beego框架
Beego框架是astaxie的GOWeb开发的开源框架。Beego框架最大的特点是由八个大的基础模块组成,八大基础模块的特点是可以根据自己的需要进行引入,模块相互独立,模块之间耦合性低。
相应的Beego的缺点就是全部使用时比较臃肿,通过bee工具来构建项目时,直接生成项目目录和耦合关系,从而会导致在项目开发过程中受制性较大。
第二个:Gin框架
Gin是一个GOlang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本;具有快速灵活、容错方便等特点,其实对于golang而言,web框架的依赖远比Python、Java更小。
目前在很多使用golang的中小型公司中进行业务开发,使用Gin框架的很多,大家如果想使用golang进行熟练Web开发,可以多关注一下这个框架。
第三个:Iris框架
Iris框架在其官方网站上被描述为GO开发中最快的Web框架,并给出了多框架和多语言之前的性能对比。目前在github上,Iris框架已经收获了14433个star和1493个fork,可见是非常受欢迎的。
在实际开发中,Iris框架与Gin框架的学习曲线几乎相同,所以掌握了Gin就可以轻松掌握Iris框架。
第四个:Echo框架
也是golang的微型Web框架,其具备快速HTTP路由器、支持扩展中间件,同时还支持静态文件服务、Websocket以及支持制定绑定函数,制定相应渲染函数,并允许使用任意的HTML模版引擎。