我正在玩Nodejs并通过构建一个小的rest API来表达.我的问题是,设置代码状态的好方法/最佳方法是什么,以及响应数据?
让我解释一下代码(我不会把节点和快速代码放到启动服务器,只关注路由器方法):
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
res.json(user);
});
exports.getUserById = function(id) {
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) return users[i];
}
};
Run Code Online (Sandbox Code Playgroud)
下面的代码工作正常,当使用Postman发送请求时,我得到以下结果:

如您所见,状态显示200,即可.但这是最好的方法吗?有没有我应该自己设置状态,以及返回的JSON?或者总是由快递处理?
例如,我刚刚进行了快速测试并略微修改了上面的get方法:
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
if (user == null || user == 'undefined') {
res.status(404);
}
res.json(user);
});
Run Code Online (Sandbox Code Playgroud)
如您所见,如果在阵列中找不到用户,我将只设置404状态.
有关此主题的更多信息的资源/建议非常受欢迎.
我试图掌握数据库分区的不同概念,这就是我对它的理解:
水平分区/分片:将表拆分到不同的表中,该表将包含初始表中的行的子集(如果按大陆分割Users表,我已经看到了很多示例,如北美的子表,另一个为欧洲等...).每个分区位于不同的物理位置(了解"机器").据我所知,水平分区和分片是完全相同的(?).
垂直分区:根据我的理解(http://technet.microsoft.com/en-us/library/ms178148%28v=sql.105%29.aspx),有两种垂直分区:
规范化(包括通过拆分表并使用外键链接来从数据库中删除冗余).
Row Splitting,这是我不明白的,Normalization和Row Splitting有什么区别?那两种技术在哪些方面有所不同?
我还读过这篇文章(数据库水平和垂直缩放之间的差异),水平分区和垂直分区之间的区别在于,您通过添加更多机器来扩展第一个,而在第二个中您通过添加更多功率进行扩展( CPU,RAM)到你现有的机器,是一个正确的定义?我认为这两种技术之间的核心区别在于您分割表格的方式.
对于大量问题我很抱歉,但是我有点困惑,因为我遇到的很多不同的网站都说不同的东西.
任何帮助澄清将不胜感激.任何带有几个表格的简单演示的链接也会非常有用.
database database-design sharding database-performance database-partitioning
仅当用户通过身份验证时,我才在JSP页面中显示注销链接时遇到问题.以下是我在JSP页面这一行的例外情况:
<sec:authorize access="isAuthenticated()">
Run Code Online (Sandbox Code Playgroud)
例外:
Stacktrace:
....
root cause
javax.servlet.jsp.JspException: No visible WebSecurityExpressionHandler instance could be found in the application context. There must be at least one in order to support expressions in JSP 'authorize' tags.
org.springframework.security.taglibs.authz.AuthorizeTag.getExpressionHandler(AuthorizeTag.java:100)
org.springframework.security.taglibs.authz.AuthorizeTag.authorizeUsingAccessExpression(AuthorizeTag.java:58)
Run Code Online (Sandbox Code Playgroud)
这是我的application-context-Security.xml:
<http auto-config='true' >
<intercept-url pattern="/user/**" access="ROLE_User" />
<logout logout-success-url="/hello.htm" />
</http>
<beans:bean id="daoAuthenticationProvider"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<beans:property name="userDetailsService" ref="userDetailsService" />
</beans:bean>
<beans:bean id="authenticationManager"
class="org.springframework.security.authentication.ProviderManager">
<beans:property name="providers">
<beans:list>
<beans:ref local="daoAuthenticationProvider" />
</beans:list>
</beans:property>
</beans:bean>
<authentication-manager>
<authentication-provider user-service-ref="userDetailsService">
<password-encoder hash="plaintext" />
</authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)
我知道我可以在http标签中使用use-expression ="true",但这意味着我必须在intercept-url标签和java代码中使用表达式.有解决方法吗?
我正在使用他们的REST API向SMS网关发送呼叫.当我发送一个简单的单词如'Hello'时,一切都很好,但是如果我添加一个空格,那么我遇到了麻烦.这是因为URI不能包含空格.
做我需要做的事情的正确方法是什么?
HttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet("http://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=hello how are you?");
httpget.addHeader(new BasicHeader("Accept", "application/json"));
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println("----------------------------------------");
System.out.println(responseBody);
System.out.println("----------------------------------------");
} finally {
httpclient.getConnectionManager().shutdown();
}
Run Code Online (Sandbox Code Playgroud)
导致IllegalArgumentException:
Exception in thread "main" java.lang.IllegalArgumentException
at java.net.URI.create(Unknown Source)
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
at main.main(main.java:36)
Caused by: java.net.URISyntaxException: Illegal character in query at index 97: https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=Hello, how are you?
at java.net.URI$Parser.fail(Unknown Source)
at java.net.URI$Parser.checkChars(Unknown Source)
at java.net.URI$Parser.parseHierarchical(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的JSP页面中实现分页.我正在使用Spring MVC和Hibernate.java代码部分没问题但我在JSP页面中实现它有困难.我正在使用twitter bootstrap.
这是我到目前为止所做的事情:
<div class="container">
<table class="table table-hover">
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<c:forEach items="${employees}" var="emp">
<tr>
<td>${emp.firstName}</td>
<td>${emp.lastName}</td>
<td>${emp.Age}</td>
</tr>
</c:forEach>
</table>
<div class="pagination">
<ul>
<li class="disabled"><a href="#">First</a></li>
<li class="disabled"><a href="#">Prev</a></li>
<li class="active"><a href="#">1</a></li>
<li class="active"><a href="#">2</a></li>
<li class="active"><a href="#">3</a></li>
<li class="active"><a href="#">4</a></li>
<li class="active"><a href="#">5</a></li>
<li class="active"><a href="#">Next</a></li>
<li class="active"><a href="#">Last</a></li>
</ul>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器中的相关代码:
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String getEmployees(ModelMap model) {
**//I believe I should get the page number from the JSP …Run Code Online (Sandbox Code Playgroud) 我实际上是尝试使用CDYNE及其API发送短信.为此,我使用Java和HttpGet和HttpClient对象(Httpcore和HttpClient库).我将请求发送到https URL,发送参数如https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=ABC&Message=XYZ
我正在使用GET请求并且所有参数都在URL中,这是一个安全问题吗?如果URL中的Message参数的内容包含敏感信息,该怎么办?有人可以嗅探网络以获取内容,或者是否安全,因为请求是使用HTTPS发送的?
我相信只有www.example.com在握手过程中是可见的,一旦完成,一切都是加密的,但我只是想确定.
我一直在尝试遵循这个教程:http://viralpatel.net/blogs/2010/11/spring3-mvc-hibernate-maven-tutorial-eclipse-example.html
我没有使用本教程遇到任何问题,但我的问题是:如何创建一个战争,以便我可以在tomcat中部署应用程序?
编辑:我已经能够创建战争并部署它但现在尝试访问localhost时:8080/MavenWeb我有一个404页面.
战争是正确构建的,它的名称是MavenWeb.war,如pom.xml文件中的finalName标记所指定.
以下是部署时tomcat的日志:
May 27, 2012 9:32:14 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.7.0_04\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.7.0_04\;C:\apache-tomcat-7.0.27\lib;C:\apache-maven-3.0.4\bin;C:\Program Files\Java\jdk1.7.0_04\\bin;C:\apache-tomcat-7.0.27\lib;.
May 27, 2012 9:32:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
May 27, 2012 9:32:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
May 27, 2012 9:32:14 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 523 ms
May 27, …Run Code Online (Sandbox Code Playgroud) 我安装了Spring Tool Suite,现在将它用于一个小样本项目.但是我的dispatcher-servlet.xml文件中出现错误:
Build path is incomplete. Cannot find class file for org/springframework/beans/factory/Aware
Run Code Online (Sandbox Code Playgroud)
此处突出显示此错误:
<bean
**class="org.springframework.web.servlet.view.InternalResourceViewResolver">**
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
任何想法?
我正在通过构建REST API学习和使用Node and Express。我没有任何数据库可以存储数据,我可以在内存中进行所有操作。
假设我有很多用户:
var users = [{"id": "1", "firstName": "John", "lastName": "Doe"}];
Run Code Online (Sandbox Code Playgroud)
并定义了一个getAllUser函数:
exports.getAllUser = function(page, items) {
page = (page < 1 ? 1 : page) || 1;
items = (items < 1 ? 5 : items) || 5;
var indexStart, indexEnd;
indexStart = (page - 1) * items;
indexEnd = indexStart + items;
return users.slice(indexStart, indexEnd);
};
Run Code Online (Sandbox Code Playgroud)
并定义一条路线:
router.get('/users', function(req, res, next) {
var page = req.query.page;
items = req.query.items;
page = page !== 'undefined' ? …Run Code Online (Sandbox Code Playgroud) 我试图有这个确切的JSON语法,但无法达到它:
{
"sun":"yellow",
"vegetables":[{
"apple":"red",
"banana":"yellow",
"melon":"orange"
}]
}
Run Code Online (Sandbox Code Playgroud)
我能得到的最接近的是:
{
"sun":"yellow",
"vegetables":["{
"apple":"red",
"banana":"yellow",
"melon":"orange"
"]}
}
Run Code Online (Sandbox Code Playgroud)
这就是我在做的事情:
JSONObject json = new JSONObject();
json.put("sun","yellow");
ArrayList<HashMap<String,Object>> test = new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> params = new HashMap<String, Object>();
params.put("apple","red");
params.put("banana","yellow");
params.put("melon","orange");
test.add(params);
json.put("fruits",test);
Run Code Online (Sandbox Code Playgroud)
我无法理解,我错过了什么?
我是Spring的新手,我正在努力完成以下任务:
假设我在数据库表中有一个包含2列"id"和"name"的水果列表.我想有一个显示列表的页面,每个水果旁边都有一个"删除"按钮.我认为这很容易实现,但我无法弄明白,也找不到任何解释这个的教程.
这就是我现在所拥有的:
视图:
<c:forEach items="${fruits}" var="fruit">
<tr>
<td><c:out value="${fruit.name}" /></td>
<sec:authorize access="hasRole('admin')">
<td>
<a href="<c:url var="deleteUrl" value="/fruit/remove.html"/>">DELETE</a>
<form id="${fruitFormId}" method="POST">
<input id="fruit" name="fruit" type="hidden" value="${fruit.id}"/>
</form>
</td>
</sec:authorize>
</tr>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
然后控制器:
@Controller
public class FruitController{
@Autowired
private FruitManager fruitManager;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String getFruits(ModelMap model) {
model.addAttribute("fruits", this.fruitManager.getFruits());
return "list";
}
@RequestMapping(value = "/fruit/remove", method = RequestMethod.POST)
public String removeAd(Fruit fruit) {
fruitManager.removeFruit(fruit);
return "/list";
}
Run Code Online (Sandbox Code Playgroud)
我甚至不确定我现在正在使用"良好和干净"的方式,并希望按照惯例(如果有的话)完成这种"正确的方式".